'Характеристики + краткое описание', self::MODE_CHARACTERISTICS_FULL => 'Характеристики + полное описание', self::MODE_SHORT => 'Только краткое описание', self::MODE_FULL => 'Только полное описание', self::MODE_CHARACTERISTICS => 'Только характеристики', ]; public function priceField(): string { return Setting::technicalDescriptionPriceField(); } public function priceLabel(): string { return CommonCatalogItem::PRICE_FIELDS[$this->priceField()]; } public function price(CommonCatalogItem $item): ?float { $value = $item->{$this->priceField()}; return $value === null ? null : (float) $value; } public function formattedPrice(CommonCatalogItem $item): string { $price = $this->price($item); return $price === null ? '' : number_format($price, 2, '.', ' '); } public function description(CommonCatalogItem $item, string $mode): string { $parts = match ($mode) { self::MODE_CHARACTERISTICS_SHORT => [$item->characteristics, $item->technical_description_short], self::MODE_CHARACTERISTICS_FULL => [$item->characteristics, $item->technical_description], self::MODE_SHORT => [$item->technical_description_short], self::MODE_FULL => [$item->technical_description], default => [$item->characteristics], }; return collect($parts) ->map(fn (mixed $value): string => trim((string) $value)) ->filter() ->implode("\n"); } }