Magento为什么Catalog Model在循环中为几个不同的类别返回相同的url?

时间:2015-03-27 22:06:10

标签: php magento

我想在产品页面上显示类别链接。

所以我这样做:

<?php
$_product = $this->getProduct();
$category_model = Mage::getModel('catalog/category');
$category_helper = Mage::helper('catalog/category');
$categories_ids = $_product->getCategoryIds();
?>

<?php if (count($categories_ids > 0)): ?>
  <ul class="categorias-principais">
    <?php foreach ($categories_ids as $cat_id): ?>
      <?php $category = $category_model->load($cat_id) ?>
      <?php if(!$category->getIsActive()) continue; ?>
      <li>
        <a href="<?php echo $category->getUrl(); ?>">
          <?php echo $category->getName() ?>
        </a>
      </li>
    <?php endforeach ?>
  </ul>
<?php endif ?>

我得到正确的名字,但是网址总是等于第一个,对于其他类别,为什么? getName,getUrlPath,all都返回正确的值,但不是getUrl()

我也尝试过使用帮助器:

<a href="<?php echo $category_helper->getCategoryUrl($category) ?>">
    <?php echo $category->getName() ?>
</a>

但问题仍然存在

这是生成的html

<ul class="categorias-principais">
  <li>
    <a href="http://localhost:3000/index.php/maquiagem.html">
      Maquiagem
    </a>
  </li>
  <li>
    <a href="http://localhost:3000/index.php/maquiagem.html">
      Corpo e Banho
    </a>
  </li>
  <li>
    <a href="http://localhost:3000/index.php/maquiagem.html">
      Sub segundo
    </a>
  </li>
  <li>
    <a href="http://localhost:3000/index.php/maquiagem.html">
      Unhas
    </a>
  </li>
</ul>

编辑:

当我使用以下方式更改我的收藏时:

$categories = $_product->getCategoryCollection();

而不是获取类别ID并使用模型加载类别,我可以成功使用getUrl(),但是getName()和getIsActive()将不再起作用,所以我混合了两个实例类型,它是非常蹩脚的,但如果没有人能给我一个更好的答案,我会把它作为一个发布。

新代码正在运行:

<?php
$_product = $this->getProduct();
$category_model = Mage::getModel('catalog/category');
$category_helper = Mage::helper('catalog/category');
$categories = $_product->getCategoryCollection();
?>

<?php if (count($categories) > 0): ?>
  <ul class="categorias-principais">
    <?php foreach ($categories as $_category): ?>
      <?php $_category_element = $category_model->load($_category->getId()) ?>
      <?php if(!$_category_element->getIsActive() || $_category->getLevel() != 2) continue; ?>
      <li>
        <a href="<?php echo $_category->getUrl() ?>">
          <?php echo $_category_element->getName() ?>
        </a>
      </li>
    <?php endforeach ?>
  </ul>
<?php endif ?>

1 个答案:

答案 0 :(得分:0)

使用以下代码,将参数作为类别检查,如$ _cat-&gt; getUrl($ _ cat);你的第一个代码中没有包含参数。

$product = Mage::getModel('catalog/product')->load($productId);

$cats = $product->getCategoryIds();
foreach ($cats as $category_id) {
$_cat = Mage::getModel('catalog/category')->load($category_id) ;
 echo $_cat->getUrl($_cat);
echo $_cat->getName();
}