Php 如何在Magento中按字母顺序对类别列表数组排序
在Magento中,我用下面的代码创建了一个phtml模板文件。我知道了。我和其他人想知道如何按字母顺序排列这个分类列表。代码的前几行创建了一个带有类别ID的数组。更进一步,我们可以使用foreach部分中的ID获取类别名称。但是要按名称排序,我们需要在foreach前面的数组中获取名称,然后按名称排序。怎么做Php 如何在Magento中按字母顺序对类别列表数组排序,php,magento,Php,Magento,在Magento中,我用下面的代码创建了一个phtml模板文件。我知道了。我和其他人想知道如何按字母顺序排列这个分类列表。代码的前几行创建了一个带有类别ID的数组。更进一步,我们可以使用foreach部分中的ID获取类别名称。但是要按名称排序,我们需要在foreach前面的数组中获取名称,然后按名称排序。怎么做 <?php $cats = Mage::getModel('catalog/category')->load(319)->getChildren(); $catIds
<?php
$cats = Mage::getModel('catalog/category')->load(319)->getChildren();
$catIds = explode(',',$cats);
?>
<ul>
<?php foreach($catIds as $catId): ?>
<li>
<?php
$category = Mage::getModel('catalog/category')->load($catId);
echo '<a href="' . $category->getUrl() . '">';
echo $category->getName() . '</a>';
?>
</li>
<?php endforeach; ?>
</ul>
-
注意:319是我要列出其子类别的父类别的类别id。此外,我不把这是一个类别页面模板。我正在CMS页面中插入一个块(该部分已经开始工作)。您可以先建立一个类别名称列表
<?php
$cats = Mage::getModel('catalog/category')->load(319)->getChildren();
$catIds = explode(',',$cats);
$categories = array();
foreach($catIds as $catId) {
$category = Mage::getModel('catalog/category')->load($catId);
$categories[$category->getName()] = $category->getUrl();
}
ksort($categories, SORT_STRING);
?>
<ul>
<?php foreach($categories as $name => $url): ?>
<li>
<a href="<?php echo $url; ?>"><?php echo $name; ?></a>
</li>
<?php endforeach; ?>
</ul>
-
我写了这个答案,对Magento不太了解,只是想要一些快速有效的东西 你可以打电话
Mage::getModel('catalog/category')->getCollection()->addFieldToFilter('parent_id', '319')->addAttributeToSort('name', 'ASC');
您将立即对整个集合进行排序,其余的只是对典型Varien集合的迭代。这是一个伪示例,我不知道parent_id是否是db中的实际字段名,所以在得到正确的结果之前,您可能会检查它
您好,我正在使用magento 1.4.1.1,这可以对子类别进行排序: 使用 获取id为319的类别的子类别 并在函数
getChildrenCategories()
下的第582行编辑code/core/Mage/catalog/Model/Resource/Eav/Mysql4/category.php
以更改
->setOrder('position','ASC');
到
希望这对您也有用。在最新的Magento(CE 1.7.0.2)中,有一种更简单的方法可以做到这一点+
$children=Mage::getModel('catalog/category')->getCategories(319,1,true,true);
//反复浏览结果
foreach(儿童作为$category):
回显“”$类别->获取名称();
endforeach;
函数getChildren()
位于
第817行附近的app/code/core/Mage/Catalog/Model/Category.php
有很多选择。希望它能为你节省一些时间 首先备份topmenu.phtml,然后在新的topmenu.phtml文件中替换以下代码
<?php $_helper = Mage::helper('catalog/category') ?>
<?php $_categories = $_helper->getStoreCategories() ?>
<?php
function array_sort($array, $on, $order=SORT_ASC){
$new_array = array();
$sortable_array = array();
if (count($array) > 0) {
foreach ($array as $k => $v) {
if (is_array($v)) {
foreach ($v as $k2 => $v2) {
if ($k2 == $on) {
$sortable_array[$k] = $v2;
}
}
} else {
$sortable_array[$k] = $v;
}
}
switch ($order) {
case SORT_ASC:
asort($sortable_array);
break;
case SORT_DESC:
arsort($sortable_array);
break;
}
foreach ($sortable_array as $k => $v) {
$new_array[$k] = $array[$k];
}
}
return $new_array;
}
?>
<?php
$layer = Mage::getSingleton('catalog/layer');
$_category = $layer->getCurrentCategory();
$currentCategoryId= $_category->getId();
?>
<div class="nav-container">
<ul id="nav">
<?php $_helper = Mage::helper('catalog/category') ?>
<?php $_categories = $_helper->getStoreCategories() ?>
<?php $currentCategory = Mage::registry('current_category') ?>
<?php if (count($_categories) > 0){ ?>
<?php foreach($_categories as $_category){ ?>
<?php $_category = Mage::getModel('catalog/category')->load($_category->getId()) ?>
<li><a href="<?php echo $_helper->getCategoryUrl($_category) ?>"><span><?php echo $_category->getName(); ?></span></a>
<?php $catList = array();?>
<?php $_subcategories = $_category->getChildrenCategories() ?>
<?php foreach($_subcategories as $_subCategory){ ?>
<?php $catList[] = array('name' => $_subCategory->getName(), 'url' => $_subCategory->getUrl(), 'id' => $_subCategory->getId());?>
<?php } ?>
<?php $catList = array_sort($catList, 'name', SORT_ASC);?>
<ul>
<?php if (count($catList) > 0){ ?>
<?php $subcat=0?>
<?php foreach($catList as $_subCategory){ ?>
<li><a href="<?php echo $_subCategory['url'] ?>"><span><?php echo $_subCategory['name'] ?></span></a>
<?php $subCatList = array();?>
<?php $_subSubCat = Mage::getModel('catalog/category')->load($_subCategory['id']);
$_subSubCategories = $_subSubCat->getChildrenCategories();?>
<?php foreach($_subSubCategories as $_subSubCategory){ ?>
<?php $subCatList[] = array('name' => $_subSubCategory['name'], 'url' => $_subSubCategory['url']);?>
<?php } ?>
<?php $subCatList = array_sort($subCatList, 'name', SORT_ASC);?>
<?php if (count($subCatList) > 0){ ?>
<ul>
<?php foreach($subCatList as $_subSubCat){ ?>
<li><a href="<?php echo $_subSubCat['url'] ?>"><span><?php echo $_subSubCat['name'] ?></span></a>
<?php } ?>
</li>
</ul>
<?php } ?>
</li>
<?php } ?>
<?php } ?>
</ul>
</li>
<?php } ?>
<?php } ?>
</ul>
</div>
我刚刚测试过。。。排序顺序是一样的。如果我使用krsort,那么顺序是正确的,但我不确定这是否有意义。它应该按名称的字母顺序排序,但是ksort对id desc.thinks排序?asort代替rsort工作!顺便说一句,你怎么写得这么快?这真的是我发布后的几分钟!我只是用你的答案来实现我的目标,而且效果很好。谢谢:)下面的(评分更高的)答案对我不起作用!感谢您的回答:)欢迎使用stackoverflow,请使用编辑器中提供的格式按钮。->setOrder('name','ASC)代码>应该是->setOrder('name','ASC')代码>。请注意缺少的”
:)非常简单!这个答案值得更多的赞扬!这是最好的答案。->addAttributeToSort('name','ASC')是最好的使用方法。这是一个很好的答案。但这对我不起作用。请注意,我无意中否决了这个答案,而投了赞成票,只是因为我没有取消投票的选择权。
->setOrder('name','ASC);
$children = Mage::getModel('catalog/category')->getCategories(319, 1, true, true);
// iterate through the results
foreach ($children as $category):
echo '<option value="' . $category->getUrl() . '">' . $category->getName() . '</option>';
endforeach;
<?php $_helper = Mage::helper('catalog/category') ?>
<?php $_categories = $_helper->getStoreCategories() ?>
<?php
function array_sort($array, $on, $order=SORT_ASC){
$new_array = array();
$sortable_array = array();
if (count($array) > 0) {
foreach ($array as $k => $v) {
if (is_array($v)) {
foreach ($v as $k2 => $v2) {
if ($k2 == $on) {
$sortable_array[$k] = $v2;
}
}
} else {
$sortable_array[$k] = $v;
}
}
switch ($order) {
case SORT_ASC:
asort($sortable_array);
break;
case SORT_DESC:
arsort($sortable_array);
break;
}
foreach ($sortable_array as $k => $v) {
$new_array[$k] = $array[$k];
}
}
return $new_array;
}
?>
<?php
$layer = Mage::getSingleton('catalog/layer');
$_category = $layer->getCurrentCategory();
$currentCategoryId= $_category->getId();
?>
<div class="nav-container">
<ul id="nav">
<?php $_helper = Mage::helper('catalog/category') ?>
<?php $_categories = $_helper->getStoreCategories() ?>
<?php $currentCategory = Mage::registry('current_category') ?>
<?php if (count($_categories) > 0){ ?>
<?php foreach($_categories as $_category){ ?>
<?php $_category = Mage::getModel('catalog/category')->load($_category->getId()) ?>
<li><a href="<?php echo $_helper->getCategoryUrl($_category) ?>"><span><?php echo $_category->getName(); ?></span></a>
<?php $catList = array();?>
<?php $_subcategories = $_category->getChildrenCategories() ?>
<?php foreach($_subcategories as $_subCategory){ ?>
<?php $catList[] = array('name' => $_subCategory->getName(), 'url' => $_subCategory->getUrl(), 'id' => $_subCategory->getId());?>
<?php } ?>
<?php $catList = array_sort($catList, 'name', SORT_ASC);?>
<ul>
<?php if (count($catList) > 0){ ?>
<?php $subcat=0?>
<?php foreach($catList as $_subCategory){ ?>
<li><a href="<?php echo $_subCategory['url'] ?>"><span><?php echo $_subCategory['name'] ?></span></a>
<?php $subCatList = array();?>
<?php $_subSubCat = Mage::getModel('catalog/category')->load($_subCategory['id']);
$_subSubCategories = $_subSubCat->getChildrenCategories();?>
<?php foreach($_subSubCategories as $_subSubCategory){ ?>
<?php $subCatList[] = array('name' => $_subSubCategory['name'], 'url' => $_subSubCategory['url']);?>
<?php } ?>
<?php $subCatList = array_sort($subCatList, 'name', SORT_ASC);?>
<?php if (count($subCatList) > 0){ ?>
<ul>
<?php foreach($subCatList as $_subSubCat){ ?>
<li><a href="<?php echo $_subSubCat['url'] ?>"><span><?php echo $_subSubCat['name'] ?></span></a>
<?php } ?>
</li>
</ul>
<?php } ?>
</li>
<?php } ?>
<?php } ?>
</ul>
</li>
<?php } ?>
<?php } ?>
</ul>
</div>