Уважаемые кастольеры! Я в Joomla новичок, и не знаю в какую тему задать вопрос. Подскажите, пожалуйста, в том ли направлении я копаю? На сайте установлена Joomla. И есть на сайте отдельный php-файл в отдельной папочке - никак не связанный с Joomla. Я пытаюсь сделать ЧПУ, из такого: https://mysite.ru/other/script.php?taram=1¶m=2 в такое: https://mysite.ru/bugaga Для этого я вклинился в components/com_content/router.php и там начал писать свой код в build и parse. Код отрабатывает, я возвращаю то, что нужно. Но в итоге не работает: при вводе "https://mysite.ru/bugaga" переход происходит на главную страницу сайта. Может вообще я не должен вклиниваться в код Joomla для этого? Может надо в .htaccess? Или надо в index.php?
Ну это лучше чем в ядре. Изучи применение класса роутера и подключай для создания ссылки ЧПУ. Код (PHP): require_once(JPATH_SITE.DS.'components'.DS.'com_content'.DS.'router.php'); JRoute::_($link)
OlegK , спасибо за ответ. Когда я изучал написание роутера, перелопатил уже много информации, там везде пишут на примере "для вашего компонента". А тут другой случай: это просто сторонний php-файл, даже не в папке компонентов joomla. Вот и вопрос, куда вклинивать роутинг. Сначала хотел в .htaccess , но алгоритм роутинга непростой, его можно сделать только через php.
Но это же не роутинг,а обычный редирект . Код (PHP): RewriteCond %{QUERY_STRING} ^taram=1¶m=2$ RewriteRule ^(.*)$ https://mysite.ru/bugaga? [R]
Олег, но нужно чтобы было ЧПУ, т.е. если в адресной строке ввели https://mysite.ru/bugaga, то на самом деле вызывался бы скрипт: https://mysite.ru/other/script.php?taram=1¶m=2 Т.е. нужно в обе стороны. И build, и parse. --- добавлено: 12.09.2017 --- А на самом деле папки и файла https://mysite.ru/bugaga не существует. --- добавлено: 12.09.2017, первое сообщение размещено: 12.09.2017 --- Может этот мой вопрос вообще к joomla не относится, я не знаю... Правильно ли понимаю, что по умолчанию, после установки Joomla, файл .htaccess перенаправляет все ссылки в index.php, который уже разруливает, что именно открывать, какой материал или статью? Я пробовал встроиться в router.php, но не работает наверное из-за того, что я хочу перенаправить в отдельный script.php, который не относится к материалам.
создай папку для компонента и свой файл router.php , в котором и будешь Ну не совсем. Апач ищет папку по пути указанному в урл и если не находит, обращается к index.php,а юhtaccess вносит свои директивы.
да нет, наверное это не поможет, типа свой компонент создавать. Я же пробовал уже в файл "components/com_content/router.php" инклюдить свой myrouter.php и вызывать build и parse моего файла. Кстати, забыл сказать, путь существует: https://mysite.ru/other/script.php Наверное, придется внедряться в корневой index.php и там разбирать _GET. Но не понятно тогда, как подставлять адресную строку в браузере пользователя, чтобы она выглядела как https://mysite.ru/bugaga , когда пользователь зашел по адресу https://mysite.ru/other/script.php?taram=1¶m=2 --- добавлено: 12.09.2017, первое сообщение размещено: 12.09.2017 --- Проверил, через добавление правил в .htaccess работает не правильно. Он ведь просто редиректит на адрес https://mysite.ru/bugaga, который не существует. Следовательно 404. Как же быть? --- добавлено: 12.09.2017 --- Переформулирую вопрос: Как сделано в известных соц.сетях, когда вводишь адрес: vn.com/vasya на самом деле отрабатывает vn.com/profile.php?id=vasya А если, наоборот, ввести адрес vn.com/profile.php?id=vasya то отобразится все равно vn.com/vasya Как они это делают?
Папка реальная должна быть все равно, в которой скрипт будет обрабатывать параметры. А редиректы писать в .htaccess
Да, htaccess и RewriteRule уже почти казались решением этой задачи, но есть условия, которые htaccess в принципе побороть не может. Придется все же писать свой компонент под джумла ради такого роутинга. --- добавлено: 14.09.2017, первое сообщение размещено: 13.09.2017 --- Задача решена. Спасибо всем откликнувшимся. Очень помогла статья http://gency.ru/single-entry-point Решил таким способом: Вклинился в корневой файл index.php, вставил вызов функции (при true сразу выхожу из index.php): Код (CODE): function checkUserAccount() { $p=strtolower(preg_replace('#//+#','/',$_SERVER['REQUEST_URI'])); if (strlen($_SERVER['QUERY_STRING'])) $p=substr($p,0,-(strlen($_SERVER['QUERY_STRING'])+1)); if (count($pa=explode('/',$px=trim($p,'/'),2))<2) $pa[]=''; if ((count($pa) >= 1) and ($pa[0] является аккаунтом)) { $_GET['id'] = $pa[0]; include './profile/index.php'; return true; } return false; }
ЧПУ в том, что если вводить vn.com/vasya, то реально работает скрипт vn.com/profile.php?id=vasya но в адресной строке при этом отображается vn.com/vasya