Эта структура URL предлагается для оптимизации SEO. Поэтому предложение другой структуры не сработает. Предлагаемая структура
example.com/<language>/<country>/<province>/<city>/<product>
example.com/en/spain
Я хотел бы указать на CountryController
indexAction
, поскольку каждый из них отличается от других, и иногда думает, что в макете также есть изменения.
Показать контент на английском языке о стране Испания. И для запроса example.com/en/india
должен показать об Индии на английском языке и example.com/es/spain
должен показать испанскую страницу для страны Испания.
example.com/en/spain/barcelona
Указывает на CountryController
provinceAction
Страница содержания для испанской провинции Барселона на английском языке.
example.com/en/spain/barcelona/barcelona
Указывает на CountryController
cityAction
Страница содержания для города Барселона в провинции Барселона страны Испания на английском языке.
example.com/en/spain/barcelona/barcelona/taxis
Очки для CountryController
productAction
Страница содержания для продукта в городе Барселона, провинция Барселона, Испания на английском языке.
Да, мы можем добавить маршрут как
$router = $ctrl->getRouter();
$router->addRoute(
'country_spain',
new Zend_Controller_Router_Route('spain',
array('controller' => 'country',
'action' => 'index'))
);
Но в этом случае нам нужно добавить весь список стран в маршрут. то есть Индия, Китай, Пакистан, США и т. д.
Тогда будет добавлено country_province
$router = $ctrl->getRouter();
$router->addRoute(
'country_spain_barcelona',
new Zend_Controller_Router_Route('spain',
array('controller' => 'country',
'action' => 'province'))
);
Так что, если у нас 50 провинций, будет ужасно добавить количество стран, умноженное на количество провинций для стран, и это станет больше маршрутов при переходе в город и продукты.
Вы можете сказать добавить что-то вроде
$router = $ctrl->getRouter();
$router->addRoute(
'country',
new Zend_Controller_Router_Route('country/:country/:province/:city/:product',
array('controller' => 'country',
'action' => 'index'))
);
Но в этом случае это похоже на то, что мы будем указывать на то же действие, но при изменении представления запросов, и это станет полным контроллером.
Проблема с Zend_Controller_Router_Route_Regex в том, что у нас должно быть что-то вроде
example.com/en/country/spain/barcelona/barcelona/taxis
а также все движется к одному действию. Поскольку представление совершенно иное, оно становится грязным. Может быть, что-то вроде частичных я могу использовать. Но мне интересно, есть ли другое хорошее решение для этой проблемы? Это устаревший проект, поэтому у меня есть ограничения на него, и версия #ZF - 1.6.
Есть пример чего-то похожего
http://www.travelportal.info/
http://www.travelportal.info/asia
http://www.travelportal.info/asia/india
http://www.travelportal.info/asia/india/business-currency-economy
Как вы думаете, они сделали это, добавят ли они маршруты, по крайней мере, в Азию, Европу?
Я смог заставить его работать как
example.com/en/spain
Указывает на CountryController
indexAction
example.com/en/spain/barcelona
Указывает на CountryController
provinceAction
example.com/en/spain/barcelona/barcelona
Указывает на CountryController
cityAction
example.com/en/spain/barcelona/barcelona/taxis
Указывает на CountryController
productAction
Но там мне нужно добавить 4 маршрута, и будет трудно вручную добавить маршрут, подобный этому.
Предложения и критика приветствуются, чтобы сделать это лучше.