Di chuyển thanh công cụ danh mục ra khỏi sản phẩm / danh sách


8

Tôi đang cố gắng di chuyển thanh công cụ hiển thị các tùy chọn sắp xếp và máy nhắn tin ra khỏi danh sách sản phẩm để tôi có thể gói nó với mẩu bánh mì và tên danh mục.

Tôi đã tìm thấy trang web này hoạt động cho các phiên bản cũ hơn của Magento nhưng nó không hoạt động cho CE 1.7 hoặc EE 1.12.

Trong các bình luận, ai đó đã có một số mã để chuyển nó vào thư mục gốc nhưng điều đó cũng không hoạt động. Đây là mã để di chuyển nó đến danh mục / chế độ xem sẽ giúp:

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

Nếu có một cách khác để nhóm các mẩu bánh mì, tên danh mục và thanh công cụ lại với nhau, hãy cho tôi biết.

Câu trả lời:


13

Catalog/product_listcatalog/product_list_toolbarmáng có dây với nhau đến nỗi bạn bị mắc kẹt khi sử dụng chúng cùng nhau. Tuy nhiên, nếu bạn chỉ muốn hiển thị thanh công cụ, bạn sẽ cần tạo một mẫu sản phẩm (gần như) trống.

Giả sử bạn muốn thanh công cụ được hiển thị trong khối Breadcrumbs, nhưng điều này sẽ hoạt động với bất kỳ khối nào thực sự.

Đặt bản cập nhật sau ở đâu đó trong của bạn layout/local.xml(bạn cũng có thể cần một bản cập nhật cho catalog_carget_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>

Tạo một mẫu danh sách sản phẩm một lớp trong template/catalog/product/list/toolbar_only.phtml:

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

Sau đó, bạn có thể chèn khối mới vào bất cứ nơi nào bạn muốn trong mẫu mẩu bánh mì của bạn:

template/page/html/breadcrumbs.phtml:

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

Đây cũng là một phương pháp khá tốt - tôi hoàn toàn đồng ý với việc giữ các danh sách sản phẩm và thanh công cụ cùng nhau bằng mọi giá. Tôi sẽ quan tâm đến việc nghe ý kiến ​​của bạn về phương pháp javascript mà tôi đã đăng trước đó.
jharrison.au

@Jan Tomka câu trả lời tuyệt vời! Tôi đã vật lộn với việc cố gắng đẩy một khối giữa thanh công cụ và các sản phẩm, và giải pháp của bạn đã làm cho nó có thể. cảm ơn!
Ronen Ness

Vấn đề với câu trả lời này là nó kết thúc việc kích hoạt trình quan sát swatches có thể cấu hình để chạy lại vì catalog/product_listkhối tồn tại hai lần và catalog_block_product_list_collectionphương thức được gửi đi hai lần (mà người quan sát đang quan sát). Điều này làm tăng đáng kể thời gian tải trang chuyên mục.
Robbie Averill

Đúng là. Câu trả lời ban đầu được viết trước khi các mẫu màu có thể cấu hình xuất hiện (không phải là tôi đã kiểm tra nhiều lần thực thi quan sát viên tại thời điểm đó). Có thể tốt nhất là sử dụng một loại khối riêng biệt được mở rộng từ danh mục / sản phẩm_list, với công văn sự kiện được xóa khỏi _b BeforeToHtml ().
Jan Tomka

4

Sau khi cố gắng di chuyển khối thanh công cụ thông qua bố cục XML và các bản hack mẫu, tôi quyết định việc di chuyển nó qua javascript sẽ dễ dàng hơn rất nhiều. Tôi nghĩ rằng cách này cho phép bạn kiểm soát nhiều hơn mà không có nguy cơ phá vỡ chức năng.

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

Lưu ý phương pháp này chỉ di chuyển thanh công cụ đầu tiên chứ không phải thanh công cụ dưới cùng bằng cách sử dụng bộ chọn cụ thể .category-products > .toolbar

Một số lý do nữa là tại sao phương pháp này là tốt nhất:

  1. Danh sách sản phẩm và thanh công cụ được đan xen rất nhiều, tham chiếu lẫn nhau trong các khối của chúng để có ý nghĩa giữ chúng lại với nhau về mặt mã - chúng đi đôi với nhau
  2. Ít mã hơn và ít thay đổi hơn đối với logic khối có nghĩa là ít khả năng xảy ra lỗi hơn
  3. Sử dụng javascript, bạn có thể dễ dàng di chuyển nó đến bất cứ đâu trên trang
  4. Sử dụng bố cục XML, bạn chỉ có thể bao gồm javascript trên các trang có danh sách sản phẩm
  5. Di chuyển qua javascript có thể mở rộng và được chứng minh trong tương lai - nếu logic đằng sau danh sách sản phẩm hoặc khối thanh công cụ thay đổi trong bản phát hành mới của Magento thì phương pháp này vẫn sẽ hoạt động.

Tôi hoàn toàn sẽ sử dụng phương pháp này nhưng tôi đang cố gắng làm cho trang web sử dụng ít javascript nhất có thể mặc dù tôi biết Magento là javascript phụ thuộc.
kel

4

Mã của LuFFy không còn xa

Để sao chép khối vào các phần khác của trang web của bạn, bạn có thể lấy đối tượng bố cục chính và sau đó chỉ cần lấy khối nội dung theo tên

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

Sử dụng cái này ở đâu?
Pratik

@PratikCJoshi Tôi đặt mã này trực tiếp vào tệp danh mục / lớp / view.phtml của tôi và nó hoạt động hoàn hảo, vì vậy bạn có thể đặt mã này vào bất kỳ tệp mẫu nào mà bạn muốn thanh công cụ xuất hiện.
gregdev

0

Hãy thử Mã:

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

Đó là cùng một mã trong các bình luận và nó cho tôi lỗi này:Call to undefined function getParentBlock()
kel

Oh...!! Tôi cũng tìm thấy trên một trang web khác.
LuFFy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.