【问题标题】:How do I add a filter on a product attribute to Magento Advanced Export Profiles?如何将产品属性过滤器添加到 Magento 高级导出配置文件?
【发布时间】:2011-08-25 17:38:31
【问题描述】:

我想使用“制造商”字段将我的数据过滤为 csv。我试过了,但没有用:

<action type="catalog/convert_adapter_product" method="load">
    <var name="store"><![CDATA[0]]></var>
    <var name="filter/manufacturer"><![CDATA[898]]></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[sku]]></map>
        <map name="name"><![CDATA[name]]></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[safety-gates-export.csv]]></var>
</action>

关于如何让它与过滤默认属性以外的其他属性一起工作有什么想法吗?

【问题讨论】:

  • 你知道如何通过数据流配置文件导出来导出类别名称而不是类别 ID,

标签: magento magento-1.4


【解决方案1】:

不幸的是,从阅读代码来看,您可以过滤的属性集非常有限。

$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';

要过滤其他属性需要对类进行次要扩展。

/app/code/local/YourCompany/YourModule/Model/DataFlow/Catalog/Product/Adapter.php

<?php
class YourCompany_YourModule_Model_DataFlow_Catalog_Product_Adapter 
extends Mage_Catalog_Model_Convert_Adapter_Product
{

    /**
     * Extend the parent method to add filtering capability for additional fields
     *
     * This is required since the parent load() uses a parent::setFilter instead of $this->setFilter
     *
     * @return Mage_Dataflow_Model_Convert_Adapter_Interface
     */
    public function load()
    {
        // Add any additional attributes you want to filter on here
        $attrFilterArray = array(
            'manufacturer' => 'eq',
        );

        $this->setFilter($attrFilterArray, array());

        return parent::load();
    }

}

/app/code/local/YourCompany/YourModule/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <YourCompany_YourModule>
            <version>0.0.1</version>
        </YourCompany_YourModule>
    </modules>
    <global>
        <models>
            <catalog>
                <rewrite>
                    <convert_adapter_product>YourCompany_YourModule_Model_DataFlow_Catalog_Product_Adapter</convert_adapter_product>
                </rewrite>
            </catalog>
        </models>
    </global>
</config>

【讨论】:

  • 抱歉回复晚了..我希望你能得到我给这个的赏金..很好的解决方案。
  • 好吧,看到问题被标记为“magento-1.4”,我不希望它在没有一些修改的情况下适用于 1.7。
【解决方案2】:

我知道这个话题很老,但这可能会对某人有所帮助 - 在 Magento 1.9 中工作。这作为一个模块会更好,但这是一个“快速修复”。上传前备份所有文件。我需要添加产品 ID(从 > 到)和制造商下拉字段,但可以轻松地用于大多数属性类型。

FOR 系统 > 导入/导出 > DataProfiles > 导出所有产品

app/code/core/Mage/Catalog/Model/Convert/Adapter/Product.php
复制到
app/code/本地/Mage/Catalog/Model/Convert/Adapter/Product.php

查找公共函数 load()
添加属性到 $attrFilterArray = array();

$attrFilterArray = array();
$attrFilterArray ['name']           = 'like';
$attrFilterArray ['entity_id']      = 'fromTo'; //Custom Field
$attrFilterArray ['manufacturer']   = 'eq';     //Custom Field
$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';

如果 type ="fromTo" 你需要在return parent::load();之前添加一个额外的过滤器;
以下是针对entity_id的

if ($productId = $this->getFieldValue($filters, 'entity_id')) {
    $this->_filter[] = array(
    'attribute' => 'entity_id',
    'from'      => $productId['from'],
    'to'        => $productId['to']
    );  

    $this->setJoinAttr(array(
    'alias'     => 'entity_id',
    'attribute' => 'catalog_product/entity_id',
    'bind'      => 'entity_id',
    'joinType'  => 'LEFT'
    ));
}

将字段添加到表单

app/design/adminhtml/default/default/template/system/convert/profile/wizard.phtml
复制为备份

查找

<div class="profile_entity_type_product">

在这个 div 中添加额外的字段集

以下是实体id的fromTo

<span class="field-row">
    <label for="product_filter_entity_id_from"><?php echo $this->__("Product ID:") ?></label>
    <input class="input-text" style="width:5em" id="product_filter_entity_id_from" name="gui_data[product][filter][entity_id][from]" value="<?php echo $this->getValue('gui_data/product/filter/entity_id/from') ?>"/> <?php echo $this->__('to') ?>
    <input class="input-text" style="width:5em" id="product_filter_entity_id_to" name="gui_data[product][filter][entity_id][to]" value="<?php echo $this->getValue('gui_data/product/filter/entity_id/to') ?>"/>
</span>

以下是制造商下拉菜单

<span class="field-row">
<label for="product_filter_manufacturer"><?php echo $this->__("Manufacturer Name:") ?></label><select id="product_filter_manufacturer" name="gui_data[product][filter][manufacturer]">
    <?php $manufacturer = Mage::getSingleton('eav/config')->getAttribute('catalog_product','manufacturer')->getSource()->getAllOptions(); ?>
    <?php foreach ($manufacturer as $option): ?>
        <option value="<?php echo $option['value'] ?>" <?php echo $this->getSelected('gui_data/product/filter/manufacturer', $option['value']) ?>><?php echo htmlspecialchars($option['label']) ?></option>
    <?php endforeach ?>
</select>

【讨论】:

    猜你喜欢
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    相关资源
    最近更新 更多