Spostare la barra degli strumenti categoria di prodotto / lista
-
16-10-2019 - |
Domanda
Sto cercando di spostare la barra degli strumenti che mostra le opzioni di ordinamento e il cercapersone fuori dalla lista dei prodotti in modo da poter riunire con il pangrattato e il nome della categoria.
I trovato questo sito che ha lavorato per le vecchie versioni di Magento, ma non funziona per CE 1.7 o EE 1.12.
Nel commenti qualcuno aveva qualche codice per spostarla alla radice, ma che non lo fa anche il lavoro. Questo è stato il codice per spostarlo alla categoria / vista che aiuterebbe:
$toolbar = $this->getChild('product_list')->getToolbarBlock();
$toolbar->setCollection($this->getChild('product_list')->getLoadedProductCollection());
echo $toolbar->toHtml();
Se c'è un altro modo di raggruppare il pangrattato, nome della categoria e della barra degli strumenti insieme fammi sapere.
Soluzione
Catalog/product_list
e catalog/product_list_toolbar
sono così cablati depressione con l'altro che sei bloccato con il loro utilizzo insieme. Se si desidera solo alla barra degli strumenti di visualizzazione, però, è necessario creare un (quasi) modello vuoto Product_List.
dici che vuoi barra degli strumenti visualizzata nel blocco pangrattato, ma questo dovrebbe funzionare con qualsiasi blocco davvero.
Inserire il seguente aggiornamento da qualche parte nel vostro layout/local.xml
(potrebbe essere necessario uno per catalog_category_default, anche):
<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>
Creazione di un modello di elenco dei prodotti one-liner in template/catalog/product/list/toolbar_only.phtml
:
<?php echo $this->getToolbarHtml() ?>
È possibile quindi inserire il nuovo blocco dove vuoi nel modello pangrattato:
template/page/html/breadcrumbs.phtml
:
<?php echo $this->getChildHtml('toolbar_only'); ?>
Altri suggerimenti
Dopo aver cercato di spostare il blocco della barra degli strumenti attraverso XML layout e template hack ho deciso che era molto più facile per spostarlo tramite JavaScript. Penso che in questo modo si dà più controllo, senza alcun rischio di rottura funzionalità.
jQuery(document).ready(function($) {
$(".breadcrumbs").after($(".category-products > .toolbar"));
});
Nota questo metodo sposta solo la prima barra e non quella inferiore utilizzando il selettore specifico .category-products > .toolbar
Alcuni più ragionare sul motivo per cui questo metodo è migliore:
- L'elenco dei prodotti e della barra degli strumenti sono fortemente intrecciate, che fa riferimento a vicenda nelle loro blocchi quindi ha senso per tenerli insieme in termini di codice - vanno di pari passo
- meno codice e meno modifiche ai mezzi logici di blocco in meno di probabilità di bug a pop-up
- Utilizzo di javascript si può facilmente spostare qualsiasi punto della pagina
- Uso di layout XML è possibile includere solo il javascript pagine con un elenco di prodotti
- Muoversi tramite javascript è estensibile e a prova di futuro -. Se la logica dietro la lista dei prodotti o della barra degli strumenti cambia blocchi nelle nuove versioni di Magento questo metodo funzionerà ancora
Codice di Rufy non è lontano
Per copiare il blocco ad altre parti del tuo sito, è possibile ottenere l'oggetto di layout principale, e poi basta ottenere il blocco di contenuto per nome
$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();
Prova il codice:
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();