我有以下代码:
$_productCollection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect(array('name', 'price', 'small_image', 'status'), 'inner')
->addCategoryFilter(Mage::getModel('catalog/category')->load($catid));
$_helper = $this->helper('catalog/output');
foreach ($_productCollection as $_product):
echo $_product->getProductUrl();
endforeach
我想学习如何发现可以在对象上使用的方法。
例如$ _product-> getProductUrl()使用方法getProductUrl()来获取url,但我需要价格并且不知道调用它的方法。使用print_r并没有为我提供足够的信息来发现它们是什么。我认为它们位于MAGE核心的控制器中。我有商业错误,我已经厌倦了看:http://docs.magentocommerce.com/ 但我发现自己有时会迷失方向。
有没有人知道这方面的好教程,还是可以指导我解决这个问题?
答案 0 :(得分:21)
首先,在模型和块中,任何get
或set
的方法实际上都是一种从对象的_data
数组中提取的神奇方法。您可以在这样的对象中看到所有数据
var_dump($object->getData());
因此,如果此数组具有名为some_data
的键,则可以调用名为getSomeData
的方法
echo $object->getSomeData();
请注意,有些方法会使用以get
和set
开头的实际方法,因此请务必检查类定义。
其次,您可以使用PHP反射函数(或更完整但复杂的PHP反射类API)来查看对象是什么类,然后获取该类的方法列表
首先,使用get_class获取对象类的名称。
$class_name = get_class($object);
然后,传递get_class_methods以获取对象上所有可调用方法的列表
$class_name = get_class($object);
$methods = get_class_methods($class_name);
echo "Methods for class $class_name \n<br />\n";
foreach($methods as $method)
{
var_dump($method);
}
这将为您提供所有类方法的列表。然后,您可以使用Commercebug错误的Class/URI Lookup选项卡快速查看定义类的文件,以查看方法定义。请记住,一些方法将在祖先类中定义。花时间学习IDE或a program like ctags非常值得投资,广告他们会让你快速跳到单个类定义。
答案 1 :(得分:4)
以下是查找类文件的简单方向: -
<强> 1。集合强>
$_productCollection = Mage::getResourceModel('catalog/product_collection')
上面的代码意味着我们正在调用产品集合类。类文件可以在: -
中找到应用\代码\核心\法师\目录\模型\资源\ Eav下\ Mysql4 \产品\ Collection.php
在Collection.php中,您将找到以下类: -
class Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
extends Mage_Catalog_Model_Resource_Eav_Mysql4_Collection_Abstract
因此,您所需的函数可以在Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
类中。
如果不存在,那么它可以在父类中,即Mage_Catalog_Model_Resource_Eav_Mysql4_Collection_Abstract
<强> 2。模型强>
同样,
$_product = Mage::getModel('catalog/product')
对于上面的代码,类文件是: -
应用\代码\核心\法师\目录\模型\ Product.php
第3。辅助强>
对于帮助文件,
$_helper = $this->helper('catalog/output');
上面的帮助文件是: -
应用\代码\核心\法师\目录\助手\ Output.php
<强> 4。最后强>
最后,使用像Eclipse或Netbeans这样的IDE将帮助您快速有效地学习和编写代码。
答案 2 :(得分:0)
我是一个新手,但我使用了此页面上的信息来获取某个对象可用的所有方法并将其发送到日志。
例如category_collection:
$collection = Mage::getResourceModel('catalog/category_collection');
Mage::log(
"Methods for class ".get_class($collection)." ".print_r(get_class_methods($menu),true),
null,
'log_name.log'
);
$parent = get_parent_class($collection);
while ($parent) {
Mage::log(
"Methods for parent ".$parent." ".print_r(get_class_methods($parent),true),
null,
'log_name.log'
);
$parent = get_parent_class($parent);
}