Распродажа: получить родительский продукт из идентификатора дочернего продукта
Я ищу код, который может помочь мне получить идентификатор родительского продукта из идентификатора дочернего продукта, и оба эти продукта связаны с использованием функции повышения продаж
До сих пор мне удавалось извлекать идентификатор дочерних продуктов из идентификатора родителя, используя приведенный ниже код
//Get product detail using product id (Suppose you have product id is : $product_id)
$_product = Mage::getModel('catalog/product')->load($product_id);
// Fetch list of upsell product using query.
$upsell_product = $_product->getUpSellProductCollection();
Но я хочу сделать обратное
Это решение также сработало
$childProductId = 17;//edit this value, or get it by $product->getId()
$productsLinkedAsUpsell = Mage::getModel('catalog/product_link')->getCollection()
->addFieldToFilter('linked_product_id', $childProductId)
->addFieldToFilter('link_type_id', Mage_Catalog_Model_Product_Link::LINK_TYPE_UPSELL);
foreach ($productsLinkedAsUpsell as $upsell) {
$parentId = $upsell->getProductId();
}
4 answers
Следующий код будет:
- Получить экземпляр ссылки текущего продукта,
- Фильтр на основе столбца linked_product_id в таблице
catalog_product_link
, - Вызов useUpSellLinks гарантирует, что будут возвращены только ссылки на повышение продаж,
- Предоставить вам коллекцию всех ссылок, в которых этот продукт указан в идентификаторе linked_product_id,
Затем вы можете выполнить цикл по коллекции и получить атрибут product_id, который будет родительским.
//Get product detail using product id (Suppose you have product id is : $product_id)
$_product = Mage::getModel('catalog/product')->load($product_id);
// Fetch list of upsell product using query.
$_linkInstance = $_product->getLinkInstance();
/* @var $collection Mage_Catalog_Model_Resource_Product_Link_Collection */
$collection = $_linkInstance->useUpSellLinks()->getLinkCollection();
$collection->addFieldToFilter('linked_product_id', array('eq' => $_product->getId()));
$collection->addLinkTypeIdFilter();
$collection->joinAttributes();
foreach($collection as $upsellproduct) {
$upsellproduct->getProductId();
}
Быстрый и грязный способ сделать это:
$productId = 1;
$collection = Mage::getModel('catalog/product')->getCollection();
//$collection->addAttributeToSelect('*');//if you want all the attributes
$select = $collection->getSelect();
$joinCondition = array(
'links.linked_product_id = e.entity_id',
'links.link_type_id = '. Mage_Catalog_Model_Product_Link::LINK_TYPE_UPSELL
);
$select->join(
array('links' => $collection->getTable('catalog/product_link')),
implode(' AND ', $joinCondition),
array('link_id')
);
$select->where('links.linked_product_id = ?', (int)$productId);
foreach ($collection as $item){
//do something with $item
}
Если вы хотите получить родительский (настраиваемый) продукт дочернего продукта в списке продуктов или шаблоне страницы просмотра продукта в magento, вы можете добиться этого, используя код в 1 строку, как показано ниже:
if (empty(Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getId()))
echo $product->getName();
Ссылка: http://magentomonsters.com/get-parent-product-of-child-product-in-magento/
Для связанных, продаваемых, перекрестных продуктов также можно использовать
$parentIds = $product->getLinkInstance()->getResource()
->getParentIdsByChild($product->getId(), Mage_Catalog_Model_Product_Link::LINK_TYPE_RELATED);