Magento getModel getSingleton等常用函数说明

来源:互联网 发布:淘宝化妆品模板 编辑:程序博客网 时间:2024/05/27 10:42

Magento getModel getSingleton等常用函数说明

 

Mage::getModel函数详解:

在通常的PHP初始化类对象的时候,使用以下方式进行生成。
$modelSales = new ModelSales();
但是在magento中初始化模型对象时候,使用以下的方式进行生成模型对象。
$product = Mage::getModel(’catalog/product’);
我们阅读magneto系统核心代码,发现在执行Mage::getModel(‘catalog/product’)函数时候完成了以下几个步骤:

 

  •  在系统配置中寻找节点。
  •  在节点中间寻找节点。
  •  在节点中寻找节点。

 

在class节点所包含的内容(假设定义为Mage_Catalog_Model)和data拼接成最终的类名称,经过magento类规范变成Mage_Catalog_Model_Product。
然后在Mage/Catalog/Model/Product.php文件中读取类定义并生成对象。
每一次执行的时候,都会重新生成一个模型对象。
最终返回一个Mage_Core_Model_Abstract子类对象。

Php代码  收藏代码
  1. /** 
  2. * Retrieve model object 
  3. * 
  4. * @link    Mage_Core_Model_Config::getModelInstance 
  5. * @param   string $modelClass 
  6. * @param   array $arguments 
  7. * @return  Mage_Core_Model_Abstract 
  8. */  
  9. public static function getModel($modelClass = ''$arguments = array())  
  10. {  
  11. return self::getConfig()->getModelInstance($modelClass$arguments);  
  12. }  
 

Mage::getSingleton函数详解:

getSingleton最终也是返回一个Mage_Core_Model_Abstract子类对象,但是其和getModel函数最大的区别是 永远只生成一个对象,并将生成的对象通过Mage::registry函数注册到magento系统当中,再次执行getSingleton时获取到上一 次生成的对象。
我们通过以下的系统源代码可以清楚的看到其和getModel函数的区别。

Php代码  收藏代码
  1. /** 
  2. * Retrieve model object singleton 
  3. * 
  4. * @param   string $modelClass 
  5. * @param   array $arguments 
  6. * @return  Mage_Core_Model_Abstract 
  7. */  
  8. public static function getSingleton($modelClass=''array $arguments=array())  
  9. {  
  10. $registryKey = '_singleton/'.$modelClass;  
  11. if (!self::registry($registryKey)) {  
  12. self::register($registryKey, self::getModel($modelClass$arguments));  
  13. }  
  14. return self::registry($registryKey);  
  15. }  
 

Mage::helper函数详解:

在通常的PHP初始化类对象的时候,使用以下方式进行生成。
$helper_sales = new HelperSales();
但是在magento中初始化类对象时候,使用以下的方式进行生成对象。
$helper_sales = Mage::helper(‘sales/data’);
我们阅读magneto系统核心代码,发现在执行Mage::helper(‘sales/data’)函数时候完成了以下几个步骤:

 

  •  在系统配置中寻找节点。
  •  在节点中间寻找节点。
  •  在节点中寻找节点。

 

在class节点所包含的内容(假设定义为Mage_Sales_Helper)和data拼接成最终的类名称,经过magento类规范变成Mage_Sales_Helper_Data。
然后在Mage/Sales/Helper/Data.php文件中读取类定义并生成对象。

Php代码  收藏代码
  1. /** 
  2. * Deprecated, use self::helper() 
  3. * 
  4. * @param string $type 
  5. * @return object 
  6. */  
  7. public static function helper($name)  
  8. {  
  9. if (strpos($name'/') === false) {  
  10. $name .= '/data';  
  11. }  
  12.   
  13. $registryKey = '_helper/' . $name;  
  14. if (!self::registry($registryKey)) {  
  15. $helperClass = self::getConfig()->getHelperClassName($name);  
  16. self::register($registryKeynew $helperClass);  
  17. }  
  18. return self::registry($registryKey);  
  19. }  
 

Mage::register函数详解:

在Mage类中使用$_registry存储生成的对象,这样生成的对象在全局都可以访问。Mage::register函数有两种格式:

 

  •  public static function register($key, $value, $graceful = false) 注册一个新的变量
  •  public static function registry($key) 通过$key获取已有变量
  •  public static function unregister($key) 注销一个变量

 

Magento源文件:

