Similar items * @copyright Tamaranga */ class SimilarItemsBlock extends GalleryListBlock { /** @var string block title */ public $title; /** @var int items limit */ public $limit = 3; /** @var int item id to compare to */ public $itemId = 0; /** @var array search categories id */ public $categories = []; /** @var int category type id */ public $categoryType = Listings::TYPE_OFFER; /** @var int search region id */ public $regionId = 0; public function init() { parent::init(); $this->setTemplate('item/similar', 'listings'); $this->setTitle(_t('@listings', 'Similar Listings')); $this->setKey('similar'); $this->limit = 3; } public function data() { $data = parent::data(); if (! $this->itemId) { return false; } $filter = $this->prepareItemsFilter(); $categories = $this->categories; $i = sizeof($categories); while ($i--) { $filter[':cat-filter'] = $categories; array_pop($categories); $this->loadItems($filter, [ 'orderBy' => 'publicated_order DESC, id DESC', 'limit' => $this->limit, ]); if ($this->items) { break; } } unset($i); if (empty($this->items)) { return false; } return $data; } public function prepareItemsFilter() { $filter = [ 'is_publicated' => 1, 'status' => Listings::STATUS_PUBLICATED, ]; if ($this->regionId > 0) { $filter[':region-filter'] = $this->regionId; } if (is_numeric($this->categoryType)) { $filter['cat_type'] = $this->categoryType; } if ($this->itemId > 0) { $filter['id'] = ['!=', $this->itemId]; } return $filter; } public function settingsForm($form) { $form->text('title', _t('@', 'Title'), _t('listings', 'Similar Listings', true)); $form->number('limit', _t('@listings', 'Number of similar listings'), 1, 20, 1, $this->limit) ->width(100) ->tip(_t('@listings', 'Number of similar listings on the "Item View" page')); } }