2014-03-13 120 views
1

我想要做的是编辑Opencart(管理面板) 中的product_list.tpl文件以显示列中的产品属性。Opencart将产品属性添加到product_list.tpl

这是我试图实现什么的前后屏幕截图。 (在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 } ?> 

这是它在列表中产生foreach循环的循环。 现在内修改产品,你可以看到属性,把手拿到属性是

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

,但如果我把这个Product_list.tpl文件中,我得到的PHP错误,即时猜测我必须以某种方式修改为product_list.tpl提供数据的控制器文件并添加一个函数以获取产品属性,但是我不确定如何执行此操作?

任何人都可以帮忙吗?

+0

只要在'catalog/product.php'控制器的第1041-1063行看一看,就可以在同一个文件的getList()方法中添加类似的代码。玩玩,然后问具体问题 –

回答

0

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

稍微复杂的是,产品可以有多个属性,因此您需要将它们拉入数组中,然后遍历视图中的数组。

产品模型(admin/model/catalog/product.php)有一个方法getProductAttributes($ product_id),如果您从控制器调用此方法,您应该可以获取产品属性。

注意:此控制器拉入列表中的所有产品,因此您需要拉动循环内的所有产品列表中的产品属性...在我的版本中,此循环从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 ['attributes']。在迭代每个产品的循环内:

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

NB。我没有有效地测试过,所以复制和粘贴可能不起作用,但它应该能让你走上正确的轨道。

+0

我试过做你说的,并做了一个超级简单的循环,只是为了测试它?<?php foreach($ products as $ product){?> <?php echo $ product ['attributes']; ?> '但我只是一遍又一遍地得到“Array”一词, 我猜我必须做每个属性的Foreach循环,但我不确定如何做到这一点...... – Blackline

+0

是的,这是正确的,看看上面编辑的最终代码块......或者你可以做一些事情:<?php foreach($ products as $ product){?><?php echo explode(',',$ product ['attributes'] ); ?> jx12345

+0

你好队友,很久没有回答:)我仍然无法弄清楚这一点。在我的product.php中,我有 \t'attributes'=> $ this-> model_catalog_product-> getProductAttributes($ result ['product_id']), and in my product_list.tpl我有<?php foreach $ product){?> <?php foreach($ product ['attributes'] as $ attribute){echo“$ attribute
”; }?> 但我仍然只是一遍又一遍地重复“阵列”。 – Blackline

相关问题