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

来源:互联网 发布:ps机做淘宝主图多 编辑:程序博客网 时间:2024/05/18 03:27

 /**

     * 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文件。