magento - 获取 bundle 产品的单个选项 ID

标签 magento bundle option product

我正在处理 bundle 项目的 GIANT 列表,但只想根据用户输入的标准将某些项目显示为选项。这很容易,只需按照以下方式设置一个 if 语句:

$returnedproducts = array(21,50,78,23); // THESE ARE PRODUCT IDS.
if ($_product->getTypeId() == 'bundle'){
    $selectionCollection = $_product->getTypeInstance(true)->getSelectionsCollection(
           $_product->getTypeInstance(true)->getOptionsIds($_product), $_product
        );
    foreach($selectionCollection as $option) { 
      if(array_search($option['product_id'], $returnedproducts) !== FALSE){ // ADDED THIS TO FILTER
                  echo '<li>' .  $option->option_id . '</li>';
      }
    }
}

问题在于,由于列表的大小和其他一些因素,这只会消耗大量资源。我想找到一种方法来仅查找和显示特定的选项 ID,而不必筛选整个列表(可以在获取选项 ID 的查询中添加 WHERE product_id = XXXX)。不过,我似乎找不到搜索单个 bundle 选项的解决方案。谁能帮我实现这一目标?

最佳答案

我可能会因此受到一些强烈反对,但我发现当你达到 Magento 中大量收藏的上限时,你可以做两件事之一。

你可以...

  • 在您的托管解决方案上投入资金以获得更多内存/处理器/等
  • 使用直接sql读取

  • 使用 sql 读取并不是特别危险,因为您不会尝试使用未经彻底测试的代码将某些内容放回高度管理的数据库中。你打破任何东西的机会都很渺茫。是的,事情可能会出错,但您需要权衡使用这样的技巧的成本/ yield ,这对您的特定情况非常有用。它仍然使用 Magento 的 sql 接口(interface),而不是自定义的。

    修改以下代码以提取 entity_ids 列表或您要查找的任何内容,并使用该结果创建集合。
    // Just in case ---$mysqli = Mage::getSingleton('core/resource')->getConnection('core_write');
    $mysqlr = Mage::getSingleton('core/resource')->getConnection('core_read');
    
    $sql = "select * from some_entity_table where some_column = 'somevars'";
    
    $results = $mysqlr->fetchAll($sql);
    
    echo "<PRE>";
    foreach ($results as $res)
    {
        var_dump($res);
    }
    

    关于magento - 获取 bundle 产品的单个选项 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13812743/

    相关文章:

    php - 更改 Magento 配置以使用套接字

    javascript - Magento 缓存错误

    php - Magento:将产品(分组)类别分配给构建它的所有简单产品

    ios - 无法编辑 bundle 标识符

    ajax - 使用自定义 HTTP header 发送跨域请求时禁用预检选项请求

    Scala:如何处理许多可以为 None 的参数

    scala - 过滤 Scala 选项[设置]

    magento - 如何创建具有关联产品的可配置产品?

    java - 将 EditText 保存在 bundle 中并在布局更改时恢复它

    jquery - 刚开始 mvc 4 我可以在哪里调整包