In Magento ist die automatische Vergabe der URL Keys nur mit dem Namen möglich.

Dieses Modul ergänzt die Funktion um alle möglichen Attribute.

Download über Magento-Connect hier

Der Code für Datei Designcomplex_Urlkey.xml in app\etc\modules\

<?xml version="1.0" ?>
<config>
    <modules>
    <Designcomplex_Urlkey>
        <codePool>local</codePool>
        <active>true</active>
    </Designcomplex_Urlkey>
    </modules>
</config>

und config.xml im Pfad app\code\local\Designcomplex\Urlkey\etc\ und der Code ist

<?xml version="1.0"?>
<config>
  <modules>
    <Designcomplex_Urlkey>
      <version>0.1.0</version>
    </Designcomplex_Urlkey>
  </modules>
    <global>
        <models>
            <Designcomplex_Urlkey>
                <class>Designcomplex_Urlkey_Model</class>
            </Designcomplex_Urlkey>
        </models>
  </global>
    <global>
        <events>
            <catalog_product_save_before>
                <observers>
                    <Designcomplex_Urlkey>
                        <type>singleton</type>
                        <class>Designcomplex_Urlkey/observer</class>
                        <method>updateurl</method>
                    </Designcomplex_Urlkey>
                </observers>
            </catalog_product_save_before>
        </events>
    </global>       
</config> 

Dazu kommt die Observer.php im Verzeichnis app\code\local\Designcomplex\Urlkey\Model

<?php
class Designcomplex_Urlkey_Model_Observer{
    public function updateurl($observer){
        //Mage::log('URLKey log', null, 'urlkey.log');
        if($observer->getEvent()->getProduct()){
            $Product=$observer->getEvent()->getProduct();
            $Url='';
            if(!is_null($Product->getData('manufacturer'))):
            $Url=$Url.$Product->getAttributeText('manufacturer').'-';
            endif;
            if(!is_null($Product->getData('name'))):
            $Url=$Url.$Product->getData('name');
            endif;
            //Mage::log('URLKey log'.$Url, null, 'urlkey.log');
            $Product->setData('url_key',$Url);      

        }
    }
}

In der Observer.php sind die unterschiedlichen Attributarten zu beachten. Der Name wird nur mit getData(’name‘) abgerufen und Attribute wie „manufacturer“ und die meisten anderen Text-Attribute werden mit getAttributeText(‚attribute_code‘) abgerufen.