9

如何在 Magento 中获取类别的 URL 键。我在 CMS 的 URL 键字段中添加了以下文本:

Category-1

这就是我目前尝试在锚点中显示我的类别 URL 的方式:

$_categories = Mage::getModel('catalog/category')->getCollection()
                     ->addAttributeToSelect('name')
                     ->addAttributeToSelect('is_active');

<?php foreach($_categories as $_category): ?>
<a href="<?php echo $_category->getCategoryUrl($_category); ?>">
  <?php endforeach; ?>

但是每当我检查我的输出时,它仍然显示如下:

<a href="">
            <span>Manual Tile Cutters</span>
        </a>

我已经为此检查了谷歌和 magento 论坛,但我仍然找不到足够的答案。

另外,我试图在锚点中调用 URL 键,还是不同的 URL?

4

5 回答 5

21

其他两个答案都有数据库惩罚。添加类别 URL 信息的最佳方法是在集合级别,只需在模板文件中根据自己的喜好使用它。调整您的代码如下:

    $_categories = Mage::getModel('catalog/category')->getCollection()
                     ->addAttributeToSelect('name')
                     ->addAttributeToSelect('is_active')
                     ->addUrlRewriteToResult();

<?php foreach($_categories as $_category): ?>
<a href="<?php echo $_category->getUrl($_category); ?>">
  <?php endforeach; ?>

请注意应用于 Category Collection 的附加方法调用addUrlRewriteToResult()并使用 urlgetUrl()而不是您之前使用的方法调用 url getCategoryUrl()(代码中没有这样的东西)。

顺便说一句,如果您调用,您的代码应该可以正常工作,getUrl()但会稍微影响性能。

我希望这有帮助。

于 2014-03-02T23:41:51.750 回答
17

也许我没有完全理解这个问题,但下面的代码会给你一个给定 id 的类别的 url

<?php $category = Mage::getModel('catalog/category')->load(4); ?>
<a href="<?php echo $category->getUrl(); ?>">

只需将 load() 中的 id 4 更改为您需要的

于 2014-07-04T13:56:39.547 回答
6

使用 Magento (Category-) 模型可能会变得非常繁重,仅用于加载类别的 URL。当您处于需要加载 9000 多个类别 URL 的 URL 的循环中时,您可能会考虑使用 url 重写功能来获取 URL,因为它不涉及加载大量 Magento 模型:

$requestPath = Mage::getSingleton('core/url_rewrite')
    ->getResource()
    ->getRequestPathByIdPath(
        'category/' . $categoryId, Mage::app()->getStore()->getId());
return Mage::getBaseUrl() . $requestPath;

阅读本文以获取有关此文章的更多信息。

于 2015-02-10T07:28:36.270 回答
3

为此使用 Mage::helper('catalog/category')

<?php $_helper= Mage::helper('catalog/category');
      $_categories = Mage::getModel('catalog/category')->getCollection()
                     ->addAttributeToSelect('name')
                     ->addAttributeToSelect('is_active'); ?>
<?php foreach($_categories as $_category): ?>
    <a href="<?php echo $_helper->getCategoryUrl($_category); ?>">
          <?php echo $_category->getName(); ?>
    </a>
<?php endforeach;?>

更多信息点击收听

于 2014-02-25T06:31:01.857 回答
0

如果要检索商店明智的类别属性和类别 url 的集合,可以使用

$collection = Mage::getModel('catalog/category')->getCollection()
    ->setStoreId($store->getId())
    ->addAttributeToSelect('entity_id')
    ->addAttributeToSelect('url_key')
    ->addAttributeToSelect('name')
    ->addAttributeToFilter('is_active', 1)
    ->addAttributeToFilter('include_in_menu', 1)
    ->addFieldToFilter('path', array('like'=> "1/{$rootCategoryId}/%"));

    $collection->getSelect()->joinLeft(
    array('url_rewrite_table' => $collection->getTable('core/url_rewrite')),
    "url_rewrite_table.store_id = {$store->getId()} AND id_path = CONCAT('category/',e.entity_id)",
    array('store_url_key' => 'request_path'
    )
    );

并检索 $row->getStoreUrlKey() 之类的请求路径,并在其前面加上商店基础 Url。我正在使用它在管理面板中显示存储特定类别网格。

于 2016-10-19T23:25:43.033 回答