在 Opencart 的自定义脚本中读取产品自定义选项的值 2.x

Read value of product's custom options in custom script of Opencart 2.x

是否可以使用键值对读取自定义选项的变量值?

我正在尝试读取自定义产品的选项值 function.I 我能够通过如下数组索引引用它来读取值

$option = array_filter($this->request->post['option']); $product_serial_no = $option['93'] ;

我通过在 Neatbean 调试模式下读取变量值获得魔法数组索引 $option[93]

但是不同产品的选项索引在变化,因此我想使用关联数组之类的东西读取变量 'Serial Number' 的值。 可能吗?

产品页面上的选项如下图所示。

当您查看产品页面并说您 select 一些选项并单击 "add to cart" 时 post 将携带此数组

$_POST['option'] = array(93 => '22222')(正如您在示例中所展示的那样)

93 是 $product_option_id,它允许您通过此请求提取所需的所有信息:

$product_id = $this->request->post['product_id'];
foreach ($this->request->post['option']) as $product_option_id => $value) {
    $option_query = $this->db->query("SELECT 
    po.product_option_id, 
    po.option_id, 
    od.name, 
    o.type 
    FROM " . DB_PREFIX . "product_option po 
    LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) 
    LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id)
    WHERE po.product_option_id = '" . (int)$product_option_id . "' 
    AND po.product_id = '" . (int)$product_id . "' 
    AND od.language_id = '" . (int)$this->config->get('config_language_id') . "'");

    print_r($option_query->row);
}

此信息应该足以对选项进行任何操作。

如果选项的类型为 selectradio,您可能还想查询可能的变体,例如

//... put this inside the foreach loop, listed above right after print_r($option_query->row);
if ($option_query->row['type'] == 'select' || $option_query->row['type'] == 'radio') {
    $option_value_query = $this->db->query("SELECT 
    pov.option_value_id, 
    ovd.name, 
    pov.quantity, 
    pov.subtract, 
    pov.price, 
    pov.price_prefix, 
    pov.points, 
    pov.points_prefix, 
    pov.weight, 
    pov.weight_prefix 
    FROM " . DB_PREFIX . "product_option_value pov 
    LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id =     ov.option_value_id) 
    LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) 
    WHERE pov.product_option_value_id = '" . (int)$value . "' 
    AND pov.product_option_id = '" . (int)$product_option_id . "' 
    AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "'");

    print_r($option_value_query->row);
}

如果您有一个复选框(如上例所示)

//...also place this in the loop foreach in the code above.
if ($option_query->row['type'] == 'checkbox' && is_array($value)){
    foreach ($value as $product_option_value_id) {
        $option_value_query = $this->db->query("SELECT 
        pov.option_value_id, 
        pov.quantity, 
        pov.subtract, 
        pov.price, 
        pov.price_prefix, 
        pov.points, 
        pov.points_prefix, 
        pov.weight, 
        pov.weight_prefix, 
        ovd.name 
        FROM " . DB_PREFIX . "product_option_value pov 
        LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (pov.option_value_id = ovd.option_value_id) 
        WHERE pov.product_option_value_id = '" . (int)$product_option_value_id . "' 
        AND pov.product_option_id = '" . (int)$product_option_id . "' 
        AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "'");

        print_r($option_value_query->row);
    }
}

您可以在 system/library/cart/cart.php

中查看此确切代码

希望这对您有所帮助。