magento magento-1.4

¿Cómo agrego un filtro en un atributo de producto a Magento Advanced Export Profiles?



magento-1.4 (2)

Quiero filtrar mis datos a csv usando el campo "Fabricante". Intenté esto, pero no funcionó:

<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>

¿Alguna idea sobre cómo hacer que esto funcione con el filtrado en otros atributos distintos a los predeterminados?


Desafortunadamente, al leer el código, parece que el conjunto de atributos que puede filtrar es muy limitado.

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

Filtrar en otros atributos requiere una extensión menor a la clase.

/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>


Sé que este tema es antiguo, pero esto puede ayudar a alguien: funciona en Magento 1.9. Esto sería mejor como un Módulo, pero esta es una "solución rápida". Haga una copia de seguridad de todos los archivos antes de cargarlos. Necesitaba agregar ID de producto (desde> hasta) y campo desplegable Fabricante, pero puedo adoptarlo fácilmente para la mayoría de los tipos de atributos.

PARA Sistema> Importar / Exportar> Perfiles de datos> Exportar todos los productos

app / code / core / Mage / Catalog / Model / Convert / Adapter / Product.php
copiar a
app / code / local /Mage/Catalog/Model/Convert/Adapter/Product.php

ENCONTRAR carga de función pública ()
Agregar atributos a $ 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'';

Si type = " fromTo " necesita agregar un filtro extra antes de devolver parent :: load ();
Lo siguiente es para 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'' )); }

Agregue los campos al formulario

app / design / adminhtml / default / default / template / system / convert / profile / wizard.phtml
Duplicar como una copia de seguridad

Encontrar

<div class="profile_entity_type_product">

Agregar conjuntos de campos adicionales dentro de este div

Lo siguiente es para el deTo para ID de entidad

<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>

Lo siguiente es para el menú desplegable del fabricante

<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>