我想创建一个PHP文件,当我访问此文件时,它将返回magento中所有产品类别的列表及其ID。例如,当我访问mysite.com/category.php时,它应该显示所有类别及其相应ID的列表。我已经搜索了stackoverflow和其他所有论坛,我发现了许多类似的问题,但没有任何解决我的问题。我对代码本身没有问题,但我很难找到放置此代码的位置,这是我想要使用的代码。
category = Mage::getModel('catalog/category');
$catTree = $category->getTreeModel()->load();
$catIds = $catTree->getCollection()->getAllIds();
$cats = array();
if ($catIds){
foreach ($catIds as $id){
$cat = Mage::getModel('catalog/category');
$cat->load($id);
$cats[$cat->getId()] = $cat->getName();
}
}
任何人都可以解释我需要将这个代码放在哪个文件中,也可以解释我需要将文件放在哪个文件夹中,以及我是否需要修改我的代码以获得我想要的结果。非常感谢
修改
这是我到目前为止所做的。所以我创建了一个名为category.php的PHP文件我把这个文件放在我的magento文件夹的根目录下,该文件夹里面有应用程序,皮肤和媒体目录的文件夹,然后我把我的代码包含在文件中就像这样
$category = Mage::getModel('catalog/category');
$catTree = $category->getTreeModel()->load();
$catIds = $catTree->getCollection()->getAllIds();
$cats = array();
if ($catIds){
foreach ($catIds as $id){
$cat = Mage::getModel('catalog/category');
$cat->load($id);
$cats[$cat->getId()] = $cat->getName();
}
}
我现在已将@mufaddal的代码包含在他的答案中
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
所以我的完整category.php文件应该如下所示
<?php
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
$category = Mage::getModel('catalog/category');
$catTree = $category->getTreeModel()->load();
$catIds = $catTree->getCollection()->getAllIds();
$cats = array();
if ($catIds){
foreach ($catIds as $id){
$cat = Mage::getModel('catalog/category');
$cat->load($id);
$cats[$cat->getId()] = $cat->getName();
}
}
?>
保存完这个文件后,我打开了我的网页浏览器,输入了我的文件mysite.com/category.php的URL,然后我应该在屏幕上看到所有类别的列表,但我得到的只是一个空白的屏幕有人可以解释我是不是真的很蠢,做错了什么。
答案 0 :(得分:2)
您应该只打印变量。你可以这样做:
<?php $mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::init();
$category = Mage::getModel('catalog/category');
$catTree = $category->getTreeModel()->load();
$catIds = $catTree->getCollection()->getAllIds();
$cats = array();
if ($catIds){
foreach ($catIds as $id){
$cat = Mage::getModel('catalog/category');
$cat->load($id);
$cats[$cat->getId()] = $cat->getName();
}
}
// Optionally you can use <pre> tag for a neater print
echo "<pre>";
var_dump($cats);
echo "</pre>";
以下是有关如何在不同级别上获取类别及其子级的示例代码。您可以将级别2更改为您想要的任何级别,但通常级别2类别是根类别下方的主要类别,因此应该是要走的路!
<?php
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::init();
$category = Mage::getModel('catalog/category')->getCollection()
->addAttributeToFilter('level',2);
$catIds = $category->getAllIds();
$cats = array();
$i=0;
if ($catIds){
foreach ($catIds as $id){
$j=0;
$cat = Mage::getModel('catalog/category');
$cat->load($id);
$cats[$i]["Category ID:"] = $id;
$cats[$i]["Category Name:"] = $cat->getName();
$subcats = $cat->getChildren();
foreach(explode(',',$subcats) as $subCatid){
$subcat = Mage::getModel('catalog/category');
$subcat->load($subCatid);
$cats[$i][$j]["Subcategory ID:"] = $subCatid;
$cats[$i][$j]["Subcategory Name:"] = $subcat->getName();
$j++;
}
$i++;
}
}
foreach($cats as $row){
echo "<pre>";
print_r($row);
echo "</pre>";
}
看起来很难看,你可以使用每个级别的 foreach()获得下一个子类别级别。例如,这个获得子子类别:
if ($catIds){
foreach ($catIds as $id){
$j=0;
$cat = Mage::getModel('catalog/category');
$cat->load($id);
$cats[$i]["Category ID:"] = $id;
$cats[$i]["Category Name:"] = $cat->getName();
$subcats = $cat->getChildren();
foreach(explode(',',$subcats) as $subCatid){
$subcat = Mage::getModel('catalog/category');
$subcat->load($subCatid);
$cats[$i][$j]["Subcategory ID:"] = $subCatid;
$cats[$i][$j]["Subcategory Name:"] = $subcat->getName();
$_subcats = $subcat->getChildren();
foreach(explode(',',$_subcats) as $_subCatid){
$_subcat = Mage::getModel('catalog/category');
$_subcat->load($_subCatid);
$cats[$i][$j][$k]["Sub-subcategory ID:"] = $_subCatid;
$cats[$i][$j][$k]["Sub-subcategory Name:"] = $_subcat->getName();
$k++;
}
$j++;
}
$i++;
}
}
答案 1 :(得分:0)
只需将文件放在magento文件夹的根目录下,并包含Mage.php文件即可使用magento。 喜欢
$mageFilename = 'app/Mage.php';
require_once $mageFilename;