Không thể thêm Khối con vào sản phẩm_list


7

Tôi đang cố gắng thêm một khối vào danh sách sản phẩm:

<?xml version="1.0"?>
<layout version="0.1.0">
    <catalog_category_view translate="label">
        <reference name="product_list">
            <remove name="product_list_toolbar"/>
            <block type="core/template" name="helloworld" as="helloworld" template="helloworld.phtml"/>
        </reference>
        <reference name="footer">
            <block type="core/template" name="helloworld" as="helloworld" template="helloworld.phtml"/>
        </reference>
    </catalog_category_view>
</layout>

Trong danh mục / sản phẩm / list.phtml tôi có cái này:

<?php Zend_Debug::dump($this->getSortedChildren()); ?>
<?php echo $this->getChildHtml('helloworld'); ?>

Trong trang / html / footer.phtml tôi có cái này:

<?php Zend_Debug::dump($this->getSortedChildren()); ?>
<?php echo $this->getChildHtml('helloworld'); ?>

Lưu ý rằng tôi chỉ thêm <remove name="product_list_toolbar"/>để tôi có thể kiểm tra xem tham chiếu của mình có product_listhoạt động chính xác không, bằng cách xem product_list_toolbarcó bị xóa khỏi danh sách con được sắp xếp không. Nó là.

Vì vậy, những gì tôi có bây giờ là mã giống hệt trong danh sách sản phẩm và chân trang, và nó chỉ hoạt động trong phần chân trang. Sau khi thực hiện một số hoạt động đào, tôi không thể tìm thấy bất kỳ trường hợp nào của một khối được thêm vào product_listngoài product_list_toolbar. Vì vậy, có một cái gì đó về khối này làm cho việc thêm trẻ em không hoạt động?


thực sự đây là một câu hỏi hay và tôi không hiểu tại sao cộng đồng lại cố gắng đóng câu hỏi này! Đây không chắc chắn là một câu hỏi dựa trên ý kiến. Chúng ta nên đánh giá cao loại câu hỏi này.
Rajeev K Tomy

Câu trả lời:


8

Vấn đề ở đây là thứ tự các khối được chỉ định trong bố cục XML.

catalog_category_viewvề mặt kỹ thuật là tay cầm đúng, NHƯNG trong đó xử lý product_listkhối không tồn tại (chưa!).

Các product_listkhối duy nhất được tạo ra trong catalog_category_defaultcatalog_category_layeredtay cầm. (Và các thẻ điều khiển này được chỉ định sau trong XML hơn catalog_category_view.)

Nói tóm lại, khi tất cả các bố cục XML được hợp nhất, tham chiếu của bạn product_listsẽ không được thực thi, bởi vì nó chưa tồn tại vào thời điểm đó.

Giải pháp là thêm khối của bạn vào cả hai catalog_category_defaultcatalog_category_layered, HOẶC, tạo tay cầm tùy chỉnh của riêng bạn, thêm khối của bạn vào tay cầm đó và sử dụng lệnh <update>để đưa tay cầm của bạn vào catalog_category_defaultcatalog_category_layered.

Hy vọng rằng làm việc cho bạn.


Bất kỳ trang nào catalog_category_layeredcũng có vẻ như catalog_category_defaultvậy nên dường như tôi chỉ cần catalog_category_default. Ngoài ra, đây là vị trí và giúp tôi hiểu lý do tại sao nó làm điều này. Cảm ơn.
Tyler V.

@TylerV. bạn đã sai về nhận xét của bạn Xem câu trả lời của tôi để biết thêm chi tiết.
Rajeev K Tomy

3

Quả thực catalog_category_viewđược xử lý cho mọi trang xem danh mục và bạn đã chọn một cách xử lý bố cục chính xác. Tuy nhiên, vấn đề tồn tại ở đây là, chúng ta cần quan tâm đến thứ tự xử lý bố cục được xử lý trong magento.

