[ 'pattern' => 'item/add', 'callback' => ItemFormPage::class, 'priority' => 75, ], # объявления: форма редактирования объявления 'listings-item.edit' => [ 'pattern' => 'item/edit/{id}', 'callback' => [ItemFormPage::class, 'edit'], 'priority' => 76, ], # объявления: активация 'listings-item.activate' => [ 'pattern' => 'item/activate', 'callback' => 'listings/activate/', 'priority' => 77, ], # объявления: страница продвижения объявления 'listings-item.promote' => [ 'pattern' => 'item/promote', 'callback' => 'listings/promote/', 'priority' => 78, ], 'listings-item.status' => [ 'pattern' => 'item/status/{action}/{id}', 'callback' => 'listings/status/', 'priority' => 79, ], # просмотр объявления 'listings-view' => [ 'pattern' => $prefix . '/{category}/{keyword}-{id}.html', 'callback' => function ($category, $keyword, $id) { return ItemPage::handleRoute($id); }, 'page' => ItemPage::class, 'priority' => 80, ], # просмотр объявления (при изменении формирования URL) 'listings-view-geo' => [ 'pattern' => '{any}/' . $prefix . '/{category}/{keyword}-{id}.html', 'callback' => function ($category, $keyword, $id) { return ItemPage::handleRoute($id); }, 'page' => ItemPage::class, 'priority' => 90, ], # просмотр объявления + посадочные страницы категорий 'listings-view-landingpages' => [ 'pattern' => '{any}/{keyword}-{id}.html', 'callback' => function ($keyword, $id) { return ItemPage::handleRoute($id); }, 'page' => ItemPage::class, 'priority' => 100, ], # просмотр объявления 'listings-item.view' => [ 'pattern' => '{keyword}-{id}.html', 'callback' => function ($keyword, $id) { return ItemPage::handleRoute($id); }, 'page' => ItemPage::class, 'url' => function ($p, $o) use ($prefix, $useViewPrefix, $useViewCategory, $useViewGeo) { # формируем ссылку с учетом указанной области (region), [города (city)] # либо с учетом текущих настроек фильтра по региону if (! $useViewGeo || ! empty($p['no_region'])) { unset($p['city']); $deep = Geo::maxDeep(); for ($i = 1; $i <= $deep; $i++) { unset($p['region' . $i]); } } $geo = Geo::url($p, $o['dynamic'], false); $cat = ''; if ($useViewPrefix) { if ($useViewCategory) { if (empty($p['landing_url'])) { $cat = '/' . $prefix . (!empty($p['category']) ? '/' . $p['category'] : ''); } else { $cat = $p['landing_url']; } } else { $cat = '/' . $prefix; } } elseif ($useViewCategory) { if (empty($p['landing_url'])) { $cat = !empty($p['category']) ? '/' . $p['category'] : ''; } else { $cat = $p['landing_url']; } } $url = $geo . $cat; if ($url) { $url = rtrim($url, '/'); } return $url . '/' . $p['keyword'] . '-' . (!empty($p['id']) ? $p['id'] : '{item-id}') . '.html'; }, 'priority' => 101, ], # поиск объявлений 'listings-items.search' => [ 'pattern' => $prefix . '{/keyword/?}', 'callback' => function ($category = '') { return SearchPage::handleRoute($category); }, 'page' => [SearchPage::class, SearchCategoryPage::class, CategoryPage::class], 'url' => function ($p, $o) use ($prefix) { # формируем ссылку с учетом указанной области (region), [города (city)] # либо с учетом текущих настроек фильтра по региону if (empty($p['landing_url'])) { $url = Geo::url($p, $o['dynamic']) . (empty($p['skip_prefix']) ? $prefix . '/' : '') . (!empty($p['keyword']) ? $p['keyword'] . '/' : ''); } else { $url = Geo::url($p, $o['dynamic'], false) . $p['landing_url']; } if (! empty($p['q'])) { $url .= Url::query($p, ['landing_url', 'skip_prefix', 'keyword']); } return $url; }, 'priority' => 110, ], # поиск объявлений (при изменении формирования URL: host/region/ => host/) 'listings-items.search-geo' => [ 'pattern' => '{any}/' . $prefix . '{/keyword/?}', 'callback' => function ($category = '') { return SearchPage::handleRoute($category); }, 'page' => [SearchPage::class, SearchCategoryPage::class, CategoryPage::class], 'priority' => 120, ], # кабинет: список моих объявлений 'listings-my.items' => [ 'pattern' => 'cabinet/items', 'callback' => ItemsPage::class, ], # кабинет: список избранных объявлений 'listings-my.favs' => [ 'pattern' => 'cabinet/favs', 'callback' => FavoritesPage::class, ], # Все категории 'listings-categories' => [ 'pattern' => '/categories/', 'callback' => AllCategoriesPage::class, 'url' => function ($p, $o) { # формируем ссылку с учетом указанного региона (region) return Geo::url($p, $o['dynamic']) . 'categories/'; }, ], # RSS-лента 'listings-rss' => [ 'pattern' => 'rss{/any?}', 'callback' => 'listings/rss/', 'priority' => 150, ], ];