Magento erweitertes Exportprofil mit Herstellerfilter

Über Magentos ‘Dataflow’ lässt sich eine Menge realisieren. Unter anderem natürlich der Im- und Export von Produktdaten um z.B. Preise zu pflegen. Leider sind die Standard-Filtermöglichkeiten nicht gerade berauschend. Will man z.B. alle Produkte eines Herstellers haben, so gibt es dazu bisher keine Möglichkeit. Ich zeige Ihnen hier wie das geht.

Vorlage erstellen

Zunächst brauchen Sie eine Vorlage auf der Sie Ihr erweitertes Exportprofil aufbauen können. Ich habe dazu unter “System -> Import/Export -> Profile” ein neues Profil erstellt, die Felder die mich interessieren ausgewählt und einen Filter nach “Name” eingefügt:

<action type="catalog/convert_adapter_product" method="load">
    <var name="store"><![CDATA[0]]></var>
    <var name="filter/name"><![CDATA[Handschuh]]></var>
</action>
 
<action type="catalog/convert_parser_product" method="unparse">
    <var name="store"><![CDATA[0]]></var>
    <var name="url_field"><![CDATA[0]]></var>
</action>
 
<action type="dataflow/convert_mapper_column" method="map">
    <var name="map">
        <map name="sku"><![CDATA[Artikelnummer]]></map>
        <map name="name"><![CDATA[Produktname]]></map>
        <map name="cost"><![CDATA[EK Produkt]]></map>
        <map name="price"><![CDATA[VK Produkt]]></map>
        <map name="shipping_fee"><![CDATA[VK Fracht]]></map>
        <map name="manufacturer"><![CDATA[Hersteller]]></map>
    </var>
    <var name="_only_specified">true</var>
</action>
 
<action type="dataflow/convert_parser_xml_excel" method="unparse">
    <var name="single_sheet"><![CDATA[]]></var>
    <var name="fieldnames">true</var>
</action>
 
<action type="dataflow/convert_adapter_io" method="save">
    <var name="type">file</var>
    <var name="path">var/export</var>
    <var name="filename"><![CDATA[produkte_DE.csv]]></var>
</action>

Ausführung erweiterter Profile reparieren bei Magento 1.4.x

Hier ist übrigens ein Bug in Magento, die Datei muß die Endung ‘xml’ haben. Aber dazu später mehr. Um Magento das Filtern nach Herstellern beizubringen ist es zunächst notwendig die erweiterten Exportprofile überhaupt zum Laufen zu bringen. Hier fehlt ein Layouteintrag in Magento 1.4.2, und zwar in der Datei /app/design/adminhtml/default/default/layout/dataflow.xml, so daß beim Start eines erweiterten Profils nur Header und Footer der Adminoberfläche ohne Inhalt erscheinen. Wenn Sie dieses Problem haben, öffnen Sie einfach o.g. XML-Datei und fügen Sie vor dem schließenden </layout> diesen Block ein:

<adminhtml_system_convert_profile_run>
      <remove name = "root"/>
      <block type="adminhtml/page" name="convert_root" output="toHtml" template="page.phtml">
            <block type="adminhtml/page_head" name="convert_root_head" as="head" template="page/head.phtml">
                <action method="addJs"><script>prototype/prototype.js</script></action>
                <action method="addJs"><script>prototype/validation.js</script></action>
                <action method="addJs"><script>varien/js.js</script></action>
                <action method="addJs"><script>mage/translate.js</script></action>
                <action method="addJs"><script>mage/adminhtml/tools.js</script></action>
          </block>
          <block type="adminhtml/system_convert_profile_run" name="system_convert_profile_run" template="system/convert/profile/process.phtml" output="toHtml"/>
      </block>
</adminhtml_system_convert_profile_run>

Nach dem Speichern sollte die Profilausführung dann klappen. Dieser Tip kommt aus dem Magento Forum.

Adapterklasse erweitern für Herstellerfilter

