Magento - 获得简单产品所属的捆绑产品

时间:2011-10-20 17:38:31

标签: magento magento-1.4

我想在简单的产品页面上显示所有捆绑包,因此需要检索信息。我搜索并尝试了很多。这篇文章听起来很有希望,但要么不工作,要么可能不适合我的问题: Magento - get a list of bundled product ids from a product id

我找到了针对分组产品的解决方案,但这不能在此处应用。

$grouped_product_model = Mage::getModel('bundle/product_selection');
$groupedParentId = $grouped_product_model->getParentIdsByChild($product->getId()); 

我发现表catalog_product_bundle_selection是正确的搜索位置,但我想知道是否有一个干净的方法和现有的函数来搜索product_id这个表,而不仅仅是为了破解它。

我没有在Mage_Bundle中找到解决方案。

我错过了什么?

从vrnet获得急救后,我写了一个新的块类,所以我可以更新布局

class Thomaier_Catalog_Block_Product_View_BundledSelect extends Mage_Catalog_Block_Product_View 
{

    protected $_simpleProducts = array( '3' ); // just an example

    public function getBundles() {

        $bundleIds = array();

        $bundlesCollectionModel = Mage::getResourceModel('bundle/selection_collection');
        $bundlesCollection = $bundlesCollectionModel->getSelect()
             ->where('`selection`.`product_id` in (' . join(',', (array)$this->_simpleProducts) . ')');

        foreach ($bundlesCollection as $bundleItem) {
            $bundleIds[] = $bundleItem->getParentProductId();
        }

        ...
    }
}

我跳过了一些部分。正如我在评论中提到的,当我在phpmyadmin中尝试时,SQL查询工作正常,但是没有创建$ bundleItem,而且> load()抛出异常。

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

下面是我为具有相同请求的客户编写的方法,该方法具有额外的功能:能够随机播放结果。

希望它有所帮助。

     protected $_simpleProducts = array(); // Array with IDs of simple products you want bundles from.

     protected $_shuffle = false;

    public function getBundles() {
        $bundleIds = array();

        /*Rather than using a collection model 
and make operations with getSelect,
a more elegant way is to extend
Mage_Bundle_Model_Mysql4_Selection_Collection
with a method that would be something like
setProductIdsFilter($productIds)*/

        $bundlesCollectionModel = Mage::getResourceModel('bundle/selection_collection');
        $bundlesCollection = $bundleCollectionModel->getSelect()
                                         ->where('`selection`.`product_id` in (' . join(',', (array)$this->_simpleProducts) . ')');
        foreach ($bundlesCollection as $bundleItem) {
            $bundleIds[] = $bundleItem->getParentProductId();
        }
        if (count($bundleIds)) {
            $allowBundles = Mage::getResourceModel('catalog/product_collection')
                            ->addIdFilter($bundleIds)
                            ->addFieldToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
            if ($this->_shuffle) {
                $allowBundles->getSelect()->order('rand()');
            }
            if ($allowBundles->count()) {
                return $allowBundles;
            }
        }
        return;