Следующий и предыдущий товар по цене

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

в instantshop

#1 11 декабря 2014 в 17:24
В instantshop нужно сделать, чтобы следующий и предыдущий товар показывался по цене. Т.е. следующий товар дороже текущего, а предыдущий — дешевле.

В \components\shop\model.php было так (предыдущий и следующий выбирались по последовательности в категории):

  1. public function getItemNav($item_id, $cat_id) {
  2.  
  3. $ordering = $this->inDB->get_field('cms_shop_items_cats', "item_id={$item_id} AND category_id={$cat_id}", 'ordering');
  4.  
  5. $sql = "SELECT i.id as id, i.seolink as seolink, ic.ordering as ordering, i.title as title
  6. FROM cms_shop_items i, cms_shop_items_cats ic
  7. WHERE ic.item_id = i.id AND i.published = 1
  8. AND ic.category_id = {$cat_id}
  9. AND (ic.ordering < {$ordering} OR ic.ordering > {$ordering})
  10. LIMIT 2";
  11.  
  12. $result = $this->inDB->query($sql);
  13.  
  14. if (!$this->inDB->num_rows($result)){ return false; }
  15.  
  16. $items = array();
  17. $nav = array();
  18.  
  19. while($item = $this->inDB->fetch_assoc($result)){
  20. if($item['ordering'] == $ordering-1){
  21. $nav['prev'] = $item;
  22. } else {
  23. $nav['next']= $item;
  24. }
  25. }
  26.  
  27. return $nav;
  28.  
  29. }
Сделал так:

  1. public function getItemNav($id, $price) {
  2.  
  3. $ordering = $this->inDB->get_field('cms_shop_items', "id={$id} AND price={$price}", 'price');
  4. $sql = "SELECT id, seolink, title, price
  5. FROM cms_shop_items
  6. WHERE published = 1
  7. AND (price < {$ordering} OR price > {$ordering})
  8. LIMIT 2";
  9. $result = $this->inDB->query($sql);
  10.  
  11. if (!$this->inDB->num_rows($result)){ return false; }
  12.  
  13. $items = array();
  14. $nav = array();
  15.  
  16. while($item = $this->inDB->fetch_assoc($result)){
  17. if($item['price'] == $ordering-1){
  18. $nav['prev'] = $item;
  19. } else {
  20. $nav['next']= $item;
  21. }
  22. }
  23.  
  24. return $nav;
  25.  
  26. }
Но следующий и предыдущий товар по цене как-то странно выбирается. Где-то только следующий, где-то — вообще ничего не показывает. Может я где-то ошибку в коде сделал?
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.