104 lines
4.9 KiB
PHP
104 lines
4.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Controllers;
|
|
|
|
use App\Repositories\CategoryRepository;
|
|
use App\Repositories\ProductRepository;
|
|
|
|
final class CatalogController
|
|
{
|
|
public function index(): void
|
|
{
|
|
$categoryRepository = new CategoryRepository();
|
|
$productRepository = new ProductRepository();
|
|
|
|
view('catalog/index', [
|
|
'title' => 'Каталог Рыбсток - рыба, морепродукты, мясо, сыры и продукты',
|
|
'metaDescription' => 'Полный каталог Рыбсток: рыба, морепродукты, икра, мясо, сыры, полуфабрикаты, овощи, ягоды и бакалея по стоковым ценам с доставкой по Москве и Московской области.',
|
|
'metaKeywords' => 'каталог Рыбсток, купить рыбу Москва, морепродукты Москва, мясо доставка Москва, сыры доставка, икра, полуфабрикаты, овощи ягоды заморозка, бакалея, продукты по стоковым ценам',
|
|
'breadcrumbs' => [
|
|
['title' => 'Главная', 'url' => '/'],
|
|
['title' => 'Каталог'],
|
|
],
|
|
'categories' => $categoryRepository->tree(),
|
|
'currentCategory' => null,
|
|
'products' => $productRepository->catalogPreview(48),
|
|
]);
|
|
}
|
|
|
|
public function category(string $slug): void
|
|
{
|
|
$categoryRepository = new CategoryRepository();
|
|
$productRepository = new ProductRepository();
|
|
$category = $categoryRepository->findBySlug($slug);
|
|
|
|
if ($category === null) {
|
|
http_response_code(404);
|
|
view('pages/404', [
|
|
'title' => 'Категория не найдена - Рыбсток',
|
|
'breadcrumbs' => [
|
|
['title' => 'Главная', 'url' => '/'],
|
|
['title' => 'Каталог', 'url' => '/catalog'],
|
|
['title' => 'Категория не найдена'],
|
|
],
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$categoryName = (string) $category['name'];
|
|
|
|
view('catalog/index', [
|
|
'title' => $category['seo_title'] ?: $categoryName . ' - купить в Рыбсток с доставкой по Москве',
|
|
'metaDescription' => $category['seo_description'] ?: $categoryName . ' в интернет-складе Рыбсток: качественная продукция по стоковым ценам, фасовки для дома и бизнеса, доставка по Москве и Московской области.',
|
|
'metaKeywords' => $category['seo_keywords'] ?: $categoryName . ', купить ' . $categoryName . ' Москва, ' . $categoryName . ' доставка, Рыбсток, продукты по стоковым ценам',
|
|
'breadcrumbs' => $categoryRepository->breadcrumbs((int) $category['id']),
|
|
'categories' => $categoryRepository->tree(),
|
|
'currentCategory' => $category,
|
|
'products' => $productRepository->forCategory((int) $category['id'], 48),
|
|
]);
|
|
}
|
|
|
|
public function product(string $slug): void
|
|
{
|
|
$categoryRepository = new CategoryRepository();
|
|
$productRepository = new ProductRepository();
|
|
$product = $productRepository->findBySlug($slug);
|
|
|
|
if ($product === null) {
|
|
http_response_code(404);
|
|
view('pages/404', [
|
|
'title' => 'Товар не найден - Рыбсток',
|
|
'breadcrumbs' => [
|
|
['title' => 'Главная', 'url' => '/'],
|
|
['title' => 'Каталог', 'url' => '/catalog'],
|
|
['title' => 'Товар не найден'],
|
|
],
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$breadcrumbs = [
|
|
['title' => 'Главная', 'url' => '/'],
|
|
['title' => 'Каталог', 'url' => '/catalog'],
|
|
];
|
|
|
|
if (!empty($product['display_category_id'] ?? $product['category_id'] ?? null)) {
|
|
$breadcrumbs = $categoryRepository->breadcrumbs((int) ($product['display_category_id'] ?? $product['category_id']));
|
|
}
|
|
|
|
$breadcrumbs[] = ['title' => (string) $product['name']];
|
|
|
|
view('catalog/product', [
|
|
'title' => $product['seo_title'] ?: $product['name'] . ' - купить в Рыбсток',
|
|
'metaDescription' => $product['seo_description'] ?: $product['short_description'] ?: '',
|
|
'metaKeywords' => $product['seo_keywords'] ?: '',
|
|
'breadcrumbs' => $breadcrumbs,
|
|
'product' => $product,
|
|
'variants' => $productRepository->variantsForProduct((int) $product['id']),
|
|
'images' => $productRepository->imagesForProduct((int) $product['id']),
|
|
]);
|
|
}
|
|
}
|