我想在简单的产品页面上显示所有捆绑包,因此需要检索信息。我搜索并尝试了很多。这篇文章听起来很有希望,但要么不工作,要么可能不适合我的问题: 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()抛出异常。
感谢您的建议。
答案 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;