2011-12-28 39 views
5

Hola, he escrito una función en el archivo .php. es decir,¿Cómo llamar a una función php dentro de un archivo .tpl inteligente?

public static function getCategories($id_lang = false, $active = true, $order = true, $sql_filter = '', $sql_sort = '',$sql_limit = '') 
{ 
    if (!Validate::isBool($active)) 
     die(Tools::displayError()); 

    $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' 
     SELECT * 
     FROM `'._DB_PREFIX_.'category` c 
     LEFT JOIN `'._DB_PREFIX_.'category_lang` cl 
     ON c.`id_category` = cl.`id_category` 
     WHERE 1 '.$sql_filter.' '.($id_lang ? 'AND `id_lang` = '.(int)($id_lang) : '').' 
     '.($active ? 'AND `active` = 1' : '').' 
     '.(!$id_lang ? 'GROUP BY c.id_category' : '').' 
     '.($sql_sort != '' ? $sql_sort : 'ORDER BY c.`level_depth` ASC, c.`position` ASC').' 
     '.($sql_limit != '' ? $sql_limit : '') 
    ); 

    if (!$order) 
     return $result; 

    $categories = array(); 
    foreach ($result AS $row) 
    { 
     $categories[$row['id_parent']][$row['id_category']]['infos'] = $row; 
    } 
    return $categories; 
} 

y quiero llamar a esta función dentro de un archivo .tpl. Usé el modo {php} {/php}, pero esto no funciona. ¿Cuál es la manera de llamar a este?

Gracias

+0

Esta función devuelve una matriz de categorías, ¿estoy bien? Ok, entonces, ¿qué quieres hacer con este conjunto? ¿Cómo debe usarlo en su plantilla Smarty? –

Respuesta

5

Smarty es un lenguaje de plantillas - si desea mostrar los resultados de una función, asignar la salida a una variable smarty

$smarty->assign('categories', getCategories($args)); 

y luego usarlo en su plantilla

{$categories} 

Hay muy pocas situaciones en las que este no sea el patrón correcto.

+0

gracias por la respuesta adam. Escribí el código de arriba que dijiste. pero no funcionará ¿puede por favor especificar dónde tengo que escribir la línea $ smarty-> assign ('categories', getCategories ($ args)); – srinu

+0

Estoy de acuerdo con este comentario. Vea una [respuesta relacionada en SE] (http://stackoverflow.com/a/7446889/913758). – NobRuked

+0

@srinu la primera línea va en su php, la segunda en su plantilla. ¿Has leído el manual? http: //www.smarty.net/documentation –

4

se puede usar algo como esto y yo siempre utilizado

{category.id|function_name} 

Permítanme explicarlo:

category.id = es el id. de la categoría sobre la que desea obtener información en la función

nombre_función = es el nombre de la función

+0

Eso solo funcionaría con las funciones integradas de Smarty, no con la función personalizada definida en la pregunta –

+0

que funcionará con una función personalizada, –

+0

Siempre lo uso así función Test() { echo "Hello World"; } en Smarty HTML lo uso como esto después de que incluyo la función en la página php {$ a | Prueba} salida será Hello World –

2

porque está utilizando un método estático, no podrá usar $ esta palabra clave en su función. Por lo tanto, usted no será capaz de utilizar

$this->context->smarty->assign('categories', self::getCategories($args)); 

Por lo que debe crear una variable y asignar el contexto a la misma y en su caso no necesitará utilizar la parte del sabelotodo de la misma.

$smarty = Context::getContext()->smarty; 

Ahora usted puede utilizar esto como sigue:

$smarty->assign('categories', self::getCategories($args)); 

Estoy asumiendo que va a llamar a la función en la misma clase, por lo que se utiliza self :: GetCategories ($ args) , si quieres usarlo en otra clase de uso className :: GetCategories ($ args)

Espero que esto ayude, probarlo y me dé la regeneración! ;)

Cuestiones relacionadas