我要做的是编辑Opencart(管理面板)中的product_list.tpl文件 在列中显示产品属性。</ p>
这是我想要实现的前后截图。 (在Photoshop中做得很糟)
现在,我对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属性,但是我不确定如何做到这一点?
有人可以帮忙吗?
答案 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。我还没有对此进行过常规测试,因此复制和粘贴可能无效,但它应该让您走上正确的轨道。