Magento高级配置文件导出 - 将URL附加到图像路径


进入

Magento几周后,设法开始使用高级导出配置文件(非常方便),我想做的是将URL值附加到其中一个输出列,特别是图像URL。 我想将 url 附加到路径输出的开头。

谁能帮忙?

<action type="catalog/convert_adapter_product" method="load">
    <var name="store"><![CDATA[0]]></var>
    <var name="filter/price/from"><![CDATA[0.01]]></var>
    <var name="filter/price/to"><![CDATA[999999]]></var>
    <var name="filter/visibility"><![CDATA[4]]></var>
    <var name="filter/status"><![CDATA[1]]></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="name"><![CDATA[ItemTitle]]></map>
        <map name="upc"><![CDATA[EANBarCode]]></map>
        <map name="description"><![CDATA[ItemTextDescription]]></map>
        <map name="sku"><![CDATA[SKU]]></map>
        <map name="qty"><![CDATA[StockLevel]]></map>
        <map name="price"><![CDATA[CostPrice]]></map>
        <map name="manufacturer"><![CDATA[Brand]]></map>
        <map name="ebaycategory1"><![CDATA[eBayCategory1]]></map>
        <map name="ebaycategory2"><![CDATA[eBayCategory2]]></map>
        <map name="image"><![CDATA[Image1]]></map>
        <map name="description"><![CDATA[ListingDescription]]></map>
        <map name="name"><![CDATA[ListingTitle]]></map>
        <map name="msrp"><![CDATA[OriginalRetailPrice]]></map>
        <map name="conditionnote"><![CDATA[SellerNotes]]></map>
    </var>
    <var name="_only_specified">true</var>
</action>
<action type="dataflow/convert_parser_csv" method="unparse">
    <var name="delimiter"><![CDATA[,]]></var>
    <var name="enclose"><![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[testing123.csv]]></var>
</action>

在查看方法图的类Mage_Dataflow_Model_Convert_Mapper_Column中,您现在只有 2 个变量:map 和 _only_specified。你需要做的是覆盖这个类和这个方法,并在设置 var 后在第 125 行添加类似的东西:

if ($this->getVar('prepend') && is_array($this->getVar('prepend'))) {
        $prepend = $this->getVar('prepend');
} else {
        $prepend = array();
}

现在你有一个新的变量 prepend,你可以像这样用于批处理数据 - 在同一个类的第 138 行,你拥有:

$newRow = array();
foreach ($attributesToSelect as $field => $mapField) {
        $newRow[$mapField] = isset($row[$field]) ? $row[$field] : null;
}

将其更改为:

$newRow = array();
foreach ($attributesToSelect as $field => $mapField) {
        $prepend = isset($prepend[$field]) ? $prepend[$field] : '';
        $newRow[$mapField] = isset($row[$field]) ? $prepend . $row[$field] : null;
}

现在,在上面发布的xml中,您可以添加如下所示的预置变量:

