Memindahkan toolbar kategori keluar dari produk / daftar

8

Saya mencoba untuk memindahkan bilah alat yang memperlihatkan opsi penyortiran dan pager dari daftar produk sehingga saya dapat menggabungkannya dengan remah roti dan nama kategori.

Saya menemukan situs ini yang berfungsi untuk versi Magento yang lebih lama tetapi tidak berfungsi untuk CE 1.7 atau EE 1.12.

Dalam komentar seseorang memiliki beberapa kode untuk memindahkannya ke root tetapi itu juga tidak berhasil. Ini adalah kode untuk memindahkannya ke kategori / tampilan yang akan membantu:

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

Jika ada cara lain untuk mengelompokkan remah roti, nama kategori dan bilah alat bersama-sama beri tahu saya.

kel
sumber

Jawaban:

13

Catalog/product_listdan catalog/product_list_toolbarsangat terhubung melalui kabel satu sama lain bahwa Anda terjebak dengan menggunakannya bersama-sama. Jika Anda hanya ingin menampilkan bilah alat, Anda harus membuat (hampir) template product_list kosong.

Katakanlah Anda ingin bilah alat ditampilkan di blok remah roti, tetapi ini benar-benar bekerja dengan blok apa pun.

Letakkan pembaruan berikut di suatu tempat di layout/local.xml(Anda mungkin memerlukannya untuk catalog_category_default juga):

<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>

Buat templat daftar produk satu-liner di template/catalog/product/list/toolbar_only.phtml:

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

Anda kemudian dapat memasukkan blok baru di mana pun Anda inginkan dalam templat remah roti Anda:

template/page/html/breadcrumbs.phtml:

<?php echo $this->getChildHtml('toolbar_only'); ?>
Jan Tomka
sumber
Ini adalah metode yang cukup bagus juga - Saya sepenuhnya setuju untuk menjaga daftar produk dan toolbar bersama-sama di semua biaya. Saya akan tertarik mendengar pendapat Anda tentang metode javascript yang saya posting sebelumnya.
jharrison.au
@ Jan Tomka jawaban yang bagus! Saya berjuang dengan mencoba mendorong blok antara bilah alat dan produk sendiri, dan solusi Anda memungkinkan. Terima kasih!
Ronen Ness
Masalah dengan jawaban ini adalah bahwa hal itu akhirnya memicu pengamat swatch yang dapat dikonfigurasi untuk berjalan kembali karena catalog/product_listblok ada dua kali, dan catalog_block_product_list_collectionmetode ini dikirim dua kali (yang diamati oleh pengamat). Ini secara drastis meningkatkan waktu pemuatan halaman kategori.
Robbie Averill
Benar bahwa. Jawaban aslinya ditulis sebelum swatch yang dapat dikonfigurasi muncul (bukan karena saya memeriksa beberapa eksekusi pengamat pada waktu itu). Mungkin lebih baik menggunakan tipe blok terpisah yang diperluas dari katalog / product_list, dengan pengiriman acara dihapus dari _beforeToHtml ().
Jan Tomka
4

Setelah mencoba untuk memindahkan blok bilah alat melalui layout XML dan template hacks saya memutuskan itu jauh lebih mudah untuk memindahkannya melalui javascript. Saya pikir cara ini memberi Anda lebih banyak kontrol tanpa risiko merusak fungsionalitas.

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

Perhatikan metode ini hanya memindahkan bilah alat pertama dan bukan yang bawah menggunakan pemilih tertentu .category-products > .toolbar

Beberapa alasan mengapa metode ini terbaik:

  1. Daftar produk dan bilah alat sangat terkait, merujuk satu sama lain di blok mereka sehingga masuk akal untuk menjaga mereka bersama-sama dalam hal kode - mereka berjalan seiring
  2. Lebih sedikit kode dan lebih sedikit perubahan untuk memblokir logika berarti lebih kecil kemungkinan bug muncul
  3. Dengan menggunakan javascript, Anda dapat dengan mudah memindahkannya ke mana saja di halaman
  4. Menggunakan tata letak XML Anda hanya dapat memasukkan javascript pada halaman dengan daftar produk
  5. Bergerak melalui javascript dapat diperpanjang dan terbukti di masa mendatang - jika logika di balik daftar produk atau bilah alat memblokir perubahan pada rilis baru Magento, metode ini akan tetap berfungsi.
jharrison.au
sumber
Saya benar-benar akan menggunakan metode ini tetapi saya mencoba membuat situs ini menggunakan javascript sesedikit mungkin walaupun saya tahu Magento bergantung pada javascript.
kel
4

Kode LuFFy tidak jauh

Untuk menyalin blok ke bagian lain dari situs Anda, Anda bisa mendapatkan objek tata letak utama, dan kemudian hanya mendapatkan blok konten berdasarkan nama

      $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();
Judder
sumber
Di mana menggunakan ini?
Pratik
@PratikCJoshi Saya meletakkan kode ini langsung di file katalog / layer / view.phtml saya dan berfungsi dengan baik, jadi Anda harus bisa menempatkan ini di file template mana pun yang Anda inginkan bilah alat muncul.
gregdev
0

Coba Kode:

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();
LuFFy
sumber
Itu kode yang sama dalam komentar dan itu memberi saya kesalahan ini:Call to undefined function getParentBlock()
kel
Oh ... !! Sama saya temukan di situs lain.
LuFFy