Magento编程和类利用

时间:2012-11-22 09:14:34

标签: php class magento

我参与了在大学休息期间学习Magento的项目,虽然我已经想出如何轻松地创建主题,但我在使用Magento中的类结构时遇到了麻烦。

对于我想要做的事情,我想计算一个月初至今的销售数字。 关闭仪表板我希望找到创建$this->getTotals()的位置,以便将此图添加到数组中。

作为一个起点,我可以再将我引导到Mage文件,这个文件是创建的,或者甚至可能是解释Magento编程结构的资源,它既不是那么基本,也不是那么先进,也不可能。 ? (这些天似乎是一项艰巨的任务,除非你知道在哪里看)

3 个答案:

答案 0 :(得分:2)

Magento(具体为块和模型)在PHP中充分利用了重载,因此grep通常会产生分散注意力的结果或者根本不会产生任何结果; REF。 Varien_Object::__call() [link]

Magento的视图是从对象实例渲染的 - 块类,它们通常位于模块目录中的 Block 文件夹中,例如 app / code / core / Mage / Adminhtml / Block / - 和(可选)模板,可在 app / design / {area} / {package} / {theme} /下找到模板/

调试视图时,在模板文件中准备好使用get_class($this)调用通常会显示所涉及的类。当然,这意味着您需要找到模板。在前端,您可以使用template path hints - 并且可以在管理员中使用这几行XML - 但我建议使用Fabrizio BrancaAdvanced Template Hints以便于使用以及它包装非模板块的能力。

答案 1 :(得分:1)

Magentos结构非常令人困惑,我会通读this documentation,因为它有助于了解所有内容的位置。

现在,至于找到具体的方法,我发现最好的方法是使用grep.

在您的示例中,您想要找到getTotals,我运行以下grep:

grep -RTi 'function getTotals(' ./app/

它返回:

./app/code/core/Mage/Sales/Block/Order/Totals.php      :    public function getTotals($area=null)
./app/code/core/Mage/Sales/Model/Quote.php     :    public function getTotals()
./app/code/core/Mage/Sales/Model/Resource/Sale/Collection.php  :    public function getTotals()
./app/code/core/Mage/Sales/Model/Entity/Sale/Collection.php    :    public function getTotals()
./app/code/core/Mage/Sales/Model/Quote/Address.php     :    public function getTotals()
./app/code/core/Mage/Checkout/Block/Onepage/Review/Info.php    :    public function getTotals()
./app/code/core/Mage/Checkout/Block/Cart/Abstract.php  :    public function getTotals()
./app/code/core/Mage/Checkout/Block/Cart/Totals.php    :    public function getTotals()
./app/code/core/Mage/Paypal/Block/Express/Review/Details.php   :    public function getTotals()
./app/code/core/Mage/Paypal/Model/Cart.php     :    public function getTotals($mergeDiscount = false)
./app/code/core/Mage/Adminhtml/Block/Sales/Order/Create/Totals.php     :    public function getTotals()
./app/code/core/Mage/Adminhtml/Block/Sales/Order/Totalbar.php  :    protected function getTotals()
./app/code/core/Mage/Adminhtml/Block/Customer/Edit/Tab/View/Sales.php  :    public function getTotals()
./app/code/core/Mage/Adminhtml/Block/Widget/Grid.php   :    public function getTotals()
./app/code/core/Mage/Adminhtml/Block/Dashboard/Bar.php :    protected function getTotals()

哦,亲爱的,这似乎是一个流行的方法名称,但至少现在我们可以缩小哪一个是必需的。所以我猜它会在销售部分,因为你似乎在谈论销售,所以我们最终得到一个更易于管理的清单。

./app/code/core/Mage/Sales/Block/Order/Totals.php      :    public function getTotals($area=null)
./app/code/core/Mage/Sales/Model/Quote.php     :    public function getTotals()
./app/code/core/Mage/Sales/Model/Resource/Sale/Collection.php  :    public function getTotals()
./app/code/core/Mage/Sales/Model/Entity/Sale/Collection.php    :    public function getTotals()
./app/code/core/Mage/Sales/Model/Quote/Address.php     :    public function getTotals()

快乐狩猎。

答案 2 :(得分:1)

如果你正在查看.phtml文件,首先要做的是意识到每个.phtml文件都在某些Block类的某个实例的上下文中工作。因此,首先通过查看注释或打印/ echoing / var_dumping /等get_class($this)返回的值来找出您所在的块类。

然后你可以在app / code目录中找到块的类声明,即grep -irn 'class Mage_Catalog_Block_Product_List_Toolbar' app/code/core

请注意,无论您是否使用* nix,如果您使用的是IDE,您可以通过站在PHP文档注释(例如找到的文档)上告诉您的IDE传送到类文件/声明在核心的.phtml文件中,即@see Mage_Catalog_Block_Product_List_Toolbar并按下IDE上的任何快捷触发器。

BTW,关于 getter 方法的说明:

几乎所有的Magento类都继承自 Varien_Object 类,它实现了 __ call() - 如果你还记得的话,在调用对象上不可访问的方法时会触发它 - 这样当你在一个对象上调用$this->getBananas()时,Magento不会抛出致命错误,而是会检查对象的内部$data数组是否包含一个键“香蕉” ,并返回其值,如果不存在则返回NULL。

这样做的含义是,有时你会看到像$this->getSomething()这样的调用,然后你会查找寻找function getSomething()的代码,但是你找不到它,因为它没有被声明在任何地方,它只是利用 Varien_Object 的魔术吸气剂行为的模板。

但是,轻击Magento来源非常有用。另外,如果您使用getter函数并且找到它的声明,那么您就知道代码只是访问数据属性,这也是非常有用的信息。