Trong ngữ cảnh này, đó là trang xem danh sách sản phẩm danh mục, các thẻ điều khiển bố cục được xử lý theo thứ tự này (tham chiếu đến )

  0 => 'default'
  1 =  'STORE_default' 
  2 => 'THEME_frontend_rwd_default'
  3 => 'catalog_category_view'
  4 => 'catalog_category_layered' 
  5 => 'CATEGORY_4'
  6 => 'customer_logged_out'
  7 => 'SHORTCUT_popup'
  8 => 'SHORTCUT_uk_popup' 
  9 => 'product_list' 

Điều này có nghĩa là khi magento xử lý loadLayouthành động, trước tiên, nó sẽ xem xét defaultxử lý bố cục trước và bao gồm các khối được xác định trong xử lý bố cục này thông qua các tệp cập nhật bố cục. Sau đó, nó sẽ xử lý STORE_defaultvà như vậy. Điều này có nghĩa là catalog_category_viewxử lý bố trí đang xử lý trước catalog_category_defaulthoặc catalog_category_layered. Đây là điểm quan trọng ở đây cần lưu ý.

Magento đang xác định product_listkhối bên trong tay cầm bố trí catalog_category_defaultcatalog_category_layered. Vì catalog_category_viewđang xử lý ngay trước hai tay cầm bố cục này, nên product_listkhối được tham chiếu trong định nghĩa của bạn là hoàn toàn xa lạ và do đó magento chỉ cần bỏ qua nội dung bên trong nó.

Về nhận xét của bạn

Tôi nghĩ rằng bạn đã hiểu lầm nó. Có hai loại danh mục dựa trên bố cục. họ đang

  1. Danh mục Mặc định
  2. loại lớp

Magento sẽ thêm khác nhau layout update handlecho hai loại thể loại này. Đối với default categoriesnó sẽ chỉ xử lý catalog_category_default. Đối với layered cateogries, quá trình magento chỉ catalog_category_layered. Trong cả hai trường hợp, magento chắc chắn sẽ xử lý action layout handle catalog_category_viewcategory specific layout handle CATEGORY_{ID}. tức là trong ngắn hạn, action layout handlesẽ được xử lý cho mọi trang xem danh mục. (xử lý bố cục cụ thể của danh mục sẽ khác nhau cho các danh mục khác nhau.) Xem bằng chứng ở đây

Tập tin : app/code/core/Mage/Catalog/Model/Category.php

public function getLayoutUpdateHandle()
{
    $layout = 'catalog_category_';
    if ($this->getIsAnchor()) {
        $layout .= 'layered';
    }
    else {
        $layout .= 'default';
    }
    return $layout;
}

see catalog_category_layeredsẽ được bao gồm trong cập nhật bố cục chỉ khi thuộc isAnchortính của danh mục được đặt thành yes(chúng tôi đang thực hiện việc này thông qua phía quản trị viên.). Nếu không nó sẽ xử lýcatalog_category_default

Tóm lại : thứ tự xử lý bố cục được xử lý trong magento là nhân vật phản diện và anh hùng trong trường hợp này.


Bạn đã đúng catalog_category_layeredcatalog_category_defaultkhông xuất hiện cùng nhau. Tôi nhìn thấy catalog_category_layered_nochildrenvà khiến chúng lẫn lộn. Đủ kỳ lạ, catalog_category_layered_nochildrenđược thêm vào ngay cả trên các loại không phân lớp.
Tyler V.

catalog_category_layered_nochildrenchỉ được xem xét khi xem danh mục không có danh mục trẻ em. Đối với các danh mục đang giữ một số danh mục con, xử lý bố cục cụ thể này sẽ không được xử lý. Điều đó nghe có vẻ hợp lý không?
Rajeev K Tomy

0

Tôi đặt tham chiếu và cập nhật của mình dưới tay cầm catalog_category_viewtuy nhiên product_listkhối được xác định dưới tay cầm catalog_category_default. Có vẻ như điều này sẽ xếp tầng và vẫn hoạt động, và tôi mời ai đó cho tôi biết lý do tại sao nó không. Nhưng việc thay đổi tay cầm được sử dụng cho bản cập nhật này đã khắc phục vấn đề.

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.