Все привет! вот чего хочу добиться: site.ru/catalog/ - список разделов site.ru/catalog/technic/ - список подкатегорий выбранного раздела site.ru/catalog/technic/consoles/ - список товаров выбранной подкатегории site.ru/catalog/technic/consoles/xbox - страница товара контроллер 'catalog' (метод index) получает список разделов с помощью модели. Если я выбираю категорию, site.ru/catalog/technic/, не понятно, как правильно обработать technic? В моей голове пока один дурацкий вариант, сделать метод technic и кучу остальных методов названных в честь категорий, но я понимаю, что это не правильно. Подскажите как правильно использовать динамические данные?
Можно отказаться например от technic когда ты в подкатегории, например, если ты заходишь в site.ru/catalog/technic/consoles/, то у тебя путь будет site.ru/catalog/consoles/, т.е. ты любые подкатегории должен обрабатывать как категории. Ну или у тебя должна быть какая то проверка на родительскую категорию
/catalog/ это контроллер остальные параметры следующие за ним, это динамика. тоесть их надо взять и запросить в БД. т.е. site.ru/catalog/ - срабатывает действие index, раз ничего конкретного не запросили, то выбираем товары для Главного меню каталога site.ru/catalog/technic/ - выбираем список товаров и категорий, внутри родительской категории technic site.ru/catalog/technic/consoles/ - выбираем список товаров и категорий, внутри категории consoles site.ru/catalog/technic/consoles/xbox - выбираем список товаров для категории xbox все эти древовидные категории и товары должны быть заведены в БД, естественно
А можно поподробней, вот у меня в файле маршрутов, прописано, что второй url (в данной примере technic) будет методом контроллера catalog. Как мне сделать, чтобы код не искал несуществующий метод, а воспринимал данные,.. ну как аргумент index-метода? вот так я урл'ы разбираю, мне нужно здесь изменить подход или можно непосредственно в контроллере? Код (Text): $url = isset($_GET ['url']) ? $_GET['url'] : null; $url = rtrim ( $url, '/' ); $url = explode ( '/', $url ); if(empty($url[0])) { require 'controllers/index.php'; $controller = new Index(); $controller->index(); return false; } $file = 'controllers/' . $url [0] . '.php'; if(file_exists($file)) { require $file; } else { $this->error(); } $controller = new $url[0]; $controller->loadModel($url[0]); if (isset ( $url [2] )) { if(method_exists($controller, $url[1])) { $controller->{$url [1]} ( $url [2] ); // аналог $controller->function() } else { $this->error(); } } else { if (isset ( $url [1] )) { if(method_exists($controller, $url[1])) { $controller->{$url [1]} (); } else { $this->error(); } } else { $controller->index(); } } Тыкните плз )
Ну например в фреймфорках это уже готово, ты пишешь просто правила для путей, если у тебя что то самописное, тогда парсишь урл на переменные и пытаешься сам составить правило обработки пути.