конкрета5: одна страница для отображения содержимого БД в соответствии с переменным маршрутом родительской страницы

#symfony #routes #render #concrete5

Вопрос:

Скажем, есть страница /каталог, которая является родительской для всех продуктов. У меня могут быть постоянные маршруты со страницами, например /каталог/продукт/1, /каталог/продукт/2 и т. Д.

Но пользователь может выбрать любую другую страницу в качестве родительской страницы для продуктов каталога, например /stock.

Как я могу отображать данные о продуктах в узле переменной, например /{страница переменной}/продукт/{идентификатор}?

Это легко с несколькими страницами для каждого продукта — просто создайте блок «список продуктов» для отображения всех продуктов на родительской странице и блок «продукт» для отображения каждого продукта на дочерней странице списка продуктов.

Но мне не нужен миллион страниц. Мне нужна только 1 страница для отображения содержимого БД любого продукта на родительской странице, где его имя и маршрут могут измениться.

Ответ №1:

Хотя не уверен, что это лучший способ… Следующие работы. Теперь не имеет значения, на какой странице находится список продуктов, о любом ребенке заботятся в /любом/продукте/uid

Контроллер:

 public function action_product($uid = 0)
{
    $product = Product::getByUID($uid);
    if ($product instanceof Product) {
        $this->set('product', $product);
        $this->runAction('product');
    }
    else {
        $this->runAction('view');
    }
}
 

Вид:

 if ($controller->getAction() === 'product') {
    ...
} else {
    ...
}
 

Комментарии:

1. Почему бы и нет view($a, $b, $c) , если второй параметр не «продукт», перейдите к 404. Но тогда это было /<your-single-page>/catalog/product/1 бы так . В любом случае эти пути необходимо добавить вручную в карту сайта.