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 и посмотреть результат. Поэтому вывод кода шаблона не вижу смысла приводить :) подсмотрите в просмотренных товарах и сделайте аналогично.