Hier ist ein kleines Skript, mit dem ich überprüfe, ob Modelle, Blöcke oder Helfer überschrieben wurden. Leider funktioniert es nicht für Steuerungen und berücksichtigt auch die deaktivierten Module. Aber aus meiner Sicht ist das keine große Sache.
Die Hauptidee ist, die Konfigurationsdateien zu analysieren und nach dem <rewrite>
Tag zu suchen . Erstellen Sie eine PHP-Datei auf der gleichen Ebene wie index.php
. Nennen wir es rewrites.php
mit diesem Inhalt:
<?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);
Wenn Sie es in einem Browser aufrufen, sollten Sie ungefähr Folgendes sehen:
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] => ...
)
Dies bedeutet, dass das Modell von 'core/layout'
überschrieben wirdNamespace_Module_Model_Core_Layout
Wenn das Array zwei oder mehr Werte enthält ['core / layout'], liegt ein Konflikt vor.
Und Sie können leicht das Modul identifizieren, das etwas basierend auf überschreibt Namespace
undModule
grep