Как узнать, где объявлена ​​специальная переменная Smarty в PrestaShop?

Я использую prestashop 1.6, и у меня есть некоторая переменная в моем index.tpl, например $aslist, которую я не знаю, где эта переменная определена или назначена! Мне нужно найти эту переменную и внести некоторые изменения в нее. кто-нибудь знает, как я могу найти решение, которое показывает, где назначены умные переменные?

Мне нужен адресный файл, например: $aslist назначенный в .\www\controllers\front\CmsController.php - (line 58 )


person Jason    schedule 05.06.2015    source источник
comment
Где находится этот index.tpl (структура каталогов)?   -  person PHP Worm...    schedule 05.06.2015


Ответы (1)


Вы можете добавить эту функцию в config/config.inc.php

function log_smarty_assign($var_name)
{
    $smarty_var_filter = 'aslist';
    if ($var_name == $smarty_var_filter)
    {
        $log = '';
        $trace = debug_backtrace(false);
        if (isset($trace[1]))
        {
            $log .= 'Variable '.$var_name.' assigned in ';
            $log .= $trace[1]['file'].' #'.$trace[1]['line'];
            echo "<pre>$log</pre>";
        }           
    }
}

Изменить: следует использовать $trace[1] вместо $trace[2].

А затем найдите умный метод assign и измените его на что-то вроде этого: я нашел его в /tools/smarty/sysplugins/smarty_internal_data.php

public function assign($tpl_var, $value = null, $nocache = false)
{
    if (is_array($tpl_var)) {
        foreach ($tpl_var as $_key => $_val) {
            if ($_key != '') {
                $this->tpl_vars[$_key] = new Smarty_variable($_val, $nocache);
                //log the assignment 
                log_smarty_assign($_key);
            }
        }
    } else {
        if ($tpl_var != '') {
            $this->tpl_vars[$tpl_var] = new Smarty_variable($value, $nocache);
            //log the assignment 
            log_smarty_assign($tpl_var);
        }
    }

    return $this;
}

Пример вывода:

Variable product assigned in ...\classes\controller\Controller.php #180
person unloco    schedule 05.06.2015