当我访问php文件时,获取所有magento类别及其ID的列表

时间:2015-04-24 10:28:26

标签: php magento e-commerce

我想创建一个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,然后我应该在屏幕上看到所有类别的列表,但我得到的只是一个空白的屏幕有人可以解释我是不是真的很蠢,做错了什么。

2 个答案:

答案 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;