Come aderire a Tabella personalizzata con la raccolta di prodotti
Domanda
Ho creato un modulo fornitore personalizzato.Come posso ottenere il nome del fornitore insieme alla collezione di prodotti?.
La mia ha un attributo fornitore i cui valori derivano dal modulo fornitore.
Ho provato
$collection = Mage::getModel('catalog/product')->getCollection()
$collection->getSelect()->join( array('tvendor'=>$this->getTable('vendor/vendor')), 'main_table.vendor = tvendor.vendor_option_id', array('tvendor.filename'));
.
Ma non funziona.Dove sono sbagliato?
Soluzione
i seguenti lavori.
Ho trovato questo in base al modo in cui Magento ordina una collezione di prodotti in base a un attributo che ha opzioni.Vedi maggiori dettagli su questo in Mage_Eav_Model_Entity_Attribute_Source_Table::addValueSortToCollection
e Mage_Eav_Model_Resource_Entity_Attribute_Option::addOptionValueToCollection
//===>configure the fields below based on your needs
$attributeCode = 'vendor_id'; //replace this with the attribute code that holds the vendor
//get the attribute object
$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $attributeCode);
//attribute id
$attributeId = $attribute->getId();
$tablePkName = 'vendor_id'; //primary key name of the vendor table
$nameField = 'name'; //vendor table name field - the one you need
//get table that holds the vendors
$table = Mage::getSingleton('core/resource')->getTableName('vendor/vendor');
//<=== end of configuration
$collection = Mage::getModel('catalog/product')->getCollection();
//add the vendor attribtue to select
$collection->addAttributeToSelect($attributeCode);
$valueTable1 = $attributeCode . '_t1';
$valueTable2 = $attributeCode . '_t2';
//perform 2 left joins in case the attribute has the scope website or store view.
//It works even if the attribute has the scope global. this covers all the cases
$collection->getSelect()
->joinLeft(
array($valueTable1 => $attribute->getBackend()->getTable()),
"e.entity_id={$valueTable1}.entity_id"
. " AND {$valueTable1}.attribute_id='{$attributeId}'"
. " AND {$valueTable1}.store_id=0",
array())
->joinLeft(
array($valueTable2 => $attribute->getBackend()->getTable()),
"e.entity_id={$valueTable2}.entity_id"
. " AND {$valueTable2}.attribute_id='{$attributeId}'"
. " AND {$valueTable2}.store_id='{$collection->getStoreId()}'",
array()
);
$valueExpr = $collection->getSelect()->getAdapter()
->getCheckSql("{$valueTable2}.value_id > 0", "{$valueTable2}.value", "{$valueTable1}.value");
$optionTable = $attributeCode . '_option_value_t1';
$tableJoinCond = "{$optionTable}.{$tablePkName}={$valueExpr}";
//join with the vendor table
$collection->getSelect()
->joinLeft(
array($optionTable => $table),
$tableJoinCond,
array($nameField));
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange