tpl看不到聪明的变数

时间:2013-04-14 08:21:29

标签: php smarty prestashop

我正在尝试为Prestashop制作模块。但我的tpl文件无法看到变量。

payicon.php:

function hookFooter($params){
    $group_id="{$base_dir}modules/mymodule/payicon.php";

    $smarty = new Smarty;
    $smarty->assign('group_id', '$group_id');
    return $this->display(__FILE__, 'payicon.tpl');
    return false;
}

payicon.tpl:

<div id="payicon_block_footer" class="block">
    <h4>Welcome!</h4>
    <div class="block_content">
        <ul>
            <li><a href="{$group_id}" title="Click this link">Click me!</a></li>
        </ul>
    </div>
</div>

更新:

这是安装:

public function install() {
    if (!parent::install() OR !$this->registerHook('Footer'))
    return false;

    return Db::getInstance()->execute('
        CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'pay_icon` (
            `id_icon` int(10) unsigned NOT NULL,
            `icon_status` varchar(255) NOT NULL,
            `icon_img` varchar(255) DEFAULT NULL,
            `icon_link` varchar(255) NOT NULL,
            PRIMARY KEY (`id_icon`)
        )  ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;');
    return true;
}

1 个答案:

答案 0 :(得分:1)

我不知道prestashop,但我可以告诉你有关smarty和PHP的信息。我可以在代码中看到许多明显的问题

<强> 1) $base_dir在函数中不可用。添加

global $base_dir;

在函数的开头,使其在此函数的范围内可用。

2)

 $smarty = new Smarty;

我认为这条线不应该在那里。这是初始化一个新的Smarty实例,它与函数外部的代码无关 用

替换此行
global $smarty;

这将使此函数中的全局$smartySmarty类的实例)可用

第3)

$smarty->assign('group_id', '$group_id');

错了。替换为

$smarty->assign('group_id', $group_id);  

可能解决方案
由于您的问题没有得到太多关注,我会尝试给出答案,至少让您朝着正确的方向前进(如果没有解决您的问题)

尝试用

替换此功能
public function hookFooter($params){
    global $base_dir;
    global $smarty;

    $group_id="{$base_dir}modules/mymodule/payicon.php";

    $smarty->assign('group_id', '$group_id');
    return $this->display(__FILE__, 'payicon.tpl');
}

更新

我的坏:D。忘了替换最终代码中的'$group_id'。试试这个

public function hookFooter($params){
    global $base_dir;
    global $smarty;

    $group_id="{$base_dir}modules/mymodule/payicon.php";

    $smarty->assign('group_id', $group_id);
    return $this->display(__FILE__, 'payicon.tpl');
}