Php代码  收藏代码
  1. public static function register($key$value$graceful = false)  
  2. {  
  3. if (isset(self::$_registry[$key])) {  
  4. if ($graceful) {  
  5. return;  
  6. }  
  7. self::throwException('Mage registry key "'.$key.'" already exists');  
  8. }  
  9. self::$_registry[$key] = $value;  
  10. }  
  11. /** 
  12. * Retrieve a value from registry by a key 
  13. * 
  14. * @param string $key 
  15. * @return mixed 
  16. */  
  17. public static function registry($key)  
  18. {  
  19. if (isset(self::$_registry[$key])) {  
  20. return self::$_registry[$key];  
  21. }  
  22. return null;  
  23. }  
 

Mage::getBaseUrl以及其他路径获取函数详解:

获取当前店铺的路径。默认参数是Mage_Core_Model_Store::URL_TYPE_LINK,返回http://example.com/index.php/。
还可以使用以下几个参数:

Php代码  收藏代码
  1. Mage_Core_Model_Store::URL_TYPE_LINK link http://example.com/index.php/  
  2. Mage_Core_Model_Store::URL_TYPE_DIRECT_LINK direct_link http://example.com/index.php/  
  3. Mage_Core_Model_Store::URL_TYPE_WEB web http://example.com/  
  4. Mage_Core_Model_Store::URL_TYPE_SKIN skin http://example.com/skin/  
  5. Mage_Core_Model_Store::URL_TYPE_JS js http://example.com/js/  
  6. Mage_Core_Model_Store::URL_TYPE_MEDIA media http://example.com/media/  
 

当然,也可以使用简短的代码来获取js。Mage::getBaseUrl(‘js’);

Php代码  收藏代码
  1. /** 
  2. * Get base URL path by type 
  3. * 
  4. * @param string $type 
  5. * @return string 
  6. */  
  7. public static function getBaseUrl($type = Mage_Core_Model_Store::URL_TYPE_LINK, $secure = null)  
  8. {  
  9. return self::app()->getStore()->getBaseUrl($type$secure);  
  10. }  
 

Mage_Core_Helper_Url类调用路径

函数位于app/code/core/Mage/Core/Model/Url.php当中。
1.获取当前路径Mage::help(‘core/url’)->getCurrentUrl();

Php代码  收藏代码
  1. /** 
  2. * Retrieve current url 
  3. * 
  4. * @return string 
  5. */  
  6. public function getCurrentUrl()  
  7. {  
  8. return $this->_getUrl('*/*/*'array('_current' => true, '_use_rewrite' => true));  
 

2.获取主页路径 Mage::help(‘core/url’)->getHomeUrl();

Php代码  收藏代码
  1. /** 
  2. * Retrieve homepage url 
  3. * 
  4. * @return string 
  5. */  
  6. public function getHomeUrl()  
  7. {  
  8. return Mage::getBaseUrl();  
  9. }  
 

在Block和Phtml文件中,可以使用getUrl函数直接调用路径,一般使用在Block文件中。该函数定义在app/code/core/Mage/Core/Block/Abstract.php文件中。
如$this->getUrl(‘customer/account/login’);表示用户登录页面。

Php代码  收藏代码
  1. /** 
  2. * Generate url by route and parameters 
  3. * 
  4. * @param   string $route 
  5. * @param   array $params 
  6. * @return  string 
  7. */  
  8. public function getUrl($route=''$params=array())  
  9. {  
  10. return $this->_getUrlModel()->getUrl($route$params);//该函数调用Mage::help('core/url')->getUrl($route, $params);来进行处理,效果一样。  
  11. }  
 

如果调用skin中某个文件,可以直接使用getSkinUrl函数,一般用在Phtml文件中。如$this->getSkinUrl(‘images/calendar.gif’);表示获取指定模板中的images/calendar.gif文件。

Php代码  收藏代码
  1. /** 
  2. * Retrieve url of skins file 
  3. * 
  4. * @param   string $file path to file in skin 
  5. * @param   array $params 
  6. * @return  string 
  7. */  
  8. public function getSkinUrl($file=null, array $params=array())  
  9. {  
  10. return Mage::getDesign()->getSkinUrl($file$params);  
  11. }  
 

getData函数:
可以直接获取对象中的某个值,如获取产品的sku值,可以使用$product->getData(‘sku’);,也可以使用$product->getSku();
在没有参数的情况下,getData函数会返回一个数组,你可以print_r($Product->getData()); 讲所有数据打印出来。也可以使用$arrProduct = $Product->getData(); echo $arrProduct->sku;

 

来源:http://www.ahuasheng.com/magento-getmodel-getsingleton-function.html

0 0
原创粉丝点击