Smarty, вызов функции из PHP с передачей параметров.

Ilia

Новичок
Господа подскажите плз как вызвать php функцию из шаблона Smarty и передать ей больше одного параметра, вызываю так

PHP:
<h1 class="MenColor">{'$source' |@namer}</h1>
- не считая ошибок php о недостаточном кол-ве аргументов работает.

PHP:
{$source 'p_title' |@namer}
- too many shorthand attributes' in .... с запятой тоже самое.
 

fixxxer

К.О.
Партнер клуба
Shorthand attributes (как и весь смарти, впрочем) - черезжопный хак, и в половине мест не работает, передавай именованные параметры - title='p_title' итд
 

Ilia

Новичок
PHP:
{product = $source, map = 'p_title'|namer}
PHP:
 {product = $source, map = 'p_title'|namer}</h1>" - Unexpected " = ", expected one of: "}" , " " ,
 

Ilia

Новичок
но самым сильным было другое -
PHP:
<h1 class="MenColor">{php} Namer(){/php}</h1>
PHP:
{php} Namer(){/php}</h1>" unknown tag "php"' in /usr/local
 

Ilia

Новичок
короче, всем спасибо, это старт проекта и буду я наверное писать темплейты на php т.к боюсь что даже разрешив этот вопрос сейчас если что то подобное выйдет позже будет еще хуже.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
grigori
Это потому что теперь в смарти работает все, в том числе !empty, isset и т.д. Прямо в {if ...} {/if}

Толк в {php} наконец-то отвалился и смарти еще больше приблизился к нативному php. Аминь
 

Активист

Активист
Команда форума
Самый лучший шаблонизатор :D
PHP:
<?php 
class native {
	private $_variables = array();
	private $_cycle = array();
	/**
	 * Fetch 
	 * @param string $template
	 * @return string
	 */
	public function fetch($template) {
		if (!file_exists($template)) {
			return "Ошибка. {$template} не сущевствует";
		}
		
		if (!is_readable($template)) {
			return "Ошибка. {$template} не доступен для чтения";
		}
		
		extract($this->_variables);
		ob_start();
		
		require($template);
		$return = ob_get_contents();
		ob_end_clean();
		return $return;
	}
	
	public function display($template) {
		echo $this->fetch($template);
		return $this;
	}
	
	/**
	 * Assign a variable
	 * @return native
	 */
	public function assign($variable, $value = null) {
		if (is_array($variable)) {
			foreach ($variable as $akey => $avalue) {
				if (array_search($akey, array("template")) !== false) {
					continue;
				}
				$this->$akey = $avalue;
			}
			
			return $this;
		}
		
		$this->$variable = $value;
		return $this;
	}

	public function fckEditor($name, $value = "", $width = "100%", $height = "450px", $toolbarSet =  false) {
		$fckForm = new fckEditor($name);
	    $fckForm->Value = $value;
		$fckForm->Width = $width;
    	$fckForm->Height = $height;
    	$toolbarSet && $fckForm->ToolbarSet = $toolbarSet;
    	$return = "<noscript><textarea name=\"{$name}\" style=\"width: {$width}; height: {$height}\">{$value}</textarea></noscript>".$fckForm->createHtml();
    	return $return;
	}
	
	public function cycle(array $values, $name = "_default") {
		if (!isset($this->_cycle[$name])) {
			$this->_cycle[$name] = 0;
		}
		echo $values[($this->_cycle[$name] % sizeof($values))]; 
		$this->_cycle[$name]++;
		return true;
	}
	
	/**
	 * Set atrributes by assign;
	 * @param string $variable
	 * @param mixed $value
	 */
	function __set($variable, $value) {
		$this->_variables[$variable] = $value;
		$this->$variable = $value;
	}
	
	function __construct() {
		$this->currentLanguage = core::getInstance()->languageInterface()->getCurrentLanguage();
		$this->currentModule = core::getInstance()->modulesInterface()->currentModule;
		$this->isIndex = core::getInstance()->urlInterface()->file() == EASYCMS_DEFAULT_REQUEST_FILE
							&& !sizeof(core::getInstance()->urlInterface()->folders())
							&& !sizeof(core::getInstance()->urlInterface()->params())
							&& core::getInstance()->modulesInterface()->currentModule == EASYCMS_DEFAULT_MODULE;
	}
	
	function widget($name, $params = array()) {
    // Проверяем наличие параметров
    
    if (!preg_match("/^[a-z0-9_]+$/i",$name)) {
    	return "widget: 'name' parametr is incorrect";
    }
    
    $fNameToInludePlugin = EASYCMS_WIDGETS_DIR.(substr(EASYCMS_WIDGETS_DIR, -1, 1) != "/" ? "/" : "").$name."/index.php";
    
    if (!file_exists($fNameToInludePlugin)) {
    	return "widget: ".$name." missing";
    }
    require_once($fNameToInludePlugin);
    
    $pluginClass = $name."_widget";
    
    if (!class_exists($pluginClass)) {
    	return "widget: broken (no class) [{$pluginClass}]";
    }
    
    $plugin = new $pluginClass();
    return $plugin->start($params);
}

/* vim: set expandtab: */
	
}
?>
 

~WR~

Новичок
Что, где, о чем вы?) Когда я последний раз юзал смарти, работало следующее:
PHP:
{$str|str_pad:10:'a'}

Первый аргумент, палочка, имя функции php, остальные аргументы через двоеточие. Строковые аргументы - в кавычках.
Что тут сложного? :)

В вашем случае, будет так:
PHP:
{$source|namer:'p_title'}
 

Ilia

Новичок
Сложного ничего, я не сумел найти такой пример передачи переменных
 
Сверху