Không thể tải bố cục ajax tùy chỉnh để tải


8

Tôi luôn có những thách thức trong việc xác định tay cầm thích hợp cho mọi thứ, vì vậy xin vui lòng chịu đựng ở đây. Tôi đã truy quét Google, SE và thử vô số biến thể, không có may mắn. (Và vâng, tôi đã sử dụng các kỹ thuật ở đây: Đang tải gỡ lỗi Bố cục , nhưng không chắc chắn phải làm gì với đầu ra.

Vấn đề: Bộ điều khiển tải. Bố cục không.

Khi tôi truy cập trang tại localhost/magento/mymodule/ajax/cart

Nó vang lên "TẠI ĐÂY!". Var_dump của getLayouts tạo ra:

array(4) { 
    [0]=> string(17) "mymodule_ajax_cart" 
    [1]=> string(13) "STORE_default" 
    [2]=> string(24) "THEME_frontend_theme_theme" 
    [3]=> string(19) "customer_logged_out" 
}

Mật mã

Bộ điều khiển tùy chỉnh:
app/code/local/mycompany/mymodule/controllers/AjaxController.php

class Mycompany_Mymodule_AjaxController extends Mage_Core_Controller_Front_Action
{
    public function cartAction() {
        echo 'HERE!';
        $this->loadLayout('mymodule_ajax_cart');
        var_dump($this->getLayout()->getUpdate()->getHandles());
        $this->renderLayout();
    }
}

Tập tin cấu hình:
app/code/local/mycompany/mymodule/etc/config.xml

<config>
    <modules>
        <mycompany_mymodule>
            <version>1.0.0</version>
        </mycompany_mymodule>
    </modules>
    <global>
        <helpers>
            <mymodule>  
                    <class>Mycompany_Mymodule_Helper</class>
                </mymodule>
        </helpers>
    </global>
    <frontend>
        <routers>
            <mymodule>
                <use>standard</use>
                <args>
                    <module>Mycompany_Mymodule</module>
                    <frontName>mymodule</frontName>
                </args>
            </mymodule>
        </routers>
        <layout>
            <updates>
                <mymodule>
                    <file>mymodule.xml</file>
                </mymodule>
            </updates>
        </layout>
    </frontend>
</config>

Bố cục tập tin tại
app/design/frontent/base/default/layout/mymodule.xml

<?xml version="1.0"?>
    <layout>
        <mymodule_ajax>
            <block type="core/text_list" name="content" output="toHtml" as="content" />
        </mymodule_ajax>
        <mymodule_ajax_cart>
            <reference name="content">
                <block type="core/template" template="mymodule/ajaxcart.phtml" />
            </reference>
        </mymodule_ajax_cart>
    </layout>

Và cuối cùng, tệp mẫu tại
app/design/frontend/theme/theme/template/mymodule/ajaxcart.phtml

<div style="border: 2px solid red">
    Hello world
</div>

Xin tư vấn. Tôi biết tôi đang thiếu một cái gì đó rõ ràng, nhưng không thể cho cuộc sống của tôi tìm thấy nó.


1
Bạn không nên sử dụng mycompany_mymoduletiền tố trong mỗi xử lý? ( mycompany_mymodule_ajaxví dụ).
Niloct

@Nicolt - cảm ơn vì nhận xét. Điều này rất có thể là vấn đề - khi bạn nói "Mỗi tay cầm" - cụ thể bạn đang thấy nó không được sử dụng ở đâu? Bạn đang đề cập đến tập tin xml bố trí? Các hướng dẫn / bài viết mà tôi đã đọc không làm rõ những cái đó cần được đặt tên như thế nào, do đó các bài viết tôi đã đăng.
Random_user_name

@Niloct - chỉ cần thu hút sự chú ý của bạn, tôi đã viết sai chính tả của bạn trước đó. Xin vui lòng xem nhận xét của tôi ở trên.
Random_user_name

Vâng, trước tiên bạn khai báo mô-đun với mycompany_mymodule(xử lý đầu tiên). Mỗi thẻ xml có tiền tố mymodulekhông có mycompany_tiền tố là IMHO xấu. Bạn nên thay đổi tất cả các tên thẻ để có tiền tố mycompany_trước mymodule.
Niloct

Câu trả lời:


18

Để tạo một bố cục Ajax đơn giản, hãy thử cập nhật mã của bạn như sau:

Cập nhật bộ điều khiển của bạn để sử dụng loadLayout (false); điều này sẽ dừng xử lý bố cục "mặc định" được thêm vào.

$this->loadLayout(false);
$this->renderLayout();

Tiếp theo, bạn có thể cập nhật bố cục xml của mình thành đơn giản chỉ cần thêm mẫu bạn muốn. Bạn sẽ cần những điều sau đây để magento thực sự xuất ra bất cứ thứ gìname="root" output="toHtml"

<?xml version="1.0"?>
<layout>
    <mymodule_ajax_cart>
        <block type="core/template" name="root" output="toHtml" template="mymodule/ajaxcart.phtml" />
    </mymodule_ajax_cart>
</layout>

Để có một "phản hồi đơn giản" hoàn chỉnh có thể truy cập được, /ajaxtest/index/indexbạn có thể làm như sau:

/app/etc/modules/Custom_Ajax.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Custom_Ajax>
            <active>true</active>
            <codePool>local</codePool>
        </Custom_Ajax>
    </modules>
</config>

/app/code/local/Custom/Ajax/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Custom_Ajax>
            <version>0.0.1</version>
        </Custom_Ajax>
    </modules>
    <frontend>
        <layout>
            <updates>
                <custom_ajax>
                    <file>custom_ajax.xml</file>
                </custom_ajax>
            </updates>
        </layout>
        <routers>
            <ajaxtest>
                <use>standard</use>
                <args>
                    <module>Custom_Ajax</module>
                    <frontName>ajaxtest</frontName>
                </args>
            </ajaxtest>
        </routers>
    </frontend>
</config>

/app/design/frontend/base/default/layout/custom_ajax.xml

<?xml version="1.0"?>
<layout>
    <ajaxtest_index_index>
        <block type="core/template" name="root" output="toHtml" template="custom_ajax.phtml" />
    </ajaxtest_index_index>
</layout>

/app/code/local/Custom/Ajax/controllers/IndexControll.php

<?php
class Custom_Ajax_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        $this->loadLayout(false);
        $this->renderLayout();
    }
}

/app/design/frontend/base/default/template/custom_ajax.phtml

Hello world!

1
Đã được chấp nhận. Đẹp - chính là các mod cho <block>thẻ trong tệp bố cục, nhưng tôi đã học được rất nhiều từ câu trả lời của bạn. Cảm ơn bạn.
Random_user_name

Ngoài ra, giá trị thẻ frontName được sử dụng trong thẻ xử lý bố cục, tôi không biết về điều đó. Rất tốt.
Niloct
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.