查找magento方法定义,特别是getOptionList()
我一直在将Magento的wishlist模块重新设计到我自己的版本中,并成功地重新跟踪了它的每个部分是如何组合在一起的 在app/design/frontend/package/theme/template/wishlist/options_list中。phtml是wishlist显示产品选项和配置的方式。它调用查找magento方法定义,特别是getOptionList(),magento,magento-1.7,Magento,Magento 1.7,我一直在将Magento的wishlist模块重新设计到我自己的版本中,并成功地重新跟踪了它的每个部分是如何组合在一起的 在app/design/frontend/package/theme/template/wishlist/options_list中。phtml是wishlist显示产品选项和配置的方式。它调用$this->getOptionList(),返回和该产品关联的选项/配置数组。我很难找到这个方法的来源,所以我搜索了整个app/code/core/目录,没有找到任何与愿望列表相关的
$this->getOptionList()
,返回和该产品关联的选项/配置数组。我很难找到这个方法的来源,所以我搜索了整个app/code/core/目录,没有找到任何与愿望列表相关的内容
这种方法从何而来?我想在wishlist模块中的其他地方使用它,但它似乎是该特定类的专有项,但它没有在任何地方定义,因此我完全感到困惑
Magento 1.7 tl;dr:
setOptionList
是通过一个神奇的方法调用的,该方法生成一个名为option\u list
的属性。这可以在以后通过getOptionList
检索
首先,让我们从模板开始:
模板文件options\u list.phtml使用Mage\u Wishlist\u Block\u Customer\u Wishlist\u Item\u options
Block类。该类扩展了Mage\u Wishlist\u Block\u Abstract
,它扩展了Mage\u Catalog\u Block\u Product\u Abstract
。该类文件反过来扩展了Mage\u Core\u Block\u Abstract
,它最终是Varien\u Object
的一个子类
这些类都没有名为options\u list
的属性或方法。那么它是从哪里来的呢
这是Magento的ORM的一部分,它为对象中的某些数据提供了神奇的getter和setter。对象上的属性通过下划线分隔,并且多次与数据库表列名相关。许多对象与数据库表直接相关。例如,通过getBaseTaxAmount()
调用销售订单中的base\u tax\u amount
但是,选项列表如何填充?简单。在第178行的Mage\u Wishlist\u Block\u Customer\u Wishlist
中:
return $block->setTemplate($template)
->setOptionList($helper->getOptions($item))
->toHtml();
此行为是通过\uuu call
实现的,这是PHP中的内置功能,允许您在方法调用引用不存在的类方法时路由方法调用:
现在怎么办?我需要扩展这个强>
好消息,你可以。按照常规扩展或重写Mage\u Wishlist\u Block\u Customer\u Wishlist\u Item\u Options
类,并添加以下方法:
public function getOptionList()
{
$options = parent::getOptionList();
//your functionality here
return $options;
}
当通过选项_list.phtml模板调用时,您的新方法将被找到,并且您的方法将引用父级-我们知道父级不存在。这将返回到\u调用
,它将返回对象上的选项列表
属性不要忘记在结尾返回$options
补充阅读:
这可能有助于您了解Magento核心的Varien对象系统:
tl;dr:setOptionList
是通过一个神奇的方法调用的,该方法生成一个名为option\u list
的属性。这可以在以后通过getOptionList
检索
首先,让我们从模板开始:
模板文件options\u list.phtml使用Mage\u Wishlist\u Block\u Customer\u Wishlist\u Item\u options
Block类。该类扩展了Mage\u Wishlist\u Block\u Abstract
,它扩展了Mage\u Catalog\u Block\u Product\u Abstract
。该类文件反过来扩展了Mage\u Core\u Block\u Abstract
,它最终是Varien\u Object
的一个子类
这些类都没有名为options\u list
的属性或方法。那么它是从哪里来的呢
这是Magento的ORM的一部分,它为对象中的某些数据提供了神奇的getter和setter。对象上的属性通过下划线分隔,并且多次与数据库表列名相关。许多对象与数据库表直接相关。例如,通过getBaseTaxAmount()
调用销售订单中的base\u tax\u amount
但是,选项列表如何填充?简单。在第178行的Mage\u Wishlist\u Block\u Customer\u Wishlist
中:
return $block->setTemplate($template)
->setOptionList($helper->getOptions($item))
->toHtml();
此行为是通过\uuu call
实现的,这是PHP中的内置功能,允许您在方法调用引用不存在的类方法时路由方法调用:
现在怎么办?我需要扩展这个强>
好消息,你可以。按照常规扩展或重写Mage\u Wishlist\u Block\u Customer\u Wishlist\u Item\u Options
类,并添加以下方法:
public function getOptionList()
{
$options = parent::getOptionList();
//your functionality here
return $options;
}
当通过选项_list.phtml模板调用时,您的新方法将被找到,并且您的方法将引用父级-我们知道父级不存在。这将返回到\u调用
,它将返回对象上的选项列表
属性不要忘记在结尾返回$options
补充阅读:
这可能有助于您了解Magento核心的Varien对象系统:
哇,如果我能请你喝一杯的话。当我研究这个的时候,魔法方法确实出现了,但是我很难理解它们是如何工作的,更不用说在Magento了。所以,我感谢你给我一个我不知怎么理解的答案;p不过,我还有一个后续问题:我正试图从扩展Mage\u Wishlist\u Block\u Abstract
的自定义模块调用getOptionList。它会在那里工作吗,因为它可以追溯到Varien对象吗?它可能不工作,因为setOptionList
发生在$block
的上下文中,而不是抽象的,而是具体的类。如果您可以重写Mage\u Wishlist\u Block\u Customer\u Wishlist\u Item\u选项