我見過幾種不同的方法來獲得一個特定的helper
,我希望有人可以解釋每種方法的優缺點。例如,在template/checkout/cart/sidebar/default.phtml
中,您會看到$this->helper('checkout')
和Mage::helper('checkout')
。這兩種不同的方法在同一個模板中是否有很好的理由?Magento中不同的* get helper *方法有什麼區別?
下面都面臨一個輔助方式的不同,我能找到的Magento:
abstract class Mage_Core_Block_Abstract extends Varien_Object
{
…
/**
* Return block helper
*
* @param string $type
* @return Mage_Core_Block_Abstract
*/
public function getHelper($type)
{
return $this->getLayout()->getBlockSingleton($type);
}
/**
* Returns helper object
*
* @param string $name
* @return Mage_Core_Block_Abstract
*/
public function helper($name)
{
if ($this->getLayout()) {
return $this->getLayout()->helper($name);
}
return Mage::helper($name);
}
…
}
class Mage_Core_Model_Layout extends Varien_Simplexml_Config
{
…
/**
* Enter description here...
*
* @param string $type
* @return Mage_Core_Helper_Abstract
*/
public function getBlockSingleton($type)
{
if (!isset($this->_helpers[$type])) {
$className = Mage::getConfig()->getBlockClassName($type);
if (!$className) {
Mage::throwException(Mage::helper('core')->__('Invalid block type: %s', $type));
}
$helper = new $className();
if ($helper) {
if ($helper instanceof Mage_Core_Block_Abstract) {
$helper->setLayout($this);
}
$this->_helpers[$type] = $helper;
}
}
return $this->_helpers[$type];
}
/**
* Retrieve helper object
*
* @param string $name
* @return Mage_Core_Helper_Abstract
*/
public function helper($name)
{
$helper = Mage::helper($name);
if (!$helper) {
return false;
}
return $helper->setLayout($this);
}
…
}
我覺得'Mage :: helper()'更有用,因爲不是每個幫助者都需要訪問佈局對象。無論如何,你可以通過'Mage :: app() - > getLayout()'獲得佈局。所以我寧願減少方法的調用。 – 2014-11-05 10:26:03