2011-1-4----mage_core_model_layout--construct方法--个人分析

本文介绍了Magento中布局构造的方法,包括构造函数的初始化过程、获取模型类名的方式及按组别检索类名的功能实现。通过解析核心代码,展示了如何加载XML布局文件,并详细解释了关键函数的作用。

/**

* Class constructor

*

* @param array $data

*/

public function __construct($data=array())

{

$this->_elementClass = Mage::getConfig()->getModelClassName('core/layout_element');

$this->setXml(simplexml_load_string('<layout/>', $this->_elementClass));

$this->_update = Mage::getModel('core/layout_update');

parent::__construct($data);

}

1

$this->_elementClass = Mage::getConfig()->getModelClassName('core/layout_element');

/**

* Retrieve modele class name

*

* @param sting $modelClass

* @return string

*/

public function getModelClassName($modelClass)

{

$modelClass = trim($modelClass);

if (strpos($modelClass, '/')===false) {

return $modelClass;

}

return $this->getGroupedClassName('model', $modelClass);

}

1.1

//去掉空格

function trim ($str, $charlist = null) {}

1.2

//Find position of first occurrence of a string

function strpos ($haystack, $needle, $offset = null) {}

1.3

$this->getGroupedClassName('model', $modelClass);

/**

* Retrieve class name by class group

*

* @param string $groupType currently supported model, block, helper

* @param string $classId slash separated class identifier, ex. group/class

* @param string $groupRootNode optional config path for group config

* @return string

*/

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->getNode($groupRootNode.'/'.$group);

$config = $this->_xml->global->{$groupType.'s'}->{$group};

if (isset($config->rewrite->$class)) {

$className = (string)$config->rewrite->$class;

} else {

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;

}

2

//加载xml

parent::__construct($data);

//总体作用是加载xml文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值