Với sự giúp đỡ của David trên câu trả lời, Hy vọng David sẽ không phiền.
Tôi đang cố gắng giải thích chi tiết hơn
bắt đầu với Mage.php và đi đến chức năng trợ giúp
public static function helper($name)
{
$registryKey = '_helper/' . $name;
if (!self::registry($registryKey)) {
$helperClass = self::getConfig()->getHelperClassName($name);
self::register($registryKey, new $helperClass);
}
return self::registry($registryKey);
}
a) $registryKey = '_helper/' . $name;
kết quả: $registryKey = _helper/sales
b) check now registry key exits ot not,if not then set a registry
biến
if (!self::registry($registryKey)) {
nó trở thành true when system is first times
cho một phiên:
c) $helperClass = self::getConfig()->getHelperClassName($name);
có nghĩa là
$ name = sales gửi đến Mage_Core_Model_Config chức năng lớp getHelperClassName để nhận lớp người trợ giúp gửi param
d) Sau đó thiết lập lớp name is registry variable
e
self::register($registryKey, new $helperClass);
Kết quả: may be proper class name Mage_Sales_Helper_Data
Bây giờ hãy chuyển đến hàm getHelperClassName của lớp Mage_Core_Model_Config
a) Hàm này Lấy chuỗi tên của trình trợ giúp $ chuỗi tên
public function getHelperClassName($helperName)
{
if (strpos($helperName, '/') === false) {
$helperName .= '/data';
}
return $this->getGroupedClassName('helper', $helperName);
}
giải thích về chức năng:
$helperName is sales
Hợp lý:
if (strpos($helperName, '/') === false) {
trở thành true as $helperName=sales then set $helperName=sales/data
b) return $this->getGroupedClassName('helper', $helperName);
Chi tiết:
call function getGroupedClassName with params 'helper','sales/data'
and getGroupedClassName return class name of helper class
Bây giờ chức năng goto getGroupedClassName('helper','sales/data',null)
public function getGroupedClassName($groupType, $classId, $groupRootNode=null)
{
if (empty($groupRootNode)) {
$groupRootNode = 'global/'.$groupType.'s';
}
$classArr = explode('/', trim($classId));
$group = $classArr[0];
$class = !empty($classArr[1]) ? $classArr[1] : null;
if (isset($this->_classNameCache[$groupRootNode][$group][$class])) {
return $this->_classNameCache[$groupRootNode][$group][$class];
}
$config = $this->_xml->global->{$groupType.'s'}->{$group};
// First - check maybe the entity class was rewritten
$className = null;
if (isset($config->rewrite->$class)) {
$className = (string)$config->rewrite->$class;
} else {
/**
* Backwards compatibility for pre-MMDB extensions.
* In MMDB release resource nodes <..._mysql4> were renamed to <..._resource>. So <deprecatedNode> is left
* to keep name of previously used nodes, that still may be used by non-updated extensions.
*/
if ($config->deprecatedNode) {
$deprecatedNode = $config->deprecatedNode;
$configOld = $this->_xml->global->{$groupType.'s'}->$deprecatedNode;
if (isset($configOld->rewrite->$class)) {
$className = (string) $configOld->rewrite->$class;
}
}
}
// Second - if entity is not rewritten then use class prefix to form class name
if (empty($className)) {
if (!empty($config)) {
$className = $config->getClassName();
}
if (empty($className)) {
$className = 'mage_'.$group.'_'.$groupType;
}
if (!empty($class)) {
$className .= '_'.$class;
}
$className = uc_words($className);
}
$this->_classNameCache[$groupRootNode][$group][$class] = $className;
return $className;
}
** nhiệm vụ chức năng này **
retrieve class name by class group
param string $groupType currently supported helper
param string $classId slash separated class identifier, ex. group/class
param string $groupRootNode optional config path for group config
return string
a)$classArr = explode('/', trim($classId));
kết quả:explode helper name(sales/data by /) for getting classs name in array $classArr
b)$class = !empty($classArr[1]) ? $classArr[1] : null;
Kết quả:as $classArr[1] is data then value of $class is data
c) $config = $this->_xml->global->{$groupType.'s'}->{$group};
chi tiết:get config setting then $config = $this->_xml->global->helpers->sales;
d)$className = null;
Chi tiết :set $className null
.
e) check rewrite class exits in config.xml files, check if class is rewrite then
you can easly get
mã: if (isset ($ config-> viết lại -> $ class)) {result:if (isset($config->rewrite->data)) {
f)for default magento ,it false to goto else
bỏ qua if ($ config-> deprecatedNode) {
as deprecatedNode is for model($grouptype) and ,it only used for _mysql4
g) if (empty($className)) {
kết quả:
if sales helper not rewrite then if (empty($className)) { becomes true
h)if (!empty($config)) {
Kết quả
:false
if (!empty($config)) { becomes false;`
i) if (empty($className)) {
Kết quả:as $className is till
null then this code is true
j) tạo kết quả lớp học $className = 'mage_'.$group.'_'.$groupType;
:
$group=sales
$groupTyp=helper
$className = 'mage_sales_helper';
k)
if (!empty($class)) {
$className .= '_'.$class;
}
kết quả:
as $class = data the this condition is true and $className = 'mage_sales_helper_data';
l) ** thực hiện bằng chữ in hoa $className = uc_words($className)
; Bây giờ trả về lớp trả về $ className; đó là Mage_Sales_Helper_Data **
Nhờ vào
Cách cư xử của David và Rajeev K Tomy