Die zulässigen Filterattribute für Produkte werden in der Datei app/code/core/Mage/Catalog/Model/Convert/Adapter/Product.php definiert. Kopieren Sie diese Datei in app/code/local/Mage/Catalog/Model/Convert/Adapter/Product.php um sie anzupassen ohne Core-Dateien zu verändern. Danach fügen Sie oben den Eintrag für Herstellerfilter hinzu (~ Zeile 94):

    public function load()
    {
        $attrFilterArray = array();
        $attrFilterArray ['name']           = 'like';
        $attrFilterArray ['sku']            = 'startsWith';
        $attrFilterArray ['type']           = 'eq';
        $attrFilterArray ['attribute_set']  = 'eq';
        $attrFilterArray ['visibility']     = 'eq';
        $attrFilterArray ['status']         = 'eq';
        $attrFilterArray ['price']          = 'fromTo';
        $attrFilterArray ['qty']            = 'fromTo';
        $attrFilterArray ['store_id']       = 'eq';
        $attrFilterArray ['manufacturer']   = 'eq';
[...]

Wie Sie sehen, ist einfach der Eintrag für “manufacturer” hinzugekommen. Anschließend können wir das erweiterte Exportprofil erstellen und als Grundlage obigen XML-Code aus dem einfachen Profil nutzen. Neu ist lediglich der Filter nach Hersteller und der korrigierte Dateiname der Exportdatei:

<action type="catalog/convert_adapter_product" method="load">
    <var name="store"><![CDATA[0]]></var>
    <var name="filter/manufacturer"><![CDATA[5]]></var>
</action>
 
<action type="catalog/convert_parser_product" method="unparse">
    <var name="store"><![CDATA[0]]></var>
    <var name="url_field"><![CDATA[0]]></var>
</action>
 
<action type="dataflow/convert_mapper_column" method="map">
    <var name="map">
        <map name="sku"><![CDATA[Artikelnummer]]></map>
        <map name="name"><![CDATA[Produktname]]></map>
        <map name="cost"><![CDATA[EK Produkt]]></map>
        <map name="price"><![CDATA[VK Produkt]]></map>
        <map name="shipping_fee"><![CDATA[VK Fracht]]></map>
        <map name="manufacturer"><![CDATA[Hersteller]]></map>
    </var>
    <var name="_only_specified">true</var>
</action>
 
<action type="dataflow/convert_parser_xml_excel" method="unparse">
    <var name="single_sheet"><![CDATA[]]></var>
    <var name="fieldnames">true</var>
</action>
 
<action type="dataflow/convert_adapter_io" method="save">
    <var name="type">file</var>
    <var name="path">var/export</var>
    <var name="filename"><![CDATA[produkte_DE_adidas.xml]]></var>
</action>

Der passende Eintrag dazu findet sich ebenfalls im Magento Forum. Nicht ganz so einfach war das Herausfinden der ID des betreffenden Herstellers. Mit dieser Query (z.B. via PHPMyAdmin) ist das aber kein Problem:

SELECT  eaov.option_id AS ID, eaov.VALUE AS Hersteller
FROM    eav_attribute_label eaa, eav_attribute_option eao, eav_attribute_option_value eaov
WHERE   eaa.attribute_id = eao.attribute_id
AND     eao.option_id = eaov.option_id
AND     eaa.VALUE = 'Hersteller'

Ich hoffe dieser Beitrag hilft dem ein oder anderen. Es hat mich mehrere Stunden gekostet alle Schnipsel zu finden und das Ganze zum Laufen zu bringen, wie das bei Magento leider häufiger der Fall ist.

Veröffentlicht unter Magento Commerce Getagged mit: , , , , , , ,
One comment on “Magento erweitertes Exportprofil mit Herstellerfilter
  1. Interessant wäre auch eine Lösung wie man Kategorien, welche bereits angelegt sind die Artikel entsprechend in diese Importieren kann … beim export habe ich zwar das Feld _category beim Import aber keine Möglichkeit dieses zu mappen ;(

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht.

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>