Saya selalu memiliki tantangan dalam mengidentifikasi pegangan yang tepat untuk semuanya, jadi tolong tahan dengan saya di sini. Saya telah menjelajahi Google, SE, dan mencoba berbagai variasi, tanpa hasil. (Dan ya, saya telah menggunakan teknik di sini: Debugging Layout Loading , tetapi saya tidak yakin apa yang harus dilakukan dengan output.
Masalahnya: Kontroler memuat. Tata letak tidak.
Ketika saya mengunjungi halaman di localhost/magento/mymodule/ajax/cart
Ini bergema 'DI SINI!'. The var_dump dari getLayouts menghasilkan:
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"
}
Kode
Pengontrol khusus:
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();
}
}
File konfigurasi:
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>
File tata letak di
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>
Dan akhirnya, file templat di
app/design/frontend/theme/theme/template/mymodule/ajaxcart.phtml
<div style="border: 2px solid red">
Hello world
</div>
Mohon saran. Saya tahu saya kehilangan sesuatu yang jelas, tetapi seumur hidup saya tidak dapat menemukannya.
mycompany_mymodule
awalan di setiap pegangan? (mycompany_mymodule_ajax
misalnya).mycompany_mymodule
(pegangan pertama). Setiap tag xml yang memiliki awalanmymodule
tanpamycompany_
awalan adalah IMHO buruk. Anda harus mengubah semua nama tag untuk memiliki awalanmycompany_
sebelumnyamymodule
.Jawaban:
Untuk membuat pengembalian tata letak Ajax sederhana, coba perbarui kode Anda sebagai berikut:
Perbarui controller Anda untuk menggunakan loadLayout (false); ini akan menghentikan pegangan tata letak "default" yang ditambahkan.
Selanjutnya Anda dapat memperbarui tata letak xml Anda ke sederhana cukup tambahkan template yang Anda inginkan. Anda perlu yang berikut ini agar magento benar-benar menghasilkan apa pun
name="root" output="toHtml"
Untuk "respons sederhana" lengkap yang dapat diakses di bawah,
/ajaxtest/index/index
Anda dapat melakukan hal berikut:/app/etc/modules/Custom_Ajax.xml
/app/code/local/Custom/Ajax/etc/config.xml
/app/design/frontend/base/default/layout/custom_ajax.xml
/app/code/local/Custom/Ajax/controllers/IndexController.php
/app/design/frontend/base/default/template/custom_ajax.phtml
sumber
<block>
tag di file layout, tapi saya belajar banyak dari jawaban Anda. Terima kasih.