在 prestashop 中制造 tpl 文件中调用 blocklayered 模块

Call blocklayered Module in manufacture tpl file in prestashop

我想在我的 manufacture-list.tpl 文件中使用 blocklayered(分层导航块)模块。在那我使用了这段代码:

{include file='./modules/blocklayered/blocklayered.tpl'}

但是它不起作用我想在制造页面的左栏中使用分层过滤器,它已经出现在类别页面中。

这不可能。这个问题已经被问过很多次了,每次的回答都是一样的。

Blocklayered 模块是为处理类别而构建的,不能用于任何其他用途。

解决此问题的方法是继续使用制造商列表页面,但将每个制造商的 link 更改为指向您的根类别,并使用为您的制造商定义的过滤器。然后,用户将被重定向到您的根目录,并在 blocklayered 处于活动状态并在想要的制造商上进行过滤。

我是这样为我的客户做的:(我添加了一些代码来按字母顺序对制造商进行排序,并通过快速访问菜单按他们的第一个字母对其进行分组)。

文件/override/controllers/front/ManufacturerController.php:

class ManufacturerController extends ManufacturerControllerCore
{
    protected $blocklayered = null;

    public function __construct()
    {
        parent::__construct();

        require_once(_PS_MODULE_DIR_ . 'blocklayered/blocklayered.php');
        $this->blocklayered = new BlockLayered();
    }

    /**
     * Assign template vars if displaying the manufacturer list
     */
    protected function assignAll()
    {
        if (Configuration::get('PS_DISPLAY_SUPPLIERS')) {
            $data = Manufacturer::getManufacturers(true, $this->context->language->id, true, false, false, false);

            $no_products = array();
            foreach ($data as $key => $item) {
                $data[$key]['link'] = Context::getContext()->link->getCategoryLink(MY_CATEGORY_ROOT, null, null, str_replace($this->getAnchor(), '_', Tools::link_rewrite($this->blocklayered->l('Manufacturer'))) . $this->getAnchor() . str_replace($this->getAnchor(), '_', Tools::link_rewrite($data[$key]['name'])));
                $data[$key]['image'] = (!file_exists(_PS_MANU_IMG_DIR_.$item['id_manufacturer'].'-'.ImageType::getFormatedName('medium').'.jpg')) ? false : $item['id_manufacturer'];
                if ($item['nb_products'] == 0)
                {
                    $no_products[] = $key;
                }
            }

            foreach ($no_products as $key)
            {
                unset($data[$key]);
            }

            $manufacturersByLetters = array();

            foreach ($data as $item)
            {
                $letter = strtoupper(substr($item['name'], 0, 1));
                if (! isset($manufacturersByLetters[$letter]))
                {
                    $manufacturersByLetters[$letter] = array();
                }
                $manufacturersByLetters[$letter][] = $item;
            }

            ksort($manufacturersByLetters, SORT_STRING);
            foreach ($manufacturersByLetters as &$manufacturers)
            {
                usort($manufacturers, function($manu1, $manu2) {
                    return strcmp(strtolower($manu1['name']), strtolower($manu2['name']));
                });
            }
            unset($manufacturers);

            $this->context->smarty->assign(array(
                'nbManufacturers' => count($data),
                'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')),
                'manufacturersByLetters' => $manufacturersByLetters
            ));
        } else {
            $this->context->smarty->assign('nbManufacturers', 0);
        }
    }

    protected function getAnchor()
    {
        static $anchor = null;
        if ($anchor === null)
            if (!$anchor = Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR'))
                $anchor = '-';
        return $anchor;
    }
}

文件/themes/my_theme/manufacturer-list.tpl:

{capture name=path}{l s='Nos marques'}{/capture}

<h1>
    <span>{l s='Nos Marques'}</span>
</h1>
{if isset($errors) AND $errors}
    {include file="$tpl_dir./errors.tpl"}
{else}
    {if $nbManufacturers > 0}
        <div id="manufacturer_menu">
            <span id="manufacturer_menu_title">{l s='Accéder directement à une lettre'}</span>
            <ul>
                {foreach from=$manufacturersByLetters item=manufacturers key=letter name=manufacturersByLetters}
                    <li{if $smarty.foreach.manufacturersByLetters.first} class="active"{/if}><a href="#manufacturer_list_letter_{$letter}">{$letter}</a></li>
                {/foreach}
            </ul>
        </div>

        {foreach from=$manufacturersByLetters item=manufacturers key=letter name=manufacturersByLetters}
            <h2 class="manufacturer_list_letter_wrapper{if $smarty.foreach.manufacturersByLetters.first} first{/if}">
                <span class="manufacturer_list_letter" id="manufacturer_list_letter_{$letter}">{$letter}</span>
            </h2>
            <ul class="manufacturer_list row">
            {strip}
                {foreach from=$manufacturers item=manufacturer name=manufacturers}
                    <li class="col-lg-1 col-md-2 col-sm-3 col-xs-6">
                        <div class="row">
                            <div class="col-xs-12">
                                <a class="manufacturer_list_name_wrapper" href="{$manufacturer.link|escape:'html':'UTF-8'}" title="{$manufacturer.name|escape:'html':'UTF-8'}">
                                    <div>
                                        {if isset($manufacturer.image) && $manufacturer.image}
                                            <img src="{$img_manu_dir}{$manufacturer.image|escape:'html':'UTF-8'}-medium_default.jpg" alt="{$manufacturer.name|escape:'html':'UTF-8'}" />
                                        {else}
                                            <span class="manufacturer_list_name">{$manufacturer.name|escape:'html':'UTF-8'}</span>
                                        {/if}
                                    </div>
                                </a>
                                {if isset($manufacturer.nb_products) && $manufacturer.nb_products > 0}
                                    <a class="manufacturer_list_link" href="{$manufacturer.link|escape:'html':'UTF-8'}" title="{$manufacturer.name|escape:'html':'UTF-8'}">
                                        <span class="manufacturer_list_link_name">{$manufacturer.name|escape:'html':'UTF-8'}</span>
                                        <span class="manufacturer_list_link_action">
                                            {if isset($manufacturer.nb_products) && $manufacturer.nb_products == 1}
                                                {l s='Afficher le produit'}
                                            {elseif isset($manufacturer.nb_products) && $manufacturer.nb_products > 0}
                                                {l s='Afficher les %d produits' sprintf=$manufacturer.nb_products|intval}
                                            {/if}
                                             <i class="icon-chevron-right right"></i>
                                        </span>
                                    </a>
                                {/if}
                            </div>
                        </div>
                    </li>
                {/foreach}
            {/strip}
            </ul>
        {/foreach}
        <script type="text/javascript">
            $("#manufacturer_menu a").on('click', function() {
                var $a = $(this)
                $('html, body').animate({
                    scrollTop: $($a.attr('href')).offset().top
                }, 750);
                return false;
            });
        </script>
    {/if}
{/if}