Simpla 2: последние купленные

Simpla 2: последние купленные

Дата публикации:
Поделиться:

Открываем api/Orders.php и добавляем туда метод выборки последних заказанных товаров в конец класса заказов (~строка 527) 

    public function get_last_purchases()
    {   
        $query = $this->db->placehold("SELECT p.product_id
            FROM s_purchases p 
            ORDER BY p.order_id DESC 
            LIMIT 100");

        $this->db->query($query);

        return $this->db->results();
    } 

В нем специально не использовали лимиты на вывод, т.к. товар может быть удален или какие другие несоответствия по нему. Возможно решение может покажаться избыточным, но в ходе работы были выявлены ошибки работы MySQL поэтому пришлось делать обработку через PHP.

Следующим шагом будет написание виджета для вывода в шаблон. Для этого откроем файл view/View.php и после инициализации Smarty-модификатора  (~99 строка)

$this->design->smarty->registerPlugin("function", "get_discounted_products", array($this, 'get_discounted_products_plugin'));

добавим наш для вывода последних заказанных товаров

$this->design->smarty->registerPlugin("function", "get_ordered_products",	array($this, 'get_ordered_products'));

И ниже в этом же файле (~262 строка) перед 

public function get_discounted_products_plugin($params, &$smarty)

вставляем тело виджета

  public function get_ordered_products($params, &$smarty)
  {
    if(!isset($params['visible']))
      $params['visible'] = 1;
      
    if(!isset($params['limit']))
      $limit = 10;
    else {
      $limit = $params['limit'];  
      unset($params['limit']); 
    }
      
    if(!empty($params['var']))
    {
      $products_ids = array();  
      foreach($this->orders->get_last_purchases() as $p)
        $products_ids[$p->product_id] = $p->product_id;        
  
      $params['id'] = $products_ids;

      foreach($this->products->get_products($params) as $p)
        $products[$p->id] = $p; 
        
      $result = array();
      foreach($products_ids as $id)
        if(isset($products[$id]) && count($result) < $limit)
          $result[$id] = $products[$id];
         
      $products_images = $this->products->get_images(array('product_id'=>array_keys($result)));
      foreach($products_images as $product_image)
        if(isset($result[$product_image->product_id]) && !isset($result[$product_image->product_id]->image))
          $result[$product_image->product_id]->image = $product_image;
      
      $smarty->assign($params['var'], $result);
    }
  }   

Вот тут мы уже делаем обработку лимита и лишние товары отсеиваем. 

Далее работаем как с обычным виджетом наподобии просмотренных товаров - можно даже просто заменить в шаблоне design/default/index.tpl: вместо get_browsed_products вызвать get_ordered_products и посмотреть результат. Поэтому вывод кода шаблона не вижу смысла приводить :) подсмотрите в просмотренных товарах и сделайте аналогично.

Приятной работы!

Отзывы

Ваш отзыв будет первым
Оставьте отзыв
На него будут приходить уведомление при ответе. На сайте не публикуется

Модули из этой тематики