Я видел несколько разных подходов к получению определенного helper
, и я надеюсь, что кто-то сможет объяснить плюсы и минусы каждого подхода. Например, в template/checkout/cart/sidebar/default.phtml
вы увидите как $this->helper('checkout')
, так и Mage::helper('checkout')
. Есть ли веская причина для этих двух разных методов в одном шаблоне?В чем разница между различными методами * get helper * в Magento?
Ниже приведены все различные способы получения помощника я мог бы найти в 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()'. Поэтому я предпочитаю делать меньше вызовов методов. –