Реализация SmartyBC

Просто небольшой вопрос для тех, кто использует smarty. Я пытаюсь передать PHP непосредственно в мой код, но когда я это делаю, кэшированная версия вырезает PHP и просто печатает его прямо так.

 <div class="dashboard-card-content">
 <?php

 $con = mysqli_connect(Nice,Try,Fly,Guy);
 $company_id = $_smarty_tpl->tpl_vars['auth']->value['user_id'];
 $company_id = mysqli_query($con,"SELECT company_id FROM cscart_users WHERE user_id = $company_id")->fetch_object()->company_id;
 $company_id = mysqli_query($con,"SELECT goal FROM cscart_companies WHERE company_id = $company_id")->fetch_object()->goal;
 echo "Your current goal is: ".$company_id; 
 ?>

Это просто печатает все это на моей веб-странице, поэтому я попытался использовать следующее:

{Буквальный}

{Include_php}

{РНР}

И я просто не могу найти способ получить мой PHP код, чтобы войти в мой TPL, как я этого хочу. Это становится очень неприятно, и все, что я хочу, это чтобы мои файлы кэша оставили PHP-код в покое. Извините, если это глупый вопрос, но я изучал это некоторое время. Как реализовать SmartyBC, чтобы я все еще мог использовать PHP-инъекции. И если использование SmartyBC является плохой идеей, может ли кто-то дать мне тупую версию того, как использовать отдельную страницу функции PHP, чтобы установить переменные, чтобы показать в шаблоне?

3 ответа

  1. Smarty-это механизм шаблонов только для логики презентаций. Логику приложения нельзя поместить в шаблон. Это было возможно в старых версиях Smarty, но, к счастью, больше не. Просто выполните эти функции в файле php и передайте результат шаблону.

    И да, вы можете использовать SmartyBC: http://www.smarty.net/docs/en/bc.tpl , но это должно использоваться для совместимости с существующими проектами. Это действительно плохая идея и не должна использоваться для новых проектов.

  2. Почему вы хотите использовать php в Smarty?

    Поместите свою логику в класс или функцию и передайте данные через контроллер: Registry::get('view')->assign('smarty_variable', $data), и вы хорошо пойдете.

  3. Вы можете создать функцию PHP, которая получает необходимые данные из базы данных. Например.

    function fn_get_company_goal($user_id)
    {    
        $company_id = db_get_field("SELECT company_id FROM ?:users WHERE user_id = ?i, $user_id");
        $goal = db_get_field("SELECT goal FROM ?:companies WHERE company_id = ?i, $company_id");
        return $goal;
    }
    

    Положите его к вашему аддону. Затем вы можете использовать его в шаблоне Smarty следующим образом:

    {$goal = $user_id|fn_get_company_goal}