【问题标题】:Magento how get options with some additional informationMagento 如何通过一些附加信息获取选项
【发布时间】:2013-09-27 09:11:05
【问题描述】:

我正在处理选项,以添加一些附加信息,例如图像。我使用 option_type_id 和 option_id 将此数据保存到我自己的表中。现在在前端我想将我自己的表数据加入到默认选项中。所以这些选项带有图像信息。

$_option->getValues() 

这个函数返回选项数据,现在我必须在这个函数的实现处生成查询,这样我就可以添加连接来检索我自己的数据。

谢谢

【问题讨论】:

    标签: sql magento join options


    【解决方案1】:

    我没有看到一个干净的方法来做到这一点。

    这是一个肮脏的方式: 重写Mage_Catalog_Model_Resource_Product_Option 并在下面添加这个函数。 修改它与您加入。但是,每个产品选项都将加入您的表。您将需要检查某种标志,并且仅在设置了此标志时才添加您的加入。

    protected function _getLoadSelect($field, $value, $object)
    { 
        $select = parent::_getLoadSelect($field, $value, $object);
        if("do your check here"){
             $select->join('your table')
        }      
        return $select;
    }
    

    【讨论】:

    • 这个类没有这个功能。如果我是对的,我必须加入价值观而不是选项。
    • 是的,那是因为 Mage_Catalog_Model_Resource_Product_Option 正在扩展 Mage_Core_Model_Resource_Db_Abstract 那里你会发现这个功能,我会更新我的答案
    【解决方案2】:

    这就是我获得成功的原因。

    我覆盖了产品的资源集合

     class MYC_COPSwatch_Model_Resource_Product_Option_Collection extends Mage_Catalog_Model_Resource_Product_Option_Collection{        
    
         public function addValuesToResult($storeId = null)
    {
        if ($storeId === null) {
            $storeId = Mage::app()->getStore()->getId();
        }
        $optionIds = array();
        foreach ($this as $option) {
            $optionIds[] = $option->getId();
        }
        if (!empty($optionIds)) {
            /** @var $values Mage_Catalog_Model_Option_Value_Collection */
            $values = Mage::getModel('catalog/product_option_value')
                ->getCollection()                
                ->addTitleToResult($storeId)
                ->addPriceToResult($storeId)                
    
                ->addSwatchToResult($storeId)   //USED Join in this function             
    
                ->setOrder('sort_order', self::SORT_ORDER_ASC)
                ->setOrder('title', self::SORT_ORDER_ASC);
    
            foreach ($values as $value) {
                $optionId = $value->getOptionId();
                if($this->getItemById($optionId)) {
                    $this->getItemById($optionId)->addValue($value);
                    $value->setOption($this->getItemById($optionId));
                }
            }
        }
    
        return $this;
    } 
    

    可能会为某人节省时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多