Đây là một đoạn script nhỏ mà tôi sử dụng để kiểm tra xem có bất kỳ mô hình, khối hoặc trình trợ giúp nào được ghi đè không. Thật không may, nó không hoạt động cho các bộ điều khiển và nó cũng tính đến các mô-đun bị vô hiệu hóa. Nhưng theo quan điểm của tôi thì đây không phải là vấn đề lớn.
Ý tưởng chính là phân tích các tệp cấu hình và tìm kiếm <rewrite>
thẻ. Tạo một tập tin php ở cùng cấp độ với index.php
. Hãy gọi nó rewrites.php
, với nội dung này:
<?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);
Khi gọi nó trong trình duyệt, bạn sẽ thấy một cái gì đó như thế này:
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] => ...
)
điều này có nghĩa là mô hình 'core/layout'
được ghi đè bởiNamespace_Module_Model_Core_Layout
Nếu bạn có 2 hoặc nhiều giá trị trong mảng ['core / layout'], điều đó có nghĩa là có xung đột.
Và bạn có thể dễ dàng xác định mô-đun ghi đè lên một cái gì đó dựa trên Namespace
vàModule
grep