cvs: smarty /libs Smarty_Compiler.class.php
"Messju Mohr" <[email protected]>
| Newsgroups | gmane.comp.php.cvs.smarty |
|---|---|
| Message-ID | <cvsmessju1075044559@cvsserver> |
messju Sun Jan 25 10:29:19 2004 EDT
Modified files:
/smarty/libs Smarty_Compiler.class.php
Log:
unrecognized custom-functions trigger an error at compile now, not at
display-time.
http://cvs.php.net/diff.php/smarty/libs/Smarty_Compiler.class.php?r1=1.308&r2=1.309&ty=u
Index: smarty/libs/Smarty_Compiler.class.php
diff -u smarty/libs/Smarty_Compiler.class.php:1.308 smarty/libs/Smarty_Compiler.class.php:1.309
--- smarty/libs/Smarty_Compiler.class.php:1.308 Fri Jan 16 17:12:07 2004
+++ smarty/libs/Smarty_Compiler.class.php Sun Jan 25 10:29:19 2004
@@ -39,7 +39,7 @@
* @package Smarty
*/
-/* $Id: Smarty_Compiler.class.php,v 1.308 2004/01/16 22:12:07 mohrt Exp $ */
+/* $Id: Smarty_Compiler.class.php,v 1.309 2004/01/25 15:29:19 messju Exp $ */
/**
* Template compiling class
@@ -558,9 +558,12 @@
return $output;
} else if ($this->_compile_block_tag($tag_command, $tag_args, $tag_modifier, $output)) {
return $output;
+ } else if ($this->_compile_custom_tag($tag_command, $tag_args, $tag_modifier, $output)) {
+ return $output;
} else {
- return $this->_compile_custom_tag($tag_command, $tag_args, $tag_modifier);
+ $this->_syntax_error("unrecognized tag '$tag_command'", E_USER_WARNING, __FILE__, __LINE__);
}
+
}
}
@@ -733,25 +736,68 @@
* @param string $tag_modifier
* @return string
*/
- function _compile_custom_tag($tag_command, $tag_args, $tag_modifier)
+ function _compile_custom_tag($tag_command, $tag_args, $tag_modifier, &$output)
{
+ $found = false;
+ $have_function = true;
+
+ /*
+ * First we check if the custom function has already been registered
+ * or loaded from a plugin file.
+ */
+ if (isset($this->_plugins['function'][$tag_command])) {
+ $found = true;
+ $plugin_func = $this->_plugins['function'][$tag_command][0];
+ if (!is_callable($plugin_func)) {
+ $message = "custom function '$tag_command' is not implemented";
+ $have_function = false;
+ }
+ }
+ /*
+ * Otherwise we need to load plugin file and look for the function
+ * inside it.
+ */
+ else if ($plugin_file = $this->_get_plugin_filepath('function', $tag_command)) {
+ $found = true;
+
+ include_once $plugin_file;
+
+ $plugin_func = 'smarty_function_' . $tag_command;
+ if (!function_exists($plugin_func)) {
+ $message = "plugin function $plugin_func() not found in $plugin_file\n";
+ $have_function = false;
+ } else {
+ $this->_plugins['function'][$tag_command] = array($plugin_func, null, null, null, true);
+
+ }
+ }
+
+ if (!$found) {
+ return false;
+ } else if (!$have_function) {
+ $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__);
+ return true;
+ }
+
+ /* declare plugin to be loaded on display of the template that
+ we compile right now */
$this->_add_plugin('function', $tag_command);
$_cacheable_state = $this->_push_cacheable_state('function', $tag_command);
$attrs = $this->_parse_attrs($tag_args);
$arg_list = $this->_compile_arg_list('function', $tag_command, $attrs, $_cache_attrs='');
- $_return = $this->_compile_plugin_call('function', $tag_command).'(array('.implode(',', $arg_list)."), \$this)";
+ $output = $this->_compile_plugin_call('function', $tag_command).'(array('.implode(',', $arg_list)."), \$this)";
if($tag_modifier != '') {
- $this->_parse_modifiers($_return, $tag_modifier);
+ $this->_parse_modifiers($output, $tag_modifier);
}
- if($_return != '') {
- $_return = '<?php ' . $_cacheable_state . $_cache_attrs . 'echo ' . $_return . ';'
+ if($output != '') {
+ $output = '<?php ' . $_cacheable_state . $_cache_attrs . 'echo ' . $output . ';'
. $this->_pop_cacheable_state('function', $tag_command) . "?>" . $this->_additional_newline;
}
- return $_return;
+ return true;
}
/**
--
Smarty CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php