Модуль Полезные модификации Prestashop 1.7

Тема в разделе "PrestaShop", создана пользователем fortuner, 25 окт 2017.

Информация :
Приветствую гость, обрати внимание! Темы которые закреплены в разделах, в скором времени будут откреплены. Правила раздела PrestaShop

(Не актуальные темы) Каталоги:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
(Не актуальные темы) Поиск / Запросы:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
Полезная информация:Поддержка и помощь c PrestaShopУбираем ПрестаТраст, стучалки и прочую рекламуСовместные покупки модулей и шаблоновПеревод Prestashop и модулей
Модераторы: trace
  1. fortuner

    fortuner

    Регистр.:
    26 июн 2012
    Сообщения:
    558
    Симпатии:
    892
    Делимся полезными модификациями, хаками, допиленными модулями (или самописными) для Prestashop 1.7.
    Предлагаю скопировать правила из темы модулей Prestashop, чтобы в теме было проще ориентироваться.
    Правила:
    1. Увидели чужую ошибку - исправьте :)
    2. Запросы "а сделайте мне то-то" пожалуйста пишите в тему "Помощь с Prestashop".
    3. Не спамьте, пусть раздел будет соответствовать своему названию :)
    4. Не пишите "спасибо, должен навеки вечные!", просто нажмите "спасибо".
     
    deus_blr, zen1, _sashok и 8 другим нравится это.
  2. sergiykhd

    sergiykhd Sergiy

    Регистр.:
    17 апр 2013
    Сообщения:
    1.048
    Симпатии:
    756
    Можно еще так, тогда № заказа будет ID
    это под 1.6 на 1.7 не проверял
    тот же classes/order/Order.php
    Код:
        {
            /*return strtoupper(Tools::passwdGen(9, 'NUMERIC'));*/
            {
            $query = new DbQuery();
            $query->select('MAX(id_order) as max');
            $query->from('orders');
            $query->where('id_cart' > 0);
            $order = Db::getInstance()->getRow($query);
            $reference = $order['max'] +1 ;
            return sprintf('%06d', $reference);
         }
        }
     
    Последнее редактирование: 10 сен 2018
    Kolfg нравится это.
  3. haki

    haki Писатель

    Регистр.:
    10 дек 2017
    Сообщения:
    2
    Симпатии:
    0
    Всем привет
    у меня вот такая штука
    <h1 class="h1">{$page.meta.keywords}{$category.name}</h1>

    Как сделать, чтобы {$page.meta.keywords} выводился вместо {$category.name}, если в keywords есть какое-то значение?

    Или может есть какой готовый модуль для этих целей?
    Мне нужно заголовкам категорий указывать свое название
     
  4. Zveruga76

    Zveruga76

    Регистр.:
    20 июл 2013
    Сообщения:
    241
    Симпатии:
    346
    {if !empty($page.meta.keywords)}{$page.meta.keywords}{else}{$category.name}{/if}
    https://www.smarty.net/docsv2/ru/language.function.if.tpl
     
    vitos1401 и Anvar6120 нравится это.
  5. koddo

    koddo Писатель

    Регистр.:
    8 сен 2011
    Сообщения:
    3
    Симпатии:
    0
    Добрый день!
    Вроде бы сделал всё, как указано. Не не работает.
    Заменил содержимое файла \themes\transformer\modules\ps_categorytree\views\templates\hook\ps_categorytree.tpl
    (у меня тема transformer)
    Почистил кеш.
    Никакого толку.
    Подскажите, пожалуйста, в чем может быть проблема?
     
  6. byura

    byura

    Регистр.:
    29 янв 2007
    Сообщения:
    441
    Симпатии:
    348
    Иногда полезно почистить кеш, например, можно сделать задачу CRON, которая будет выполнять этот небольшой скрипт один или несколько раз в день - в зависимости от ваших потребностей.

    1. Создать PHP - файл в вашем магазине в корне каталога и назовите его , как вы хотите - в данном примере это будет cache_clear.php название произвольное
    2. Откройте этот файл и вставите код
    Код:
    <?php
    include('./config/config.inc.php');
    $token = Tools::getValue('token');
    if($token == "vBnmmP3218") {
        Tools::clearSmartyCache();
        Tools::clearXMLCache();
        Media::clearCache();
        Tools::generateIndex();
        echo "Cache clear ended successfully.";
    } else {
        echo "Wrong security token - cache clear failed.";
    }
    ?>
    3. Измените строку с токеном vBnmmP3218 на ваш случайный код для безопасности.
    4. Сохраните файл.
    5. Добавить URL скрипта на ваш CRON менеджер задач или выполнить его непосредственно через браузер в формате: https://site.com/cache_clear.php?token=vBnmmP3218
    скрипт не проверялся, взято с престакрафт
     
    Belena27089, Kolfg, evgenij.sobolev и 2 другим нравится это.
  7. leha128

    leha128 Постоялец

    Регистр.:
    2 июн 2013
    Сообщения:
    116
    Симпатии:
    57
    В стандартном шаблоне 1.7 номера телефонов не кликабельны на мобилках

    Сделать номер телефона кликабельным можно с помощью обыкновенной ссылки, но со специальным адресом:

    <a href="tel:+78142332211">+7(814)-233-22-11</a>
    Или:

    <a href="tel:+7 (8142) 33 22 11">Позвоните нам</a>
    То есть в атрибуте href должно быть указано: tel: и номер телефона в формате, который вам нужен.

    Выглядеть это будет так:

    +7(814)-233-22-11

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

    Для престы контактов магазина это файл шаблон\templates\cms\stores.tpl 71 строка
    <ul class="card-block">
    {if $store.phone}
    <li><i class="material-icons">&#xE0B0;</i><a href="tel:+790********">{$store.phone}</a></li> - Если стандартный код заменить на этот то телефон будет кликабельным.
    {/if}


    Вопрос для сообщества и тех кто силен в PHP как сделать кликабельными телефоны в стандартном фаблоне в шапке:
    В шапке - шаблон\modules\ps_contactinfo\nav.tpl
    Вот такой код
    <div id="_desktop_contact_link">
    <div id="contact-link">
    {if $contact_infos.phone}
    {* [1][/1] is for a HTML tag. *}
    {l
    s='Call us: [1]%phone%[/1]'
    sprintf=[
    '[1]' => '<span>',
    '[/1]' => '</span>',
    '%phone%' => $contact_infos.phone
    ]
    d='Shop.Theme.Global'
    }
    {else}
    <a href="{$urls.pages.contact}">{l s='Contact us' d='Shop.Theme.Global'}</a>
    {/if}
    </div>
    </div>

    Подскажите кто знает PHP, куда тут вставить tel: чтобы тоже кликабельно было ? И если в верхней строке нужно 2 номера вывести, то как добавить и куда переменную, чтобы настроить оба тедлефона ?? Может просто где '%phone%' => $contact_infos.phone вместо $contact_infos.phone впихнуть 2 номера телефона с tel: ??
     
    Kolfg и silenty нравится это.
  8. silenty

    silenty

    Регистр.:
    19 дек 2008
    Сообщения:
    294
    Симпатии:
    329
    Для автоматической вставки Вам придется разбирать массив и сравнивать по вхождению. Это не очень тяжело, но надо ли? Обновите престу - все потеряется.
    Куда легче сделать это отдельным блоком html. Тем более, что делается это один раз, а показывается на всех страницах.
     
  9. mobile555

    mobile555 Создатель

    Регистр.:
    1 ноя 2017
    Сообщения:
    30
    Симпатии:
    45
    The code working fine, but how i can change welcome message from Russian language to english?
     
  10. Quant

    Quant Создатель

    Регистр.:
    22 май 2013
    Сообщения:
    23
    Симпатии:
    31
    На странице заказов можно как бы их сгрупировать по дате, добавляя Заказы за такое то число и т.д. Так удобней пялится в эту простыню.

    Нужно переопределить файл-хелпер листинга контента (list_content.tpl). Для PS1.6 и PS1.7 положить нужно в
    /override/controllers/admin/templates/orders/helpers/list/

    Измененный файла из PS1.6.1.23 (list_content.tpl)

    Код:
    {*
    * 2007-2017 PrestaShop
    *
    * NOTICE OF LICENSE
    *
    * This source file is subject to the Academic Free License (AFL 3.0)
    * that is bundled with this package in the file LICENSE.txt.
    * It is also available through the world-wide-web at this URL:
    * http://opensource.org/licenses/afl-3.0.php
    * If you did not receive a copy of the license and are unable to
    * obtain it through the world-wide-web, please send an email
    * to license@prestashop.com so we can send you a copy immediately.
    *
    * DISCLAIMER
    *
    * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
    * versions in the future. If you wish to customize PrestaShop for your
    * needs please refer to http://www.prestashop.com for more information.
    *
    *  @author PrestaShop SA <contact@prestashop.com>
    *  @copyright  2007-2017 PrestaShop SA
    *  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
    *  International Registered Trademark & Property of PrestaShop SA
    *}
    {capture name='tr_count'}{counter name='tr_count'}{/capture}
    <tbody>
    {if count($list)}
    {*Дата первого заказа из цикла*}
    {assign var='day_split' value=$list[0].date_add|date_format:"%e"}
    {foreach $list AS $index => $tr}
        {*Старт разбить по дням*}
        {assign var='day_order' value=$tr.date_add|date_format:"%e"}
        {if $day_split != $day_order || $index == 0}
            <tr>
                {assign var='colspan_by_day' value=count($fields_display)+1}
                {if $has_actions}{assign var='colspan_by_day' value=$colspan_by_day+1}{/if}
                <td colspan="{$colspan_by_day}" style="font-size: 16px; background-color: #f1f1f1; text-align: center;">Заказы за {$tr.date_add|date_format:"%d %B %Y"}</td>
            </tr>
        {/if}
        {assign var='day_split' value=$day_order}
        {*Конец разбить по дням*}
        <tr{if $position_identifier} id="tr_{$position_group_identifier}_{$tr.$identifier}_{if isset($tr.position['position'])}{$tr.position['position']}{else}0{/if}"{/if} class="{if isset($tr.class)}{$tr.class}{/if} {if $tr@iteration is odd by 1}odd{/if}"{if isset($tr.color) && $color_on_bg} style="background-color: {$tr.color}"{/if} >
            {if $bulk_actions && $has_bulk_actions}
                <td class="row-selector text-center">
                    {if isset($list_skip_actions.delete)}
                        {if !in_array($tr.$identifier, $list_skip_actions.delete)}
                            <input type="checkbox" name="{$list_id}Box[]" value="{$tr.$identifier}"{if isset($checked_boxes) && is_array($checked_boxes) && in_array({$tr.$identifier}, $checked_boxes)} checked="checked"{/if} class="noborder" />
                        {/if}
                    {else}
                        <input type="checkbox" name="{$list_id}Box[]" value="{$tr.$identifier}"{if isset($checked_boxes) && is_array($checked_boxes) && in_array({$tr.$identifier}, $checked_boxes)} checked="checked"{/if} class="noborder" />
                    {/if}
                </td>
            {/if}
            {foreach $fields_display AS $key => $params}
                {block name="open_td"}
                    <td
                        {if isset($params.position)}
                            id="td_{if !empty($position_group_identifier)}{$position_group_identifier}{else}0{/if}_{$tr.$identifier}{if $smarty.capture.tr_count > 1}_{($smarty.capture.tr_count - 1)|intval}{/if}"
                        {/if}
                        class="{strip}{if !$no_link}pointer{/if}
                        {if isset($params.position) && $order_by == 'position'  && $order_way != 'DESC'} dragHandle{/if}
                        {if isset($params.class)} {$params.class}{/if}
                        {if isset($params.align)} {$params.align}{/if}{/strip}"
                        {if (!isset($params.position) && !$no_link && !isset($params.remove_onclick))}
                            onclick="document.location = '{$current_index|escape:'html':'UTF-8'}&amp;{$identifier|escape:'html':'UTF-8'}={$tr.$identifier|escape:'html':'UTF-8'}{if $view}&amp;view{else}&amp;update{/if}{$table|escape:'html':'UTF-8'}{if $page > 1}&amp;page={$page|intval}{/if}&amp;token={$token|escape:'html':'UTF-8'}'">
                        {else}
                        >
                    {/if}
                {/block}
                {block name="td_content"}
                    {if isset($params.prefix)}{$params.prefix}{/if}
                    {if isset($params.badge_success) && $params.badge_success && isset($tr.badge_success) && $tr.badge_success == $params.badge_success}<span class="badge badge-success">{/if}
                    {if isset($params.badge_warning) && $params.badge_warning && isset($tr.badge_warning) && $tr.badge_warning == $params.badge_warning}<span class="badge badge-warning">{/if}
                    {if isset($params.badge_danger) && $params.badge_danger && isset($tr.badge_danger) && $tr.badge_danger == $params.badge_danger}<span class="badge badge-danger">{/if}
                    {if isset($params.color) && isset($tr[$params.color])}
                        <span class="label color_field" style="background-color:{$tr[$params.color]};color:{if Tools::getBrightness($tr[$params.color]) < 128}white{else}#383838{/if}">
                    {/if}
                    {if isset($tr.$key)}
                        {if isset($params.active)}
                            {$tr.$key}
                        {elseif isset($params.callback)}
                            {if isset($params.maxlength) && Tools::strlen($tr.$key) > $params.maxlength}
                                <span title="{$tr.$key}">{$tr.$key|truncate:$params.maxlength:'...'}</span>
                            {else}
                                {$tr.$key}
                            {/if}
                        {elseif isset($params.activeVisu)}
                            {if $tr.$key}
                                <i class="icon-check-ok"></i> {l s='Enabled'}
                            {else}
                                <i class="icon-remove"></i> {l s='Disabled'}
                            {/if}
                        {elseif isset($params.position)}
                            {if !$filters_has_value && $order_by == 'position' && $order_way != 'DESC'}
                                <div class="dragGroup">
                                    <div class="positions">
                                        {$tr.$key.position + 1}
                                    </div>
                                </div>
                            {else}
                                {$tr.$key.position + 1}
                            {/if}
                        {elseif isset($params.image)}
                            {$tr.$key}
                        {elseif isset($params.icon)}
                            {if is_array($tr[$key])}
                                {if isset($tr[$key]['class'])}
                                    <i class="{$tr[$key]['class']}"></i>
                                {else}
                                    <img src="../img/admin/{$tr[$key]['src']}" alt="{$tr[$key]['alt']}" title="{$tr[$key]['alt']}" />
                                {/if}
                            {/if}
                        {elseif isset($params.type) && $params.type == 'price'}
                            {if isset($tr.id_currency)}
                                {displayPrice price=$tr.$key currency=$tr.id_currency}
                            {else}
                                {displayPrice price=$tr.$key}
                            {/if}
                        {elseif isset($params.float)}
                            {$tr.$key}
                        {elseif isset($params.type) && $params.type == 'date'}
                            {dateFormat date=$tr.$key full=0}
                        {elseif isset($params.type) && $params.type == 'datetime'}
                            {dateFormat date=$tr.$key full=1}
                        {elseif isset($params.type) && $params.type == 'decimal'}
                            {$tr.$key|string_format:"%.2f"}
                        {elseif isset($params.type) && $params.type == 'percent'}
                            {$tr.$key} {l s='%'}
                        {* If type is 'editable', an input is created *}
                        {elseif isset($params.type) && $params.type == 'editable' && isset($tr.id)}
                            <input type="text" name="{$key}_{$tr.id}" value="{$tr.$key|escape:'html':'UTF-8'}" class="{$key}" />
                        {elseif $key == 'color'}
                            {if !is_array($tr.$key)}
                            <div style="background-color: {$tr.$key};" class="attributes-color-container"></div>
                            {else} {*TEXTURE*}
                            <img src="{$tr.$key.texture}" alt="{$tr.name}" class="attributes-color-container" />
                            {/if}
                        {elseif isset($params.maxlength) && Tools::strlen($tr.$key) > $params.maxlength}
                            <span title="{$tr.$key|escape:'html':'UTF-8'}">{$tr.$key|truncate:$params.maxlength:'...'|escape:'html':'UTF-8'}</span>
                        {else}
                            {$tr.$key|escape:'html':'UTF-8'}
                        {/if}
                    {else}
                        {block name="default_field"}--{/block}
                    {/if}
                    {if isset($params.suffix)}{$params.suffix}{/if}
                    {if isset($params.color) && isset($tr.color)}
                        </span>
                    {/if}
                    {if isset($params.badge_danger) && $params.badge_danger && isset($tr.badge_danger) && $tr.badge_danger == $params.badge_danger}</span>{/if}
                    {if isset($params.badge_warning) && $params.badge_warning && isset($tr.badge_warning) && $tr.badge_warning == $params.badge_warning}</span>{/if}
                    {if isset($params.badge_success) && $params.badge_success && isset($tr.badge_success) && $tr.badge_success == $params.badge_success}</span>{/if}
                {/block}
                {block name="close_td"}
                    </td>
                {/block}
            {/foreach}
    
        {if $shop_link_type}
            <td title="{$tr.shop_name}">
                {if isset($tr.shop_short_name)}
                    {$tr.shop_short_name}
                {else}
                    {$tr.shop_name}
                {/if}
            </td>
        {/if}
        {if $has_actions}
            <td class="text-right">
                {assign var='compiled_actions' value=array()}
                {foreach $actions AS $key => $action}
                    {if isset($tr.$action)}
                        {if $key == 0}
                            {assign var='action' value=$action}
                        {/if}
                        {if $action == 'delete' && $actions|@count > 2}
                            {$compiled_actions[] = 'divider'}
                        {/if}
                        {$compiled_actions[] = $tr.$action}
                    {/if}
                {/foreach}
                {if $compiled_actions|count > 0}
                    {if $compiled_actions|count > 1}<div class="btn-group-action">{/if}
                    <div class="btn-group pull-right">
                        {$compiled_actions[0]}
                        {if $compiled_actions|count > 1}
                        <button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
                            <i class="icon-caret-down"></i>&nbsp;
                        </button>
                            <ul class="dropdown-menu">
                            {foreach $compiled_actions AS $key => $action}
                                {if $key != 0}
                                <li{if $action == 'divider' && $compiled_actions|count > 3} class="divider"{/if}>
                                    {if $action != 'divider'}{$action}{/if}
                                </li>
                                {/if}
                            {/foreach}
                            </ul>
                        {/if}
                    </div>
                    {if $compiled_actions|count > 1}</div>{/if}
                {/if}
            </td>
        {/if}
        </tr>
    {/foreach}
    {else}
        <tr>
            <td class="list-empty" colspan="{count($fields_display)+1}">
                <div class="list-empty-msg">
                    <i class="icon-warning-sign list-empty-icon"></i>
                    {l s='No records found'}
                </div>
            </td>
        </tr>
    {/if}
    </tbody>
    
     
    _sashok и Belena27089 нравится это.
  11. Quant

    Quant Создатель

    Регистр.:
    22 май 2013
    Сообщения:
    23
    Симпатии:
    31
    На странице заказов можно как бы их сгрупировать по дате, добавляя Заказы за такое то число и т.д. Так удобней пялится в эту простыню.

    Нужно переопределить файл-хелпер листинга контента (list_content.tpl). Для PS1.7 положить нужно в
    /override/controllers/admin/templates/orders/helpers/list/

    Измененный файла из PS1.7.5.0 (list_content.tpl)
    Код:
    {**
    * 2007-2018 PrestaShop
    *
    * NOTICE OF LICENSE
    *
    * This source file is subject to the Open Software License (OSL 3.0)
    * that is bundled with this package in the file LICENSE.txt.
    * It is also available through the world-wide-web at this URL:
    * https://opensource.org/licenses/OSL-3.0
    * If you did not receive a copy of the license and are unable to
    * obtain it through the world-wide-web, please send an email
    * to license@prestashop.com so we can send you a copy immediately.
    *
    * DISCLAIMER
    *
    * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
    * versions in the future. If you wish to customize PrestaShop for your
    * needs please refer to http://www.prestashop.com for more information.
    *
    * @author    PrestaShop SA <contact@prestashop.com>
    * @copyright 2007-2018 PrestaShop SA
    * @license   https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
    * International Registered Trademark & Property of PrestaShop SA
    *}
    {capture name='tr_count'}{counter name='tr_count'}{/capture}
    <tbody>
    {if count($list)}
    {*Дата первого заказа из цикла*}
    {assign var='day_split' value=$list[0].date_add|date_format:"%e"}
    {foreach $list AS $index => $tr}
        {*Старт разбить по дням*}
        {assign var='day_order' value=$tr.date_add|date_format:"%e"}
        {if $day_split != $day_order || $index == 0}
            <tr>
                {assign var='colspan_by_day' value=count($fields_display)+1}
                {if $has_actions}{assign var='colspan_by_day' value=$colspan_by_day+1}{/if}
                <td colspan="{$colspan_by_day}" style="font-size: 16px; background-color: #f1f1f1; text-align: center;">Заказы за {$tr.date_add|date_format:"%d %B %Y"}</td>
            </tr>
        {/if}
        {assign var='day_split' value=$day_order}
        {*Конец разбить по дням*}
        <tr{if $position_identifier} id="tr_{$position_group_identifier}_{$tr.$identifier}_{if isset($tr.position['position'])}{$tr.position['position']}{else}0{/if}"{/if} class="{if isset($tr.class)}{$tr.class}{/if} {if $tr@iteration is odd by 1}odd{/if}"{if isset($tr.color) && $color_on_bg} style="background-color: {$tr.color}"{/if} >
            {if $bulk_actions && $has_bulk_actions}
                <td class="row-selector text-center">
                    {if isset($list_skip_actions.delete)}
                        {if !in_array($tr.$identifier, $list_skip_actions.delete)}
                            <input type="checkbox" name="{$list_id}Box[]" value="{$tr.$identifier}"{if isset($checked_boxes) && is_array($checked_boxes) && in_array({$tr.$identifier}, $checked_boxes)} checked="checked"{/if} class="noborder" />
                        {/if}
                    {else}
                        <input type="checkbox" name="{$list_id}Box[]" value="{$tr.$identifier}"{if isset($checked_boxes) && is_array($checked_boxes) && in_array({$tr.$identifier}, $checked_boxes)} checked="checked"{/if} class="noborder" />
                    {/if}
                </td>
            {/if}
            {foreach $fields_display AS $key => $params}
                {block name="open_td"}
                    <td
                        {if isset($params.position)}
                            id="td_{if !empty($position_group_identifier)}{$position_group_identifier}{else}0{/if}_{$tr.$identifier}{if $smarty.capture.tr_count > 1}_{($smarty.capture.tr_count - 1)|intval}{/if}"
                        {/if}
                        class="{strip}{if !$no_link}pointer{/if}
                        {if isset($params.position) && $order_by == 'position'  && $order_way != 'DESC'} dragHandle{/if}
                        {if isset($params.class)} {$params.class}{/if}
                        {if isset($params.align)} {$params.align}{/if}{/strip}"
                        {if (!isset($params.position) && !$no_link && !isset($params.remove_onclick))}
                            onclick="document.location = '{$current_index|addslashes|escape:'html':'UTF-8'}&amp;{$identifier|escape:'html':'UTF-8'}={$tr.$identifier|escape:'html':'UTF-8'}{if $view}&amp;view{else}&amp;update{/if}{$table|escape:'html':'UTF-8'}{if $page > 1}&amp;page={$page|intval}{/if}&amp;token={$token|escape:'html':'UTF-8'}'">
                        {else}
                        >
                    {/if}
                {/block}
                {block name="td_content"}
                    {if isset($params.prefix)}{$params.prefix}{/if}
                    {if isset($params.badge_success) && $params.badge_success && isset($tr.badge_success) && $tr.badge_success == $params.badge_success}<span class="badge badge-success">{/if}
                    {if isset($params.badge_warning) && $params.badge_warning && isset($tr.badge_warning) && $tr.badge_warning == $params.badge_warning}<span class="badge badge-warning">{/if}
                    {if isset($params.badge_danger) && $params.badge_danger && isset($tr.badge_danger) && $tr.badge_danger == $params.badge_danger}<span class="badge badge-danger">{/if}
                    {if isset($params.color) && isset($tr[$params.color])}
                        <span class="label color_field" style="background-color:{$tr[$params.color]};color:{if Tools::getBrightness($tr[$params.color]) < 128}white{else}#383838{/if}">
                    {/if}
                    {if isset($tr.$key)}
                        {if isset($params.active)}
                            {$tr.$key}
                        {elseif isset($params.callback)}
                            {if isset($params.maxlength) && Tools::strlen($tr.$key) > $params.maxlength}
                                <span title="{$tr.$key}">{$tr.$key|truncate:$params.maxlength:'...'}</span>
                            {else}
                                {$tr.$key}
                            {/if}
                        {elseif isset($params.activeVisu)}
                            {if $tr.$key}
                                <i class="icon-check-ok"></i> {l s='Enabled' d='Admin.Global'}
                            {else}
                                <i class="icon-remove"></i> {l s='Disabled' d='Admin.Global'}
                            {/if}
                        {elseif isset($params.position)}
                            {if !$filters_has_value && $order_by == 'position' && $order_way != 'DESC'}
                                <div class="dragGroup">
                                    <div class="positions">
                                        {$tr.$key.position + 1}
                                    </div>
                                </div>
                            {else}
                                {$tr.$key.position + 1}
                            {/if}
                        {elseif isset($params.image)}
                            {$tr.$key}
                        {elseif isset($params.icon)}
                            {if is_array($tr[$key])}
                                {if isset($tr[$key]['class'])}
                                    <i class="{$tr[$key]['class']}"></i>
                                {else}
                                    <img src="../img/admin/{$tr[$key]['src']}" alt="{$tr[$key]['alt']}" title="{$tr[$key]['alt']}" />
                                {/if}
                            {/if}
                        {elseif isset($params.type) && $params.type == 'price'}
                            {if isset($tr.id_currency)}
                                {displayPrice price=$tr.$key currency=$tr.id_currency}
                            {else}
                                {displayPrice price=$tr.$key}
                            {/if}
                        {elseif isset($params.float)}
                            {$tr.$key}
                        {elseif isset($params.type) && $params.type == 'date'}
                            {dateFormat date=$tr.$key full=0}
                        {elseif isset($params.type) && $params.type == 'datetime'}
                            {dateFormat date=$tr.$key full=1}
                        {elseif isset($params.type) && $params.type == 'decimal'}
                            {$tr.$key|string_format:"%.2f"}
                        {elseif isset($params.type) && $params.type == 'percent'}
                            {$tr.$key} {l s='%'}
                        {elseif isset($params.type) && $params.type == 'bool'}
                {if $tr.$key == 1}
                  {l s='Yes' d='Admin.Global'}
                {elseif $tr.$key == 0 && $tr.$key != ''}
                  {l s='No' d='Admin.Global'}
                {/if}
                        {* If type is 'editable', an input is created *}
                        {elseif isset($params.type) && $params.type == 'editable' && isset($tr.id)}
                            <input type="text" name="{$key}_{$tr.id}" value="{$tr.$key|escape:'html':'UTF-8'}" class="{$key}" />
                        {elseif $key == 'color'}
                            {if !is_array($tr.$key)}
                            <div style="background-color: {$tr.$key};" class="attributes-color-container"></div>
                            {else} {*TEXTURE*}
                            <img src="{$tr.$key.texture}" alt="{$tr.name}" class="attributes-color-container" />
                            {/if}
                        {elseif isset($params.maxlength) && Tools::strlen($tr.$key) > $params.maxlength}
                            <span title="{$tr.$key|escape:'html':'UTF-8'}">{$tr.$key|truncate:$params.maxlength:'...'|escape:'html':'UTF-8'}</span>
                        {else}
                            {$tr.$key|escape:'html':'UTF-8'}
                        {/if}
                    {else}
                        {block name="default_field"}--{/block}
                    {/if}
                    {if isset($params.suffix)}{$params.suffix}{/if}
                    {if isset($params.color) && isset($tr.color)}
                        </span>
                    {/if}
                    {if isset($params.badge_danger) && $params.badge_danger && isset($tr.badge_danger) && $tr.badge_danger == $params.badge_danger}</span>{/if}
                    {if isset($params.badge_warning) && $params.badge_warning && isset($tr.badge_warning) && $tr.badge_warning == $params.badge_warning}</span>{/if}
                    {if isset($params.badge_success) && $params.badge_success && isset($tr.badge_success) && $tr.badge_success == $params.badge_success}</span>{/if}
                {/block}
                {block name="close_td"}
                    </td>
                {/block}
            {/foreach}
    
        {if $multishop_active && $shop_link_type}
            <td title="{$tr.shop_name}">
                {if isset($tr.shop_short_name)}
                    {$tr.shop_short_name}
                {else}
                    {$tr.shop_name}
                {/if}
            </td>
        {/if}
        {if $has_actions}
            <td class="text-right">
                {assign var='compiled_actions' value=array()}
                {foreach $actions AS $key => $action}
                    {if isset($tr.$action)}
                        {if $key == 0}
                            {assign var='action' value=$action}
                        {/if}
                        {if $action == 'delete' && $actions|@count > 2}
                            {$compiled_actions[] = 'divider'}
                        {/if}
                        {$compiled_actions[] = $tr.$action}
                    {/if}
                {/foreach}
                {if $compiled_actions|count > 0}
                    {if $compiled_actions|count > 1}<div class="btn-group-action">{/if}
                    <div class="btn-group pull-right">
                        {$compiled_actions[0]}
                        {if $compiled_actions|count > 1}
                        <button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
                            <i class="icon-caret-down"></i>&nbsp;
                        </button>
                            <ul class="dropdown-menu">
                            {foreach $compiled_actions AS $key => $action}
                                {if $key != 0}
                                <li{if $action == 'divider' && $compiled_actions|count > 3} class="divider"{/if}>
                                    {if $action != 'divider'}{$action}{/if}
                                </li>
                                {/if}
                            {/foreach}
                            </ul>
                        {/if}
                    </div>
                    {if $compiled_actions|count > 1}</div>{/if}
                {/if}
            </td>
        {/if}
        </tr>
    {/foreach}
    {else}
        <tr>
            <td class="list-empty" colspan="{count($fields_display)+1}">
                <div class="list-empty-msg">
                    <i class="icon-warning-sign list-empty-icon"></i>
                    {l s='No records found'}
                </div>
            </td>
        </tr>
    {/if}
    </tbody>
    
     
    Kolfg, Foma67, _sashok и 2 другим нравится это.