【问题标题】:How to display OpenCart Product List by Product IDs如何按产品 ID 显示 OpenCart 产品列表
【发布时间】:2014-03-03 23:25:18
【问题描述】:

我正在为我的商店创建一个自定义类别页面。目前在页面上,我有显示该类别中所有产品的默认产品列表,如下图所示:

我想知道是否有可能,而不是显示类别中的每个产品,如果我可以选择特定产品来显示 PHP?比如查询或我可以用逗号分隔产品 ID 的东西?

有点像<?php query by product ids (24,153,2,51,765) { ?>

我知道上面的代码不起作用(当然),但只是希望能显示我想要完成的工作。提前致谢!

下面是显示上图所示产品的代码:

  <?php if ($products) { ?>
  <div class="product-filter">

    <div class="limit"><b><?php echo $text_limit; ?></b>
      <select onchange="location = this.value;">
        <?php foreach ($limits as $limits) { ?>
        <?php if ($limits['value'] == $limit) { ?>
        <option value="<?php echo $limits['href']; ?>" selected="selected"><?php echo $limits['text']; ?></option>
        <?php } else { ?>
        <option value="<?php echo $limits['href']; ?>"><?php echo $limits['text']; ?></option>
        <?php } ?>
        <?php } ?>
      </select>
    </div>
    <div class="sort"><b><?php echo $text_sort; ?></b>
      <select onchange="location = this.value;">
        <?php foreach ($sorts as $sorts) { ?>
        <?php if ($sorts['value'] == $sort . '-' . $order) { ?>
        <option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option>
        <?php } else { ?>
        <option value="<?php echo $sorts['href']; ?>"><?php echo $sorts['text']; ?></option>
        <?php } ?>
        <?php } ?>
      </select>
    </div>
  </div>
  <div class="product-compare"><a href="<?php echo $compare; ?>" id="compare-total"><?php echo $text_compare; ?></a></div>
  <div class="product-list">
    <?php foreach ($products as $product) { ?>
    <div>
      <?php if ($product['thumb']) { ?>
      <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" title="<?php echo $product['name']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
      <?php } ?>
      <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>
      <div class="description"><?php echo $product['description']; ?></div>
      <?php if ($product['price']) { ?>
      <div class="price">
        <?php if (!$product['special']) { ?>
        <?php echo $product['price']; ?>
        <?php } else { ?>
        <div class="price-old"><span>MSRP: <?php echo $product['price']; ?></span></div> <div class="price-new"><?php echo $product['special']; ?></div>
        <?php } ?>
        <?php if ($product['tax']) { ?>
        <br />
        <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span>
        <?php } ?>
      </div>
      <?php } ?>
      <?php if ($product['rating']) { ?>
      <div class="rating"><img src="catalog/view/theme/default/image/stars-<?php echo $product['rating']; ?>.png" alt="<?php echo $product['reviews']; ?>" /></div>
      <?php } ?>
      <div class="cart">
        <input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" />
      </div>
      <div class="free-shipping"></div>
      <div class="wishlist"><a onclick="addToWishList('<?php echo $product['product_id']; ?>');"><?php echo $button_wishlist; ?></a></div>
      <div class="compare"><a onclick="addToCompare('<?php echo $product['product_id']; ?>');"><?php echo $button_compare; ?></a></div>
    </div>
    <?php } ?>
  </div>
  <div class="pagination"><?php echo $pagination; ?></div>
  <?php } ?>
  <?php if (!$categories && !$products) { ?>
  <div class="content"><?php echo $text_empty; ?></div>
  <div class="buttons">
    <div class="right"><a href="<?php echo $continue; ?>" class="button"><?php echo $button_continue; ?></a></div>
  </div>
  <?php } ?>

【问题讨论】:

  • 我猜您不想在视图中硬编码产品 ID? (这可能是最简单的解决方案:))
  • 我不太清楚你的意思,但在这一点上,我准备好了!大声笑:)
  • 好吧...如果在 category.tpl 中进行硬编码是一个选项 - 制作您想要显示的产品 ID 数组。检查 $product['product_id'] 是否存在于数组中,并显示它,就是这样。 :)
  • 这听起来绝对应该有效!假设我的产品 ID 是 5、126、70 和 24...你能举个例子说明我如何将它与上面的代码一起使用吗?

标签: php opencart


【解决方案1】:

硬编码产品过滤::)

在 category.tpl 中找到这一行:~ 第 69 行

<div class="product-list"> 

把这个放在下面:foreach 循环从这里开始......你只需要在那里添加额外的条件。

<?php  $ids=array(43,44,45); // array of product id's   ?>
<?php foreach ($products as $product) { if(in_array($product['product_id'],$ids)) {  ?>

……模板代码……

下面,循环结束应该是这样的:

 <?php } }?>  

再添加一个'}',(如果条件必须正确关闭)。应该是 ~119 行。

附:由于您只想过滤一个类别,我想,应该多做一个条件(如果类别 id == 选定类别 -> 过滤产品...)

P.S.2 - 不确定您的意图和期望的目标,但与其使用这种肮脏的技巧,不如使用开放式购物车内置功能(在管理面板中启用/禁用产品),或尝试(如果您的问题过于具体) 制作自定义模型/控制器方法...

【讨论】:

  • @JCBiggar,np,顺便说一句,现在我意识到 - 如果您不想在类别页面上显示(临时)产品,为什么您不会在管理面板中禁用产品?您可以稍后轻松启用它...:))) LOL!
  • @nevermind 为什么要将代码包装到 IF?你总是可以让我们继续。 if (!in_array($product['product_id'], $ignoredProductIds)) 继续;
  • 这确实是一个糟糕的解决方案。而不是限制从数据库填充的结果数量只是具体的 ID 您仍在填充所有相关产品并循环它们以仅显示三个?有时我想知道人们在这里回答时是否动了脑筋......当然在管理中禁用产品是第一手和最简单的解决方案,“硬编码”是直接过滤SQL查询中的产品以限制只想要正在填充产品以节省资源...
  • @shadyyx,是的,你是对的,我在这里回答时没有使用我的大脑,我大部分时间都在使用我的胃。除了坏笑话和“崇高的导师语气”之外,我已经提到修改模板/视图不是很好的解决方案,在管理面板中简单/启用禁用产品将解决问题。定位和更改 SQL 查询更难,我不确定它是否是选项,因为它也会影响其他类别...... :) 但是,我也会删除我的答案。 :)
  • 这并不是为了冒犯您,而是直接针对您,如果听起来像这样,对不起。但是,如果您可以直接在答案中指出这一点,那就太好了,这是一个肮脏的解决方案,而更好的是别的解决方案,这样用户就不会认为他只是学到了一些漂亮的东西并继续以这种方式发展:- )
【解决方案2】:

说实话,我真的不明白为什么要以编程方式解决这样的问题,因为当您有一个自定义类别并且只想显示一些具体的产品时,那么只需要取消链接 此类别中不需要的产品。就这些!

【讨论】:

  • 产品属于这一类。但是在我正在创建的这个特定页面上,我们只想展示某些要展示的产品?您还有其他可行的解决方案吗?
  • 是的,创建一个子类别并只将想要的产品链接到它。然后这个特定页面将指向该子类别,问题应该得到解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多