php 在 Magento 中获取包含详细信息的所有类别的数组
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9448169/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
get an array of all categories with details in Magento
提问by jeremy.bass
I want to be able to call through the API to get an array of all the categories with the details like the URL key. That goal in the end will be an array like this
我希望能够通过 API 调用以获取包含 URL 键等详细信息的所有类别的数组。最终的目标将是这样的数组
$massage_cats=array(
array("entity_id"=>78,
"name"=>"Massage Oils and Tools",
"url_key"=>"massage-oils-and-tools",
"url_path"=>"essential-accessories/massage-oils-and-tools.html"),
array("entity_id"=>79,
"name"=>"Massage Oils",
"url_key"=>"massage-oils",
"url_path"=>"essential-accessories/massage-oils-and-tools/massage-oils.html")
);
So I would want to call out something like
所以我想喊出类似的东西
$massage_cats= array();
$allcats = Mage::getModel('catalog/cats?')->loadAll();
foreach($allcats $k=>$item){
array_push($massage_cats,$item->loadDetails());
}
I know that is totally made up and not real to the API but that is basically the goal. I do need the output as I showed it. Ideas on the code to achieve the need?
我知道这完全是虚构的,对 API 来说并不真实,但这基本上是目标。我确实需要我展示的输出。关于代码实现的思路需要吗?
回答by seanbreeden
This will get your values. You can build your array however you like from here.
这将获得您的价值。您可以从这里随心所欲地构建阵列。
$categories = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect('id')
->addAttributeToSelect('name')
->addAttributeToSelect('url_key')
->addAttributeToSelect('url')
->addAttributeToSelect('is_active');
foreach ($categories as $category)
{
if ($category->getIsActive()) { // Only pull Active categories
$entity_id = $category->getId();
$name = $category->getName();
$url_key = $category->getUrlKey();
$url_path = $category->getUrl();
}
}
EDIT
EDIT
I adapted this from a post on MagentoCommerce.com. You can use this instead:
我改编自MagentoCommerce.com上的一篇文章。您可以改用它:
$category = Mage::getModel('catalog/category');
$tree = $category->getTreeModel();
$tree->load();
$ids = $tree->getCollection()->getAllIds();
if ($ids){
foreach ($ids as $id){
$cat = Mage::getModel('catalog/category');
$cat->load($id);
$entity_id = $cat->getId();
$name = $cat->getName();
$url_key = $cat->getUrlKey();
$url_path = $cat->getUrlPath();
}
}
回答by Harikaran K
HERE I WROTE FUNCTION UPTO THREE LEVELS RETURN IN ARRAY FORMAT
在这里我写了三个级别的函数以数组格式返回
$array=hpCat(2,3); //categoryID,Sublevel upto three level
print_r($array);
$array=hpCat(2,3); //categoryID,Sublevel 最多三级
print_r($array);
<?php
function hpCat($id,$level=0){
if(!empty($id)){
$level=empty($level)?0:$level;
$category = Mage::getModel('catalog/category')->load($id);
$levelOneItems = $category->getChildrenCategories();
if (count($levelOneItems) > 0){
$array=hpCatDetails($category);
if($level>=1):
$i=0;
foreach($levelOneItems as $levelOneItem){
$array['sub'][$i]=hpCatDetails($levelOneItem);
$leveltwoItems=$levelOneItem->getChildrenCategories();
if (count($leveltwoItems) > 0){
if($level>=2):
$j=0;
foreach($leveltwoItems as $leveltwoItem){
$array['sub'][$i]['sub'][$j]=hpCatDetails($leveltwoItem);
$levelthreeItems=$leveltwoItem->getChildrenCategories();
if (count($levelthreeItems) > 0){
if($level>=3):
$k=0;
foreach($levelthreeItems as $levelthreeItem){
$array['sub'][$i]['sub'][$j]['sub'][$k]=hpCatDetails($levelthreeItem);
$k++;
}
endif;
}
$j++;
}
endif;
}
$i++;
}
endif;
}
return $array;
}
return array();
}
function hpCatDetails($cat){
return array('name'=>$cat->getName());
}
$array=hpCat(2,3);//categoryID,Sublevel upto three level
echo '<pre>';print_r($array);die();
?>
回答by Umair
For the people looking for MySQL query to fetch all Magento categories.
对于寻找 MySQL 查询以获取所有 Magento 类别的人。
SELECT
e.entity_id AS id,
e.parent_id,
e.path,
e.`level`,
IF (
at_name.value_id > 0,
at_name.
VALUE
,
at_name_default.
VALUE
) AS `name`
FROM
`catalog_category_entity` AS `e`
INNER JOIN `catalog_category_entity_varchar` AS `at_name_default` ON (
`at_name_default`.`entity_id` = `e`.`entity_id`
)
AND (
`at_name_default`.`attribute_id` = '41'
)
LEFT JOIN `catalog_category_entity_varchar` AS `at_name` ON (
`at_name`.`entity_id` = `e`.`entity_id`
)
AND (
`at_name`.`attribute_id` = '41'
)
回答by Pascal KOCH
A recursive function to make it :
一个递归函数来使它:
private function __categoriesTree($id = 2) {
$category = Mage::getModel('catalog/category');
$_category = $category->load($id);
$details = new stdClass();
list($details->id, $details->name, $details->urlKey, $details->level, $details->children) = [
$_category->getId(),
$_category->getName(),
$_category->getUrlKey(),
$_category->getLevel(),
[]
];
foreach (array_filter(explode(',', $_category->getChildren())) as $childId) {
$details->children[] = $this->__categoriesTree($childId);
}
if (count($details->children) === 0) {
unset($details->children);
}
return $details;
}
And
和
$categoriesTree= $this->categoriesTree()
I prefer to use objects than arrays to model a node but you can easily replace.
我更喜欢使用对象而不是数组来建模节点,但您可以轻松替换。