查找magento方法定义,特别是getOptionList()

查找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/目录,没有找到任何与愿望列表相关的

我一直在将Magento的wishlist模块重新设计到我自己的版本中,并成功地重新跟踪了它的每个部分是如何组合在一起的

在app/design/frontend/package/theme/template/wishlist/options_list中。phtml是wishlist显示产品选项和配置的方式。它调用
$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选项