Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在prestashop中调用制造tpl文件中的blocklayered模块_Php_Smarty_Prestashop - Fatal编程技术网

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

Php 在prestashop中调用制造tpl文件中的blocklayered模块,php,smarty,prestashop,Php,Smarty,Prestashop,我想在我的制造列表.tpl文件中使用blocklayered(分层导航块)模块。因此,我使用了以下代码: {include file='./modules/blocklayered/blocklayered.tpl'} 但它不工作,我想在制造页面的左栏中使用分层过滤器,这已经出现在分类页面中。这是不可能的。这个问题已经被问了很多次,答案总是一样的 Blocklayered模块是为处理类别而构建的,不能用于任何其他用途 解决方法是继续使用制造商列表页面,但更改每个制造商的链接以指向根类别,并使用

我想在我的
制造列表.tpl
文件中使用blocklayered(分层导航块)模块。因此,我使用了以下代码:

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

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

这是不可能的。这个问题已经被问了很多次,答案总是一样的

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

解决方法是继续使用制造商列表页面,但更改每个制造商的链接以指向根类别,并使用为制造商定义的筛选器。然后,用户将被重定向到您的根类别,其中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_themes/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}
{capture name=path}{l s='Nos marques'}{/capture}
{l s='Nos Marques'}
{如果isset($errors)和$errors}
{include file=“$tpl_dir./errors.tpl”}
{else}
{如果$0>0}
{l s='Accéder directementáune lettre'}
    {foreach from=$manufacturersByLetters item=manufacturers key=letter name=manufacturersByLetters} {/foreach}
{foreach from=$manufacturersByLetters item=manufacturers key=letter name=manufacturersByLetters} {$letter}
    {strip} {foreach from=$manufacturers item=制造商名称=制造商}
  • {如果isset($manufacturer.nb_products)&&$manufacturer.nb_products>0} {/if}
  • {/foreach} {/strip}
{/foreach} $(“#制造商#菜单a”)。在('click',function()上{ 变量$a=$(此) $('html,body')。设置动画({ scrollTop:$($a.attr('href')).offset().top }, 750); 返回false; }); {/if} {/if}
这是不可能的。这个问题已经被问了很多次,答案总是一样的

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

解决方法是继续使用制造商列表页面,但更改每个制造商的链接以指向根类别,并使用为制造商定义的筛选器。然后,用户将被重定向到您的根类别,其中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_themes/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}
{capture name=path}{l s='Nos marques'}{/capture}
{l s='Nos Marques'}
{如果isset($errors)和$errors}
{include file=“$tpl_dir./errors.tpl”}
{else}
{如果$0>0}
{l s='Accéder directementáune lettre'}
    {foreach from=$manufacturersByLetters item=manufacturers key=letter name=manufacturersByLetters} {/foreach}
{foreach from=$manufacturersByLetters item=manufacturers key=letter name=manufacturersByLetters} {$letter}
    {strip} {foreach from=$manufacturers item=制造商名称=制造商}
  • {如果isset($manufacturer.nb_products)&&$manufacturer.nb_products>0} {/if}
  • {/foreach} {/strip}
{/foreach} $(“#制造商#菜单a”)。在('click',function()上{ 变量$a=$(此) $('html,body')。设置动画({ scrollTop:$($a.attr('href')).offset().top }, 750); 返回false; }); {/if} {/if}
感谢您宝贵的回复,但这样我们将只在制造页面中获得制造列表,而不是其他列表,就像我们在类别页面中有类别和其他筛选器列表一样,那么还有其他方法可以在制造页面中获得类别列表筛选器吗?感谢您宝贵的回复,但这样我们只会在制造页面中得到制造列表,而不会得到其他列表,就像我们在类别页面中有类别和其他过滤器列表一样,那么还有其他方法可以在制造页面中得到类别列表过滤器吗?