Opencart将product属性添加到product_list.tpl

时间:2014-03-13 14:05:25

标签: php controller opencart product

我要做的是编辑Opencart(管理面板)中的product_list.tpl文件 在列中显示产品属性。<​​/ p>

这是我想要实现的前后截图。 (在Photoshop中做得很糟)

enter image description here

现在,我对PHP很好。我不需要在表格中列出确切的代码。

目前要列出此列表是下面的代码。

 <?php foreach ($products as $product) { ?>
            <tr>
              <td style="text-align: center;"><?php if ($product['selected']) { ?>
                <input type="checkbox" name="selected[]" value="<?php echo $product['product_id']; ?>" checked="checked" />
                <?php } else { ?>
                <input type="checkbox" name="selected[]" value="<?php echo $product['product_id']; ?>" />
                <?php } ?></td>
              <td class="center"><img src="<?php echo $product['image']; ?>" alt="<?php echo $product['name']; ?>"   /></td>
              <td class="left"><?php echo $product['name']; ?></td>
              <td class="left"><?php echo $product['model']; ?></td>
              <td class="left"><?php if ($product['special']) { ?>
                <span style="text-decoration: line-through;"><?php echo $product['price']; ?></span><br/>
                <span style="color: #b00;"><?php echo $product['special']; ?></span>
                <?php } else { ?>
                 <?php echo substr($product['price'], 0, -2); ?> (ex. VAT)
                <?php } ?></td>
              <td class="right"><?php if ($product['quantity'] <= 0) { ?>
                <span style="color: #FF0000;"><?php echo $product['quantity']; ?></span>
                <?php } elseif ($product['quantity'] <= 5) { ?>
                <span style="color: #FFA500;"><?php echo $product['quantity']; ?></span>
                <?php } else { ?>
                <span style="color: #008000;"><?php echo $product['quantity']; ?></span>
                <?php } ?></td>
              <td class="left"><?php echo $product['status']; ?></td>
              <td class="right"><?php foreach ($product['action'] as $action) { ?>
                 <a class="editbutton" href="<?php echo $action['href']; ?>"><?php echo $action['text']; ?></a> 
                <?php } ?></td>
            </tr>
            <?php } ?>

这是它在列表中预测产品的循环。 现在在编辑产品时,您可以看到属性,获取属性的句柄是

<?php echo $product_attribute['name']; ?>

但如果我把它放在Product_list.tpl文件中,我会得到php错误,我猜我必须以某种方式修改为product_list.tpl提供数据的控制器文件,并添加一个函数来获取product属性,但是我不确定如何做到这一点?

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

是的,你是对的,你需要将产品属性拉入控制器(/admin/controller/catalog/product.php),以使它们可供视图使用。

轻微的复杂性是产品可能具有多个属性,因此您需要将它们拉入数组,然后在视图中迭代数组。

产品型号(admin / model / catalog / product.php)有一个方法getProductAttributes($ product_id),如果你从控制器调用它,你应该能够提取产品属性。<​​/ p>

NB。该控制器将列入列表中的所有产品,因此您需要在循环中提取所有产品列表中的产品属性...在我的版本中,此循环从第350行开始:

$results = $this->model_catalog_product->getProducts($data);

foreach ($results as $result) {

在此循环中,您应该看到加载每个产品的所有数据的代码(第375行):

$this->data['products'][] = array(
                'product_id' => $result['product_id'],
                'name'       => $result['name'],
                'model'      => $result['model'],
                'price'      => $result['price'],
                'special'    => $special,
                'image'      => $image,
                'quantity'   => $result['quantity'],
                'status'     => ($result['status'] ? $this->language->get('text_enabled') : $this->language->get('text_disabled')),
                'selected'   => isset($this->request->post['selected']) && in_array($result['product_id'], $this->request->post['selected']),
                'action'     => $action
            );

如果您将调用添加到模型中以获取属性:

$this->data['products'][] = array(
                'product_id' => $result['product_id'],
                'name'       => $result['name'],
                'model'      => $result['model'],
                'price'      => $result['price'],
                'special'    => $special,
                'image'      => $image,
                'quantity'   => $result['quantity'],
                'status'     => ($result['status'] ? $this->language->get('text_enabled') : $this->language->get('text_disabled')),
                'selected'   => isset($this->request->post['selected']) && in_array($result['product_id'], $this->request->post['selected']),
                'action'     => $action,
                'attributes' => $this->model_catalog_product->getProductAttributes($result['product_id']);

            );

然后,您应该可以在视图中迭代数组$ product [&#39; attributes&#39;]。在迭代每个产品的循环中:

<?php 
    foreach ($products as $product) { 
        foreach ($product['attributes'] as $attribute) {
            echo "$attribute<br>";
        }
    }
?>

NB。我还没有对此进行过常规测试,因此复制和粘贴可能无效,但它应该让您走上正确的轨道。