2011-12-28 10 views
5

Xin chào, tôi đã viết một hàm trong tệp .php. tức làCách gọi hàm php bên trong một tệp .tpl thông minh?

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; 
} 

và tôi muốn gọi hàm này bên trong tệp .tpl. Tôi đã sử dụng cách {php} {/php}, nhưng cách này không hoạt động. Cách gọi cái này là gì?

Cảm ơn

+0

Chức năng này trả về một loạt các danh mục, tôi có đúng không? Ok, vậy, bạn muốn làm gì với mảng này? Làm thế nào bạn cần phải sử dụng nó trong mẫu Smarty của bạn ??? –

Trả lời

5

Smarty là một ngôn ngữ khuôn mẫu - nếu bạn muốn xuất kết quả của một hàm, chuyển nhượng đầu ra cho một biến smarty

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

Và sau đó sử dụng nó trong mẫu của bạn

{$categories} 

Có rất ít trường hợp mà đây không phải là mẫu chính xác.

+0

cảm ơn adam trả lời. Tôi viết mã trên bạn nói. nhưng nó sẽ không hoạt động. u có thể chỉ định nơi tôi phải viết dòng $ smarty-> assign ('categories', getCategories ($ args)); – srinu

+0

Tôi đồng ý với nhận xét này. Xem [câu trả lời có liên quan trên SE] (http://stackoverflow.com/a/7446889/913758). – NobRuked

+0

@srinu dòng đầu tiên nằm trong php của bạn, dòng thứ hai trong mẫu của bạn. Bạn thậm chí có đọc hướng dẫn sử dụng không? http: //www.smarty.net/tài liệu –

0

Tôi đồng ý với adam, mặc dù somitemies tôi sử dụng php bên trong smarty do kiến ​​trúc đã cho.
Có một cách khác để làm điều đó: với {insert}-http://www.smarty.net/docs/en/language.function.insert.tpl

+0

FYI, 'insert' không được dùng nữa và không còn là một phần của Smarty kể từ v3.1 –

4

bạn có thể sử dụng một cái gì đó như thế này và tôi luôn luôn sử dụng nó

{category.id|function_name} 

hãy để tôi giải thích nó:

category.id = là id của danh mục bạn muốn nhận thông tin về chức năng

function_name = là tên của hàm

+0

Điều đó sẽ chỉ hoạt động với các chức năng Smarty tích hợp, chứ không phải với chức năng tùy chỉnh được xác định trong câu hỏi –

+0

nó sẽ hoạt động với chức năng tùy chỉnh, –

+0

tôi luôn luôn sử dụng nó như thế này chức năng Kiểm tra() { echo "Hello World"; } trong HTML smarty tôi sử dụng nó như thế này sau khi tôi bao gồm các chức năng trong trang php {$ a | Thử nghiệm} Output sẽ Hello World –

2

vì bạn đang sử dụng phương pháp tĩnh, bạn sẽ không thể sử dụng $ từ khóa này trong chức năng của mình. Do đó, bạn sẽ không thể sử dụng

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

Vì vậy, bạn nên tạo biến và gán ngữ cảnh cho nó và trong trường hợp của bạn, bạn sẽ chỉ cần phần thông minh của nó.

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

Bây giờ bạn có thể sử dụng điều này như sau:

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

Tôi giả định rằng bạn sẽ gọi hàm trong cùng một lớp, vì vậy tôi sử dụng tự :: getCategories ($ args) , nếu bạn muốn sử dụng nó trong một lớp học khác sử dụng className :: getCategories ($ args)

Hy vọng điều này sẽ giúp bạn, hãy thử và cung cấp cho tôi phản hồi! ;)