25 February 2009 at 9:38am
How do I get the link to a resized image in a template? It would be nice to be able to do something like:
However, I can't do that as Image.SetWidth(150) always returns HTML.
(In case you're wondering, I'm building a desktop background download page where the background image needs to be offered in several resolutions. I would like to auto-generate those variations using image resizing functionality.)
25 February 2009 at 7:45pm
(Last edited: 25 February 2009 7:46pm),
Strangely, I came across this very same problem today, trying to set some page-specific CSS.
Writing a class is a very messy solution because it also means the theme and mysite folders are more coupled. This syling information should definitely be in the themes directory. If anyone can offer any ideas, I would also love to hear them.
5 March 2009 at 12:07pm
More on this:
The template parser (in sapphire\core\SSViewer.php) uses regular expressions to convert template method/property calls into PHP. These regexes look for a fixed combination of call signatures--i.e. "Property.Subproperty", "Property(one_argument).Subproperty", "Property.Subproperty(one_argument)", etc. The signature of "Image.SetWidth(150).Link " does not match any of the defined call signatures. However, the signature of "Image.SetWidth(150)" does match one of the signatures. So, the parser converts "Image.SetWidth(150)" into PHP (which then is rendered as HTML) and then outputs ".URL" after it.
A [url=http://groups.google.com/group/silverstripe-dev/browse_thread/thread/7842ab97f687cd1e#]draft patch[/url] has been proposed which will remove the limitation of having a fixed list of allowed call signatures.