我参与了在大学休息期间学习Magento的项目,虽然我已经想出如何轻松地创建主题,但我在使用Magento中的类结构时遇到了麻烦。
对于我想要做的事情,我想计算一个月初至今的销售数字。
关闭仪表板我希望找到创建$this->getTotals()
的位置,以便将此图添加到数组中。
作为一个起点,我可以再将我引导到Mage
文件,这个文件是创建的,或者甚至可能是解释Magento编程结构的资源,它既不是那么基本,也不是那么先进,也不可能。 ? (这些天似乎是一项艰巨的任务,除非你知道在哪里看)
答案 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 Branca的Advanced 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函数并且不找到它的声明,那么您就知道代码只是访问数据属性,这也是非常有用的信息。