He visto varios enfoques para obtener un particular helper
, y espero que alguien pueda explicar los pros/contras de cada enfoque. Por ejemplo, en template/checkout/cart/sidebar/default.phtml
, verá $this->helper('checkout')
y Mage::helper('checkout')
. ¿Hay una buena razón para estos dos métodos diferentes en la misma plantilla?¿Cuál es la diferencia entre los diferentes métodos * get helper * en Magento?
A continuación se presentan las diferentes maneras de conseguir un ayudante que pude encontrar en 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);
}
…
}
Creo que 'Mage :: helper()' es más útil, porque no en cada ayudante necesita acceder al objeto de disposición. Y de todos modos, puedes obtener el diseño con 'Mage :: app() -> getLayout()'. Por lo tanto, prefiero hacer menos llamadas de métodos. –