Перемещение категории панели инструментов из продукта/списка
-
16-10-2019 - |
Вопрос
Я пытаюсь переместить панель инструментов, которая показывает варианты сортировки и пейджер из списка продуктов, чтобы я мог объединить ее с помощью панировочных сухарей и названия категории.
я Нашел этот сайт Это сработало для более старых версий Magento, но не работает для CE 1.7 или EE 1.12.
В комментариях у кого -то был какой -то код, чтобы переместить его в корень, но это также не работает. Это был код, чтобы перенести его в категорию/просмотр, который поможет:
$toolbar = $this->getChild('product_list')->getToolbarBlock();
$toolbar->setCollection($this->getChild('product_list')->getLoadedProductCollection());
echo $toolbar->toHtml();
Если есть еще один способ сгруппировать сухари, название категории и панель инструментов, дайте мне знать.
Решение
Catalog/product_list
а также catalog/product_list_toolbar
настолько проводные впадины друг с другом, что вы застряли, используя их вместе. Однако, если вы хотите отобразить панель инструментов, вам нужно будет создать (почти) пустой шаблон product_list.
Скажем, вы хотите, чтобы панель инструментов отображалась в блоке хлебных крошек, но это должно работать с любым блоком.
Поместите следующее обновление где -нибудь в вашем layout/local.xml
(Вам может понадобиться один для Catalog_category_default тоже):
<catalog_category_layered>
<reference name="breadcrumbs">
<block type="catalog/product_list" name="toolbar_only" template="catalog/product/list/toolbar_only.phtml">
<block type="catalog/product_list_toolbar" name="product_list_toolbar_only" template="catalog/product/list/toolbar.phtml">
<block type="page/html_pager" name="product_list_toolbar_pager"/>
</block>
<action method="setToolbarBlockName"><name>product_list_toolbar_only</name></action>
</block>
</reference>
</catalog_category_layered>
Создайте шаблон списка продуктов с одной линией в template/catalog/product/list/toolbar_only.phtml
:
<?php echo $this->getToolbarHtml() ?>
Затем вы можете вставить новый блок, где захотите в шаблоне панировок:
template/page/html/breadcrumbs.phtml
:
<?php echo $this->getChildHtml('toolbar_only'); ?>
Другие советы
После попытки переместить блок панели инструментов через макет XML и взломы шаблонов, я решил, что было намного проще перемещать его через JavaScript. Я думаю, что этот путь дает вам больше контроля без какого -либо риска нарушения функциональности.
jQuery(document).ready(function($) {
$(".breadcrumbs").after($(".category-products > .toolbar"));
});
Обратите внимание, что этот метод перемещает только первую панель инструментов, а не нижняя, используя конкретный селектор .category-products > .toolbar
Еще несколько рассуждений относительно того, почему этот метод лучше:
- Список продуктов и панель инструментов сильно переплетены, ссылаясь друг на друга в своих блоках, поэтому имеет смысл держать их вместе с точки зрения кода - они идут рука об руку
- Меньше кода и меньше изменений для блокировки логики означает меньшую вероятность появления ошибок
- Использование JavaScript вы можете легко переместить его в любом месте на странице
- Использование макета XML вы можете включить JavaScript на страницах со списком продуктов
- Перемещение через JavaScript расширяется и защищена от будущего - если логика списка продуктов или панели инструментов изменяет новые изменения в новых выпусках Magento, этот метод все равно будет работать.
Код Луффи не за горами
Чтобы скопировать блок на другие части вашего сайта, вы можете получить основной объект макета, а затем просто получить блок содержимого по имени
$layout = Mage::app()->getLayout();
$content = $layout->getBlock('content');
$categoryProducts = $content->getChild('category.products');
$productList = $categoryProducts->getChild('product_list');
$toolbar = $productList->getToolbarBlock();
$toolbar->setCollection($productList->getLoadedProductCollection());
echo $toolbar->toHtml();
Попробуйте код:
getParentBlock();
$content = $parent->getChild(‘content’);
$categoryProducts = $content->getChild(‘category.products’);
$productList = $categoryProducts->getChild(‘product_list’);
$toolbar = $productList->getToolbarBlock();
$toolbar->setCollection($productList->getLoadedProductCollection());
echo $toolbar->toHtml();