私は特定のhelper
を得るためのいくつかの異なるアプローチを見てきました。私は、誰かがそれぞれのアプローチの長所/短所を説明できることを望んでいます。たとえば、template/checkout/cart/sidebar/default.phtml
には、$this->helper('checkout')
とMage::helper('checkout')
の両方が表示されます。同じテンプレートにこれらの2つの異なるメソッドがあるのは良い理由はありますか?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()'でレイアウトを得ることができます。だから私はメソッドの呼び出しを少なくすることを好みます。 –