TL; DR: apakah ada cara saya bisa men-debug memuat tata letak? Karena saya percaya tata letak satu modul bertentangan dengan yang lain.
Terkait dengan pertanyaan sebelumnya yang saya buat: Cara membuat tata letak modul untuk ditampilkan pada semua tema
Saya telah berhasil memuat modul saya pada lingkungan pengujian lokal saya (alias PC pengembangan saya), diuji beralih antara 3 tema yang berbeda dan itu ok. Kemudian saya memperbarui modul pada lingkungan pengujian atau "pra-produksi" yang kami miliki, di mana ada banyak modul yang berbeda, beberapa kepemilikan lain dibuat oleh kami. Pada lingkungan ini, modul tidak menunjukkan apa yang dibutuhkan di halaman depan produk. Setelah beberapa pengujian, saya akhirnya sampai pada kesimpulan bahwa masalahnya harus pada proses load layout.
Jadi, adakah cara saya bisa men-debug memuat tata letak, bagaimana modul yang berbeda mengganti atau menambahkan blok mereka sendiri? Maksud saya adalah saya percaya setidaknya ada satu modul yang harus bertentangan dengan modul saya. Dan karena kami memiliki begitu banyak modul, saya mencari pendekatan yang berbeda untuk menonaktifkan modul satu per satu dan melihat mana yang bermasalah.
File config.xml saya adalah:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Dts_Banners>
<version>0.1.0</version>
</Dts_Banners>
</modules>
<global>
<blocks>
<banners>
<class>Dts_Banners_Block</class>
</banners>
</blocks>
....
<events>
<controller_action_layout_load_before>
<observers>
<attributesethandle>
<class>Dts_Banners_Model_Observer</class>
<method>addAttributeSetHandle</method>
</attributesethandle>
</observers>
</controller_action_layout_load_before>
</events>
</global>
....
</config>
File Observer saya:
<?php
class Dts_Banners_Model_Observer
{
/**
* Checks if the search text on the list of active campaigns (dts_banners_admin table) has some of the comma separated text on the product name
* If text found, add a layout handle PRODUCT_CAMPAIGN_BANNER after PRODUCT_TYPE_<product_type_id> handle
* This handle is handled on the banners.xml layout file that triggers the use of the Front.php frontend block
*
* Event: controller_action_layout_load_before
*
* @param Varien_Event_Observer $observer
*/
public function addAttributeSetHandle(Varien_Event_Observer $observer) {
$product = Mage::registry('current_product');
if (!($product instanceof Mage_Catalog_Model_Product)) return;
....
....
}
Ini adalah file layout saya:
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">
<default>
<reference name="content">
<block type="banners/front" name="banners.front" as="banners_front" template="banners/product.phtml" before="-"/>
</reference>
</default>
</layout>
Sebelumnya punya yang sedikit berbeda di mana bukannya <default></default>
aku <Product_Campaign_Banner></Product_Campaign_Banner>
. Itu juga berhasil.
File product.phtml saya:
<div class="visual">
<?php echo $this->showCampaign(); ?>
</div>
The product.phtml
file tidak dimuat dan oleh karena itu showCampaign
tidak dijalankan dan ada di mana semua HTML yang dibutuhkan dibuat.
Jawaban:
Anda bisa mencatat tata letak kompilasi XML arahan yang digunakan untuk menghasilkan blok. Buat pengamat aktif
controller_action_layout_generate_blocks_before
, dan dalam metode pengamat catat pembaruan XML dari objek tata letak yang diangkut:Output akan mirip dengan:
sumber
controller_action_layout_generate_blocks_before
" - Ini adalah pertanyaan M1.Anda dapat mengambil semua pegangan tata letak di controller Anda dengan melakukan ini:
Atau di mana saja (selama tata letak telah diinisialisasi) menggunakan ini:
Mungkin itu akan membantu Anda melakukan debug.
EDIT
Sudahkah Anda mengatur config.xml Anda untuk menentukan kelas blok?
sumber
core/template
? Ini hanya untuk membatalkan kesalahan dalam pengaturan modul Anda.Saya menggunakan PhpStorm dengan Magicento dan jadi saya pikir saya akan menyesuaikan @benmark jawaban yang bagus untuk penggunaan saya.
Di PhpStorm, buka
app/code/core/Mage/Core/Controller/Varien/Action.php
dan masukkan break point dalam metodegenerateLayoutBlocks()
. Saya pikir intinya adalah memasukkannya ke mana saja sebelumnya$this->getLayout()->generateBlocks();
. Saya taruh di baris sebelumnya.Setelah Anda memasukkan breakpoint, ditunjukkan oleh titik merah di sebelah kiri dengan nomor baris, Anda dapat mengklik kanan untuk menyesuaikan perilaku. Klik "Lainnya" di bagian bawah untuk membuka semua opsi.
Setelah Anda membukanya, Anda mencentang kotak "Log message to console" (opsional) dan "Log dievaluasi ekspresi" (di mana keajaiban terjadi). Kemudian salin tempel adaptasi kode benmark ini ke kotak teks. Satu-satunya hal yang saya ubah adalah mengeja
$request
variabel sepertiMage::app()->getRequest()
setiap waktu, dan mengubah$o
variabel menjadi$this
(b / c kita tidak dalam konteks pengamat di sini).Jadi sekarang terlihat seperti ini:
Setelah Anda menjalankan program (menggunakan xdebug atau zend debugger) Anda akan berhenti di breakpoint dan melihatnya di log:
Tampaknya ada batas ukuran untuk entri log yang mungkin ditentukan oleh
idea.cycle.buffer.size
properti dalamidea.properties
file untuk PhpStorm, menurut ini . Anda dapat mengubahnya, atau cukup klik kanan pada jendela kode dan pilih "Evaluate Expression" dari menu dropdown, dan salin dan tempel kode untuk mengeksekusi di sana dan Anda akan mendapatkan hasil lengkap.Dalam pop-up "Evaluasi Ekspresi", Anda dapat mengklik kanan (Windows) pada hasilnya dan memilih "Salin Nilai" untuk mendapatkan seluruh output dan menempelkannya di tempat lain untuk analisis.
sumber
Kami menggunakan ekstensi Commerce Storm dari Alan Storm , dan merasa sangat diperlukan untuk men-debug berbagai hal di Magento, termasuk masalah tata letak. Untuk tata letak Anda dapat melihat pegangan tata letak mana yang aktif pada setiap halaman, dan konfigurasi tata letak xml mana yang diterapkan pada halaman tersebut.
Ini tidak gratis, tetapi akan menghemat banyak waktu men-debug hal-hal semacam ini.
Catatan: Saya tidak berafiliasi dengan Alan Storm atau Commerce Bug dengan cara apa pun, hanya pelanggan yang bahagia.
sumber
Thanx Ben Marks! Ini adalah versi saya dari layout logger xml yang Anda sebutkan.
Ini file yang sangat panjang jadi saya membuat XML darinya ... :-) Anda dapat membuka dengan editor biasa ....
Dan config.xml saya terlihat seperti ini di simpul:
Sekarang, saya harap desainer saya dapat menjelaskan semua ini ... \ o /
sumber
Anda dapat menambahkan ini ke tindakan pengontrol Anda. Ini akan menampilkan pegangan dengan cara yang lebih rapi daripada var_dump.
sumber