Hi,
I am in the need to improve the wgSmarty-Engine (to theme the menu for example) but the current implementation does not allow it, without modifing the theme-engine-file.
I think a better approach would be to include the php-file, which defines a theme as a wgSmarty-compliant-theme, the file wgSmarty_theme.php. This file could extend the wgSmarty-Engine inside a theme nicer and cleaner than hacking the engine itself.
To include theme-specific PHP-Code just replace the function wgSmarty_init with the following:
function wgSmarty_init($template) {
require_once(dirname(__FILE__).'/class_wgSmarty.php');
global $wgSmarty;
$wgSmarty = new wgSmarty;
// include wgSmarty_theme.php file, so it can extend the engine :)
$file = dirname($template->filename) . '/wgSmarty_theme.php';
if (file_exists($file)) {
include_once($file);
}
}
Sorry, I am new to drupal, if there is another approach to solve my problem, disregard this feature-request.
Comments
Comment #1
tclineks CreditAttribution: tclineks commentedThis code looks functional to me.
The Smarty Theme Engine (http://drupal.org/project/smarty) which I maintain has this functionality already. (the filename is 'smartytemplate.php')
I've also included an easy way to make your functions available to Smarty as to call them with {functionname var1=value1....} as opposed to {php}echo functionname(value1, ...);{/php}
I haven't yet written explanatory documentation but I should have it out soon.
tclineks
Comment #2
stmh CreditAttribution: stmh commented... so I moved my theme back to Smarty (I switched to wgSmarty because of flexiblock)
I added a new Smarty-Plugin which includes a specific flexiblock on demand.
Comment #3
tclineks CreditAttribution: tclineks commentedGreat, send it over (use contact form if you'd like) and I'll consider including it as a contribution.