5

こんにちは私は.phpファイルに関数を書きました。すなわち

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

そして、この関数を.tplファイル内で呼び出したいと思います。私は{php} {/php}方法を使用しましたが、これは機能しません。これを呼び出す方法は何ですか?

ありがとう

4

4 に答える 4

6

Smarty はテンプレート言語です。関数の結果を出力する場合は、出力を smarty 変数に割り当てます。

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

そして、それをテンプレートで使用します

{$categories}

これが正しいパターンではない状況はほとんどありません。

于 2011-12-28T15:31:41.800 に答える
2

静的メソッドを使用しているため、関数で $this キーワードを使用できません。したがって、使用することはできません

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

したがって、変数を作成してそれにコンテキストを割り当てる必要があります。あなたの場合、その賢い部分だけが必要になります。

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

これで、次のように使用できます。

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

同じクラスで関数を呼び出すと想定しているので、self::getCategories($args)を使用しました。別のクラスで使用する場合は、className::getCategories($args)を使用します

これがお役に立てば幸いです。試してみて、フィードバックをお寄せください。;)

于 2014-09-10T20:37:13.607 に答える
0

私はアダムに同意しますが、特定のアーキテクチャのためにsmarty内でphpを使用しています。
それを行う別の方法があります: {insert}- http://www.smarty.net/docs/en/language.function.insert.tpl

于 2011-12-28T15:43:29.637 に答える