다음은 모델, 블록 또는 도우미를 덮어 쓰는지 확인하는 데 사용하는 작은 스크립트입니다. 불행히도 컨트롤러에서는 작동하지 않으며 비활성화 된 모듈도 고려합니다. 그러나 내 관점에서 이것은 큰 문제가 아닙니다.
주요 아이디어는 구성 파일을 구문 분석하고 <rewrite>
태그를 찾는 것입니다 . 와 같은 수준에서 PHP 파일을 만듭니다 index.php
. rewrites.php
이 내용으로 호출 해 봅시다 :
<?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);
브라우저에서 호출하면 다음과 같이 표시됩니다.
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] => ...
)
이것은 모델 'core/layout'
이Namespace_Module_Model_Core_Layout
배열 [ 'core / layout']에 2 개 이상의 값이 있으면 충돌이 발생한 것입니다.
그리고 당신은 쉽게 덮어 쓰기 뭔가 기반으로하는 모듈을 식별 할 수 Namespace
및Module
grep