Làm thế nào để tìm ra cách xử lý bố trí sẽ được thay đổi?


8

Làm cách nào để biết tôi nên sử dụng tay cầm nào khi tôi muốn tùy chỉnh một trang nhất định?

Ví dụ: bằng cách tìm kiếm trực tuyến, tôi phát hiện ra đó checkout_onepage_indexlà cách xử lý để sửa đổi trang Checkout. Tôi không biết về phép thuật này, nhưng bằng cách nào đó, ai đó chỉ biết và tôi muốn biết cách học phép thuật này.

<?xml version="1.0"?>
<layout>
    <checkout_onepage_index>
        <reference name="head"></reference>
    </checkout_onepage_index>
</layout>

Làm thế nào để tôi biết những gì xử lý nếu nói rằng tôi muốn sửa đổi trang thành công thay thế? hoặc trang chi tiết thứ tự frontend? Vân vân...?

Câu trả lời:


5

Bạn có thể thêm điều này vào hành động điều khiển của bạn. Nó sẽ hiển thị các thẻ điều khiển theo cách gọn gàng hơn var_dump. Kỳ lạ là câu trả lời này chưa có trên stack.

Zend_Debug::dump($this->getLayout()->getUpdate()->getHandles());

3

Trong trường hợp đơn giản nhất, tay cầm bố trí đại diện frontName_controller_action.

Vì vậy, trong ví dụ của bạn:

  • frontNamecheckoutcho Mage_Checkoutmô-đun (theo định nghĩa của nó config.xmltập tin trong <routers></routers>phần).
  • controlleronepagecho Mage_Checkout_OnepageController.
  • actionindexchoMage_Checkout_OnepageController::indexAction()

Lưu ý rằng đây chỉ là trường hợp đơn giản nhất. Tay cầm bố cục có thể được tạo / thêm vào ở nhiều vị trí và cách khác, chẳng hạn như logic danh mục ( PRODUCT_TYPE_xtay cầm bố cục cho các loại sản phẩm khác nhau).

Một cách tốt để tìm các thẻ điều khiển bố cục để sử dụng là kiểm tra các tệp trong design/frontend/base/default/layout- thư mục này lưu trữ tất cả các tệp bố cục của gói / chủ đề cơ sở và nó có hầu hết (nếu không phải tất cả) trong số các hộp xử lý bố trí ngoài hộp mà bạn xử lý có thể sử dụng.


frontName_controller_actionchỉ là một ước? Tôi tin rằng có một số tay cầm không theo mô hình này, điều đó có đúng không?
Yeo

Yup, đó chỉ là một quy ước cho hầu hết các bộ điều khiển. Và, vâng, có rất nhiều tay cầm bố trí khác, và bạn thậm chí có thể thêm tay cầm của riêng bạn.
Agop

3

Chúng tôi đã viết ra, cách xử lý được xây dựng (và nhiều thứ khác) ở đây:

http://theslidesareonline.de/magento-in-30-minutes-en.pdf

và chúng tôi đã viết ra một vài cách xử lý bố cục mà người ta nên biết, như customer_logged_in|out

Hành động tùy chỉnh

Giao diện điều khiển sẽ được xây dựng với tên NODE!

<routers>
    <companyModule_frontend>
        <use>standard</use>
        <args>
            <module>Company_Module</module>
            <frontName>frontend</frontName>
        </args>
    </companyModule_frontend>
</routers>

Tuyến đường: frontend // Bố trí xử lý: companyModule_frontend_controllName_actionName

Pht Chuẩn Bố trí-Xử lý

Phù hợp


^ Magento chỉ sử dụng các phần của tệp Bố cục-XML, tùy thuộc vào trang được yêu cầu. Những phần này được gọi là bố trí xử lý. Có một số được sử dụng mỗi lần và một số khác thuộc về chính xác một URL

Bố cục tay cầm quan trọng nhất không thuộc về một trang:

  • (tất cả các trang)
  • (tình trạng khách hàng)
  • (loại w / o LN)
  • (loại có LN)
  • (Tất cả danh mục)
  • (trang chi tiết sản phẩm)

Giao diện-Xử lý đặc biệt

<PRODUCT\_TYPE\_(simple|configurable|grouped|virtual|downloadable|bundle{|giftcard})

Xử lý bố trí tùy chỉnh

Dễ nhất: thêm một với một người quan sát

public function addMyOwnLayoutHandle(){
    Mage::app()->getLayout()->addHandle('my_own_handle');
}

hơn bạn có thể sử dụng trong bố cục XML

<layout>
    <my_own_handle>

2

Quy ước được thực hiện theo cách này bởi vì trước khi tải magento bố trí, trước tiên hãy tìm kiếm tay cầm với loại tay cầm này, để nó có thể tìm thấy mẫu từ bộ điều khiển. Nhưng bạn có thể tạo tay cầm tùy chỉnh của riêng mình


bộ điều khiển chức năng công cộngActionLayoutLoadB Before (Varien_Event_Observer $ observer) { / ** @var $ layout Mage_Core_Model_Layout * / $ layout = $ observer-> getEvent () -> getLayout ();

        $id = Mage::app()->getRequest()->getParam('id');

        /* or */

        if($ourCoolObject = Mage::registry('our_cool_object'))
        {
            $id = $ourCoolObject->getId();
        }

        $layout->getUpdate()->addHandle('OUR_COOL_OBJECT_'.$id);
    }

Nhân tiện, có 5 loại tay cầm được tóm tắt dưới đây và chúng ta đang nói về loại thứ tư ở đây.

default
STORE_bare_us
THEME_frontend_default_default
helloworld_index_index
customer_logged_out

Để biết thêm thông tin tham khảo

http://alanstorm.com/layouts_blocks_and_tem mẫu

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.