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}
感谢您宝贵的回复,但这样我们将只在制造页面中获得制造列表,而不是其他列表,就像我们在类别页面中有类别和其他筛选器列表一样,那么还有其他方法可以在制造页面中获得类别列表筛选器吗?感谢您宝贵的回复,但这样我们只会在制造页面中得到制造列表,而不会得到其他列表,就像我们在类别页面中有类别和其他过滤器列表一样,那么还有其他方法可以在制造页面中得到类别列表过滤器吗?