Деинициализация переменной в Smarty

Тема в разделе "PrestaShop", создана пользователем mirra88, 23 мар 2015.

  1. mirra88

    mirra88

    Регистрация:
    21 окт 2014
    Сообщения:
    8
    Симпатии:
    0
    Уважаемые форумчане. Как известно в Prestashop используется шаблонизатор Smarty. А у меня возникла необходимость вывести ряд переменных. Вот так я переменную инициализирую:
    Код:
    {assign var=hard value=$product}
    Потом я её вывожу, а потом мне надо её деинициализировать, то есть "уничтожить", чтобы она не выводилась повторно. И вот с этим неожиданно возникли проблемы! В документации мне всё-таки удалось найти функцию, которая деинициализирует переменную:
    Код:
    <?php
    $smarty->clear_assign('hard');
    ?> 
    Но функция clear_assign реализована там в php-тегах, а мне надо работать с переменной в tpl-файле, а не в php! И попытки избавится от тегов php и записать clear_assign, в том же виде как assign:
    Код:
    {clear_assign hard}
    или вот так:
    Код:
    {php}
    $smarty->clear_assign('hard');
    {/php}
    приводят только к неработоспособности сайта.
    Подскажите, пожалуйста, кто знает, как деинициализировать переменную в tpl-файле smarty?
     
  2. duke1999

    duke1999

    Регистрация:
    30 дек 2014
    Сообщения:
    164
    Симпатии:
    50
    {assign var='hard' value=''}
    хотя если у вас возник такой вопрос, то меняйте логику приложения - коренная ошибка
     
    mirra88 нравится это.
  3. mirra88

    mirra88

    Регистрация:
    21 окт 2014
    Сообщения:
    8
    Симпатии:
    0
    Спасибо.
    Получилось сделать вот так: {$hard = null}
    Ну а насчёт коренной ошибки... По моему она в самом Prestashop. Ну и, мне, соответственно, приходится выкручиваться. Как в престе реализуется массив характеристик ($product.features)?. Индексно! То есть по номеру! Хоть бы введённое программистом название характеристики использовали. Ан нет, только номер. А характеристик может быть 5, а может быть 10. Что у товара под номером, скажем, 5, этого массива? У одного товара это размер, у другого гарантия, а у третьего - ничего. А мне нужно только определённые характеристики в категорию вывести! Причём каждой обеспечить своё место и вид. Скажем гарантия должна быть с листиком справа, а размер сверху, с квадратиком. И как это совместить с индексным подходом престы? Менять их логику, их классы? У меня знаний не хватает. Вот и приходится в ответ на их недоработку добавлять свои. Названия характеристик в шаблон tpl вводить (что совсем не есть хорошо), переменные уничтожать...
    Кстати, в престе вообще плохо налажена работа в этом отношении. Переделала товары и удалила (не в товарах, а вообще) ненужные мне атрибуты. Поехал вывод цены в тех товарах, где ... эти атрибуты остались. Но ведь ... должно быть предусмотрено в движке, что если атрибут используется, то он либо неудаляем, либо, уж тогда и из товара должен удалиться. Этого не произошло.
    А из корзины товар с несуществующим атрибутом не удалить никаким Богом! Пришлось саму эту корзину удалять.
     
  4. duke1999

    duke1999

    Регистрация:
    30 дек 2014
    Сообщения:
    164
    Симпатии:
    50
    Для того и существует в престе возможность override практически всего, что реализовано классами и контроллерами, плюс модули и хуки. Делайте как вам нравится, если не нравится основной функционал.
    В шаблонах реализовывать логику работы нельзя, рано или поздно аукнется.
     
    mirra88 нравится это.
  5. mirra88

    mirra88

    Регистрация:
    21 окт 2014
    Сообщения:
    8
    Симпатии:
    0
    О, спасибо за override. Правда, знаний для серьёзных модификаций пока нет, но хотя бы буду знать в каком направлении "копать"