以编程方式生成的捆绑产品未在类别页面上显示

时间:2013-11-21 22:27:55

标签: php magento

我正在使用Magmi和一些自定义代码生成大量捆绑产品:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);


$storeID = 1;
$websiteIDs = array(1);

error_reporting(E_ALL);
ini_set('display_errors',1);

//Get bundled products

$products = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToSelect('type')
    //->addAttributeToFilter('type_id', 'bundle') // simpler..
    ->addFieldToFilter('type_id', array('eq' => 'bundle')) // simple/configurable etc
;


foreach ($products as $product){

      $parentProduct = clone $product;

    // get all the options of your bundle product assumed as $bundle

    // remove the Selection/Bundle association from database, we need to pass all the others except the one we need to drop

    Mage::getModel('bundle/mysql4_bundle')->dropAllUnneededSelections();

    $options = $product->getTypeInstance()->getOptionsCollection();

    foreach ($options as $option){
          $option->delete();
    }



    $simple_skus = explode(",",$product->getBundledSkus());
    $items = array();
    $selections = array();

    $simple_skus = array_reverse($simple_skus);
    foreach ($simple_skus as $sku){
          if ($sku == '')continue;

          $selectionRawData = array();

          $pos = 0;
          $pos++;
          $productId = $product->getIdBySku($sku);
          $simple =   $product->load($productId);


                $items[] = array(
                'title' => $simple->getName(),
                'parent_id' => $parentProduct->getId(),
                'option_id' => '',
                'delete' => '',
                'type' => 'checkbox',
                'required' => ( strpos($sku,'harness') !== false ? 1 : 0),
                'position' => $pos);

            $selections[][] = array(
                'selection_id' => '',
                'option_id' => '',
                'product_id' => $simple->getEntityId(),
                'delete' => '',
                'selection_price_value' => $simple->getPrice(),
                'selection_price_type' => 0,
                'selection_qty' => 1,
                'selection_can_change_qty' => 0,
                'position' => 0);

    }


            Mage::unregister('product');
            Mage::unregister('current_product');
            Mage::register('product', $parentProduct);
            Mage::register('current_product', $parentProduct);
            $parentProduct->setCanSaveConfigurableAttributes(false);
            $parentProduct->setCanSaveCustomOptions(true);

如果你在后端查看它,一切似乎都设置正确,如果你输入网址,你可以直接进入产品,一切正常,可以添加到购物篮等 - 见{{ 3}}作为一个例子。

但是,即使已将产品分配到正确的类别,也不会在类别或搜索中返回任何产品。

如果我在后端创建捆绑产品,使用与生成的捆绑包完全相同的值,它将按预期工作并显示。

我尝试过的一些事情:

  • 我重新编入索引(很多次)
  • 我已清除缓存
  • 我截断了所有magento产品表,平面表等,并从头开始重新导入
  • 我尝试复制其中一个导入的产品并从中保存新产品
  • 产品全部有货
  • 捆绑产品具有搜索可见性,目录
  • 简单产品具有“非个别可见”的可见性

我确定我错过了一些明显的东西,一张我需要更新的桌子或其他东西,但我不确定是什么!

1 个答案:

答案 0 :(得分:0)

我在以编程方式创建的捆绑产品时遇到了完全相同的问题:没有出现在目录或搜索结果中,但能够在通过直接网址访问时看到该产品。

正如@MagePsycho所提到的,这是由catalog_product_index_pricecatalog_product_index_price_bundle_idx表中缺少条目引起的。

在保存捆绑产品之前添加对$bundle_product->setData('price_type', 0);的呼叫解决了问题。

但是,我看到您通过克隆另一个捆绑产品来获取捆绑产品,因此我不确定此解决方案是否可行。请试试。