8

我已经定义了一些自定义属性并通过Opencart管理面板将它们分配给产品。我试图在结帐时检索这些属性以调整一些运费。

我目前正在函数中的catalog/model/shipping/ups.php文件中getQuote工作。我正在接近这个:

print_r($this->cart->getProducts());

这给了我以下产品数据:

Array
(
    [59] => Array
        (
            [key] => 59
            [product_id] => 59
            [name] => My Product Name 
            [model] => ABC
            [shipping] => 1
            [image] => data/myproduct.jpg
            [option] => Array
                (
                )

            [download] => Array
                (
                )

            [quantity] => 1
            [minimum] => 1
            [subtract] => 1
            [stock] => 1
            [price] => 29.99
            [total] => 29.99
            [reward] => 0
            [points] => 0
            [tax_class_id] => 0
            [weight] => 3.75
            [weight_class_id] => 5
            [length] => 0.00
            [width] => 0.00
            [height] => 0.00
            [length_class_id] => 3
        )

)

但是,不会返回任何自定义属性。我确信有一种很好的方法可以将产品 ID 传递给属性获取函数,但我找不到它。Opencart 文档在开发方面有点缺乏,而且在 Google 上也没有运气。

通常我会grep从整个目录结构中找出我正在寻找的东西,但是在这个特定的 Web 主机上禁用了 shell 访问:(。

编辑

我相信 Attributes 是 Opencart 中内置的一项新功能。它就像一个自定义字段。

无论如何,在管理方面,我转到目录 > 属性并创建了一个名为“Shipping Box Type”的自定义属性。然后,在特定产品下,我可以设置属性。见截图。我的目标是检索“Shipping Box Type”的值。这能回答你的问题@Cleverbot 吗?我确定我可以做一个自定义数据库查询来抓取它,但是必须有一个内置函数来抓取属性?

opencart 产品属性

4

2 回答 2

11

检索给定 product_id 的属性

$this->load->model('catalog/product');

$attributes = $this->model_catalog_product->getProductAttributes(59); 

print_r($attributes);

输出

Array
(
    [0] => Array
        (
            [attribute_group_id] => 9
            [name] => Shipping Fields
            [attribute] => Array
                (
                    [0] => Array
                        (
                            [attribute_id] => 16
                            [name] => Shipping Box Type
                            [text] => SM2
                        )

                )

        )

)

更进一步,这是一个循环浏览购物车中当前产品以查看它们具有哪些属性的示例:

$this->load->model('catalog/product');

$cart_products = $this->cart->getProducts();

// get attributes for each product in the cart
foreach($cart_products as $product) {
    $attributes = $this->model_catalog_product->getProductAttributes($product['product_id']);
    print_r($attributes);
}
于 2012-07-14T12:53:56.133 回答
2

这不是 Opencart 中最直观的功能。首先你必须去目录>属性>属性组,你必须创建一个组名,作为你的属性的标题。为此,它可能是“运输规范”。

然后您需要转到目录>属性>属性>并在“运输规范”下创建一个名为“运输箱类型”的新属性。

现在您已准备好转到目录>产品并将属性添加到产品。

问题是它不会像你希望的那样显示出来。它将显示在产品页面上描述旁边的规格选项卡下。您可以轻松选择在 catalog/view/*your_theme*/products/products.tpl 中将“规格”更改为您选择的标题,或者您可以编辑相同的 tpl 文件以更改数据输出的容器/格式。

于 2012-07-14T06:34:27.487 回答