di sini adalah skrip kecil yang saya gunakan untuk memeriksa apakah ada model, blok atau pembantu yang ditimpa. Sayangnya itu tidak bekerja untuk pengendali dan memperhitungkan modul yang dinonaktifkan juga. Tapi dari sudut pandang saya ini bukan masalah besar.
Ide utamanya adalah mengurai file konfigurasi dan mencari <rewrite>
tag. Buat file php pada tingkat yang sama dengan index.php
. Sebut saja rewrites.php
, dengan konten ini:
<?php
$folders = array('app/code/local/', 'app/code/community/');//folders to parse
$configFiles = array();
foreach ($folders as $folder){
$files = glob($folder.'*/*/etc/config.xml');//get all config.xml files in the specified folder
$configFiles = array_merge($configFiles, $files);//merge with the rest of the config files
}
$rewrites = array();//list of all rewrites
foreach ($configFiles as $file){
$dom = new DOMDocument;
$dom->loadXML(file_get_contents($file));
$xpath = new DOMXPath($dom);
$path = '//rewrite/*';//search for tags named 'rewrite'
$text = $xpath->query($path);
foreach ($text as $rewriteElement){
$type = $rewriteElement->parentNode->parentNode->parentNode->tagName;//what is overwritten (model, block, helper)
$parent = $rewriteElement->parentNode->parentNode->tagName;//module identifier that is being rewritten (core, catalog, sales, ...)
$name = $rewriteElement->tagName;//element that is rewritten (layout, product, category, order)
foreach ($rewriteElement->childNodes as $element){
$rewrites[$type][$parent.'/'.$name][] = $element->textContent;//class that rewrites it
}
}
}
echo "<pre>";print_r($rewrites);
saat memanggilnya di browser Anda akan melihat sesuatu seperti ini:
Array
(
[models] => Array
(
[core/layout] => Array
(
[0] => Namespace_Module_Model_Core_Layout
[1] => Namespace1_Module1_Model_Core_Layout //if the second element is present it means there is a possible conflict
)
[...] => ....
)
[blocks] => ...
[helpers] => ...
)
ini berarti bahwa model 'core/layout'
tersebut ditimpa olehNamespace_Module_Model_Core_Layout
Jika Anda memiliki 2 atau lebih nilai dalam array ['core / layout'] itu berarti ada konflik.
Dan Anda dapat dengan mudah mengidentifikasi modul yang menimpa sesuatu berdasarkan Namespace
danModule
grep