singletonIf('listings.category.icon', function () { return new static(); }); /** @var static $i */ $i = bff('listings.category.icon'); $i->setRecordID($categoryID); return $i; } public function initSettings() { $this->path = $this->app->path('cats', 'images'); $this->pathTmp = $this->app->path('tmp', 'images'); $this->url = $this->app->url('cats', 'images'); $this->urlTmp = $this->app->url('tmp', 'images'); $this->table = Listings::TABLE_CATEGORIES; $this->fieldID = 'id'; $this->filenameLetters = 4; $variants = $this->getVariants(); if (!empty($variants)) { reset($variants); $this->setVariant(key($variants)); } $this->extensionsAllowed[] = 'svg'; } /** * Формирование ссылки (URL) на иконку категории * @param int $categoryID ID категории * @param string $fileName * @param string $variantKey * @return string */ public function url(int $categoryID, string $fileName, string $variantKey = self::BIG): string { $this->setRecordID($categoryID); if (empty($fileName)) { # иконка-заглушка return $this->url . 'default-' . $variantKey . '.svg'; } return $this->app->filter( 'listings.category.icon.url', $this->getURL($fileName, self::szOriginal), [ 'id' => $categoryID, 'filename' => $fileName, 'size' => $variantKey, ] ); } /** * Список доступных вариантов размеров * @return array */ public function getVariants() { return $this->app->filter('listings.category.icon.variants', [ 'icon_' . self::BIG => [ 'title' => _t('listings', 'Icon (large)'), 'key' => self::BIG, 'sizes' => [ self::szOriginal => ['width' => 140, 'height' => 140, 'o' => true], ], ], 'icon_' . self::SMALL => [ 'title' => _t('listings', 'Icon (small)'), 'key' => self::SMALL, 'sizes' => [ self::szOriginal => ['width' => 70, 'height' => 70, 'o' => true], ], ], ], $this); } /** * @param string $key * @return void */ public function setVariant(string $key) { $list = $this->getVariants(); if (isset($list[$key])) { $this->fieldImage = $key; $this->sizes = $list[$key]['sizes']; } } }