<action type="dataflow/convert_mapper_column" method="map">
<var name="prepend">
    <map name="image"><![CDATA[http://example.com/]]></map>

还没有测试过这个,但这就是我首先尝试的方式。也没有添加有关如何覆盖此模型类的部分,因为我认为那里有很多示例。

我刚刚注册,所以我不能对Emi的答案发表评论。我要感谢他,因为他是对的,但有一小段代码你也必须改变。简而言之,这是我的解决方案。

我还在我的私人博客中做了一个更详细的博客条目:https://www.timoschindler.de/vollstaendige-urls-in-dataflow-exportierten-csv-dateien-von-magento/不幸的是,它是德语;)。如果您有任何问题,请告诉我,我可以翻译。

首先,我添加了文件app/code/local/Mage/Dataflow/Model/Convert/Mapper/MyColumn.php

<?php
class Mage_Dataflow_Model_Convert_Mapper_MyColumn extends Mage_Dataflow_Model_Convert_Mapper_Column
{
public function map()
{
    $batchModel  = $this->getBatchModel();
    $batchExport = $this->getBatchExportModel();
    $batchExportIds = $batchExport
        ->setBatchId($this->getBatchModel()->getId())
        ->getIdCollection();
    $onlySpecified = (bool)$this->getVar('_only_specified') === true;
    if (!$onlySpecified) {
        foreach ($batchExportIds as $batchExportId) {
            $batchExport->load($batchExportId);
            $batchModel->parseFieldList($batchExport->getBatchData());
        }
        return $this;
    }
    if ($this->getVar('map') && is_array($this->getVar('map'))) {
        $attributesToSelect = $this->getVar('map');
    }
    else {
        $attributesToSelect = array();
    }
    if ($this->getVar('prepend') && is_array($this->getVar('prepend'))) {
            $prepend = $this->getVar('prepend');
    } else {
            $prepend = array();
    }
    if (!$attributesToSelect) {
        $this->getBatchExportModel()
            ->setBatchId($this->getBatchModel()->getId())
            ->deleteCollection();
        throw new Exception(Mage::helper('dataflow')->__('Error in field mapping: field list for mapping is not defined.'));
    }
    foreach ($batchExportIds as $batchExportId) {
        $batchExport = $this->getBatchExportModel()->load($batchExportId);
        $row = $batchExport->getBatchData();
        $newRow = array();
        foreach ($attributesToSelect as $field => $mapField) {
            $prepend_2 = isset($prepend[$field]) ? $prepend[$field] : '';
            $newRow[$mapField] = isset($row[$field]) ? $prepend_2 . $row[$field] : null;
        }
        $batchExport->setBatchData($newRow)
            ->setStatus(2)
            ->save();
        $this->getBatchModel()->parseFieldList($batchExport->getBatchData());
    }
    return $this;
}
}

然后我将应用程序/代码/核心/Mage/数据流/模型/转换/配置文件/集合.php复制到应用程序/代码/本地/Mage/数据流/模型/转换/配置文件/集合.php并在代码中更改了一个:

/** @var $varNode Varien_Simplexml_Element */
       foreach ($actionNode->var as $key => $varNode) {
           if ($varNode['name'] == 'map') {
               $mapData = array();
               foreach ($varNode->map as $mapNode) {
                   $mapData[(string)$mapNode['name']] = (string)$mapNode;
               }
               $container->setVar((string)$varNode['name'], $mapData);
           }  else {

仅此而已!一个简单的数据流 XML 现在如下所示:

<action type="dataflow/convert_mapper_myColumn" method="map">
    <var name="map">
        <map name="sku"><![CDATA[Artikelnummer]]></map>
        <map name="name"><![CDATA[Artikelbezeichnung]]></map>
        <map name="image"><![CDATA[image]]></map>
    </var>
    <var name="prepend">
        <map name="image"><![CDATA[https://www.bier-kaufen.de/media/catalog/product]]></map>
    </var>
    <var name="_only_specified">true</var>
</action>

我开发了一个简单的模块来解决这个问题。只需安装它并附加/预置您想要的任何内容。这是链接 http://bkielbasa.pl/magento-advanced-profiles-export-prepend-url-image-path/

它不编辑任何核心文件。

如果有人想要这种变体,我采用了 kabanek 的解决方案并将其扩展为添加常量列变体。这样,我们可以将信息直接导出到需要数据库中没有的字段的模板中。

在转换中.php已更改

if ($varNode['name'] == 'map' || $varNode['name'] == 'prepend' || $varNode['name'] == 'append' ) {

if ($varNode['name'] == 'map' || $varNode['name'] == 'prepend' || $varNode['name'] == 'append' || $varNode['name'] == 'const') {

然后在列中.php添加了:

if ($this->getVar('const') && is_array($this->getVar('const'))) {
$constCol = $this->getVar('const');
} else {
$constCol = array();
}

并更改:

$newRow[$mapField] = isset($row[$field]) ? ($prependText . $row[$field] . $appendText) : null;

$constText = isset($constCol[$field]) ? $constCol[$field] : null;
$newRow[$mapField] = isset($row[$field]) ? ($prependText . $row[$field] . $appendText) : $constText;

最新更新