Spostamento della barra degli strumenti della categoria fuori dal prodotto / elenco


8

Sto cercando di spostare la barra degli strumenti che mostra le opzioni di ordinamento e il cercapersone dall'elenco dei prodotti in modo da poterlo raggruppare con il breadcrumb e il nome della categoria.

Ho trovato questo sito che funzionava con le versioni precedenti di Magento ma non funziona con CE 1.7 o EE 1.12.

Nei commenti qualcuno aveva del codice per spostarlo nella radice ma anche quello non funziona. Questo era il codice per spostarlo nella categoria / vista che avrebbe aiutato:

$toolbar = $this->getChild('product_list')->getToolbarBlock();
$toolbar->setCollection($this->getChild('product_list')->getLoadedProductCollection());
echo $toolbar->toHtml();

Se esiste un altro modo per raggruppare il pangrattato, il nome della categoria e la barra degli strumenti fammi sapere.

Risposte:


13

Catalog/product_liste catalog/product_list_toolbarsono così collegati tra loro che sei bloccato a usarli insieme. Se vuoi solo visualizzare la barra degli strumenti, però, dovrai creare un modello di product_list (quasi) vuoto.

Supponi di voler visualizzare la barra degli strumenti nel blocco breadcrumb, ma in realtà dovrebbe funzionare con qualsiasi blocco.

Inserisci il seguente aggiornamento da qualche parte nel tuo layout/local.xml(potresti averne bisogno anche per 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>

Crea un modello di elenco prodotti con una sola riga in template/catalog/product/list/toolbar_only.phtml:

<?php echo $this->getToolbarHtml() ?>

Puoi quindi inserire il nuovo blocco dove vuoi nel tuo modello breadcrumb:

template/page/html/breadcrumbs.phtml:

<?php echo $this->getChildHtml('toolbar_only'); ?>

Anche questo è un metodo piuttosto valido: concordo pienamente sul fatto di tenere insieme elenchi di prodotti e barre degli strumenti a tutti i costi. Sarei interessato a sentire la tua opinione sul metodo javascript che ho pubblicato in precedenza.
jharrison.au,

@Jan Tomka ottima risposta! Stavo lottando per cercare di spingere un blocco tra la barra degli strumenti e i prodotti stessi e la tua soluzione lo ha reso possibile. Grazie!
Ronen Ness,

Il problema con questa risposta è che finisce per far funzionare nuovamente l'osservatore di campioni configurabili perché il catalog/product_listblocco esiste due volte e il catalog_block_product_list_collectionmetodo viene inviato due volte (che l'osservatore sta osservando). Ciò aumenta drasticamente il tempo di caricamento della pagina della categoria.
Robbie Averill,

Vero che. La risposta originale è stata scritta prima che arrivassero i campioni configurabili (non che ho controllato più esecuzioni di osservatori in quel momento). Potrebbe essere meglio usare un tipo di blocco separato esteso da catalog / product_list, con l'invio dell'evento rimosso da _beforeToHtml ().
Jan Tomka,

4

Dopo aver provato a spostare il blocco della barra degli strumenti attraverso il layout XML e gli hack dei modelli, ho deciso che era molto più semplice spostarlo tramite JavaScript. Penso che in questo modo ti dia più controllo senza alcun rischio di interruzione della funzionalità.

jQuery(document).ready(function($) {
     $(".breadcrumbs").after($(".category-products > .toolbar"));
});

Nota che questo metodo sposta solo la prima barra degli strumenti e non quella inferiore usando il selettore specifico .category-products > .toolbar

Qualche altro ragionamento sul perché questo metodo è il migliore:

  1. L'elenco dei prodotti e la barra degli strumenti sono strettamente intrecciati, facendo riferimento tra loro nei loro blocchi, quindi ha senso tenerli insieme in termini di codice: vanno di pari passo
  2. Meno codice e meno modifiche per bloccare la logica significano meno probabilità che i bug vengano visualizzati
  3. Usando javascript puoi spostarlo facilmente ovunque nella pagina
  4. Utilizzando il layout XML è possibile includere solo JavaScript nelle pagine con un elenco di prodotti
  5. Lo spostamento tramite javascript è estendibile e sicuro per il futuro: se la logica dietro l'elenco dei prodotti o la barra degli strumenti blocca le modifiche nelle nuove versioni di Magento, questo metodo continuerà a funzionare.

Vorrei assolutamente seguire questo metodo, ma sto cercando di rendere il sito il più piccolo possibile javascript anche se so che Magento è dipendente da javascript.
Kel

4

Il codice di LuFFy non è lontano

Per copiare il blocco in altre parti del tuo sito, puoi ottenere l'oggetto layout principale e quindi 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();

Dove usare questo?
Pratik,

@PratikCJoshi Ho inserito questo codice direttamente nel mio file catalog / layer / view.phtml e ha funzionato perfettamente, quindi dovresti essere in grado di inserirlo in qualsiasi file modello in cui vuoi che appaia la barra degli strumenti.
Gregregev,

0

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();

Era lo stesso codice nei commenti e mi dà questo errore:Call to undefined function getParentBlock()
Kel

Oh...!! Lo stesso che ho trovato su un altro sito.
Rufy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.