Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get category URL key in Magento

How do I get the URL key of a category in Magento. I have added this text in URL key field the CMS:

Category-1

This is how I'm currently trying to show my category URL in an anchor:

$_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; ?>

But whenever I check my output it still shows like this:

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

I have already checked google and the magento forums for this, but I still cannot find a sufficient answer.

Also, is what I'm trying to call in the anchor the URL key, or is it a different URL?

like image 536
marchemike Avatar asked Feb 25 '14 06:02

marchemike


People also ask

What is URL key in Magento?

Magento URL key is the part of a static URL that describes a product or a category. It is filled in Magento as is. If there is no value provided, Magento takes the name of the product, lowercasing it and replacing blanks with hyphens.


1 Answers

Both other answers there is a DB penalty. Best way to add Category URL info is at the collection level and simply use it to your liking in your template files. Adjust your code as follows:

    $_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; ?>

Notice the additional method applied to the Category Collection called addUrlRewriteToResult() and call the url by using the getUrl() instead of what you had before which was getCategoryUrl() (no such thing in the code).

By the way, your code should work just fine if you call getUrl() but will impact performance slightly.

I hope this helps.

like image 92
Ron Avatar answered Oct 19 '22 23:10

Ron