Joomla 3.x ЧПУ

Тема в разделе "Программирование", создана пользователем gritts80, 12.09.2017.

  1. Offline

    gritts80 Недавно здесь

    Регистрация:
    12.09.2017
    Сообщения:
    6
    Симпатии:
    0
    Пол:
    Мужской
    Уважаемые кастольеры!

    Я в Joomla новичок, и не знаю в какую тему задать вопрос.

    Подскажите, пожалуйста, в том ли направлении я копаю?

    На сайте установлена Joomla. И есть на сайте отдельный php-файл в отдельной папочке - никак не связанный с Joomla. Я пытаюсь сделать ЧПУ,
    из такого:

    https://mysite.ru/other/script.php?taram=1&param=2

    в такое:

    https://mysite.ru/bugaga

    Для этого я вклинился в components/com_content/router.php и там начал писать свой код в build и parse. Код отрабатывает, я возвращаю то, что нужно. Но в итоге не работает: при вводе "https://mysite.ru/bugaga" переход происходит на главную страницу сайта.

    Может вообще я не должен вклиниваться в код Joomla для этого? Может надо в .htaccess? Или надо в index.php?
     
  2.  
  3. OlegK
    Offline

    OlegK Russian Joomla! Team Команда форума ⇒ Профи ⇐

    Регистрация:
    17.01.2011
    Сообщения:
    7 813
    Симпатии:
    771
    Пол:
    Мужской
    Ну это лучше чем в ядре. Изучи применение класса роутера и подключай для создания ссылки ЧПУ.
    Код (PHP):
    1. require_once(JPATH_SITE.DS.'components'.DS.'com_content'.DS.'router.php');
    2. JRoute::_($link)
     
    Последнее редактирование: 12.09.2017
  4. Offline

    gritts80 Недавно здесь

    Регистрация:
    12.09.2017
    Сообщения:
    6
    Симпатии:
    0
    Пол:
    Мужской
    OlegK , спасибо за ответ. Когда я изучал написание роутера, перелопатил уже много информации, там везде пишут на примере "для вашего компонента". А тут другой случай: это просто сторонний php-файл, даже не в папке компонентов joomla. Вот и вопрос, куда вклинивать роутинг.
    Сначала хотел в .htaccess , но алгоритм роутинга непростой, его можно сделать только через php.
     
  5. OlegK
    Offline

    OlegK Russian Joomla! Team Команда форума ⇒ Профи ⇐

    Регистрация:
    17.01.2011
    Сообщения:
    7 813
    Симпатии:
    771
    Пол:
    Мужской
    Но это же не роутинг,а обычный редирект .
    Код (PHP):
    1. RewriteCond %{QUERY_STRING} ^taram=1&param=2$
    2. RewriteRule ^(.*)$  https://mysite.ru/bugaga? [R]
     
  6. Offline

    gritts80 Недавно здесь

    Регистрация:
    12.09.2017
    Сообщения:
    6
    Симпатии:
    0
    Пол:
    Мужской
    Олег, но нужно чтобы было ЧПУ, т.е. если в адресной строке ввели https://mysite.ru/bugaga, то на самом деле вызывался бы скрипт:
    https://mysite.ru/other/script.php?taram=1&param=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, который не относится к материалам.
     
  7. OlegK
    Offline

    OlegK Russian Joomla! Team Команда форума ⇒ Профи ⇐

    Регистрация:
    17.01.2011
    Сообщения:
    7 813
    Симпатии:
    771
    Пол:
    Мужской
    создай папку для компонента и свой файл router.php , в котором и будешь
    Ну не совсем. Апач ищет папку по пути указанному в урл и если не находит, обращается к index.php,а юhtaccess вносит свои директивы.
     
  8. Offline

    gritts80 Недавно здесь

    Регистрация:
    12.09.2017
    Сообщения:
    6
    Симпатии:
    0
    Пол:
    Мужской
    да нет, наверное это не поможет, типа свой компонент создавать. Я же пробовал уже в файл "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&param=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

    Как они это делают?
     
  9. OlegK
    Offline

    OlegK Russian Joomla! Team Команда форума ⇒ Профи ⇐

    Регистрация:
    17.01.2011
    Сообщения:
    7 813
    Симпатии:
    771
    Пол:
    Мужской
    Папка реальная должна быть все равно, в которой скрипт будет обрабатывать параметры. А редиректы писать в .htaccess
     
  10. Offline

    gritts80 Недавно здесь

    Регистрация:
    12.09.2017
    Сообщения:
    6
    Симпатии:
    0
    Пол:
    Мужской
    Да, htaccess и RewriteRule уже почти казались решением этой задачи, но есть условия, которые htaccess в принципе побороть не может. Придется все же писать свой компонент под джумла ради такого роутинга.
    --- добавлено: 14.09.2017, первое сообщение размещено: 13.09.2017 ---
    Задача решена. Спасибо всем откликнувшимся.
    Очень помогла статья http://gency.ru/single-entry-point

    Решил таким способом:
    Вклинился в корневой файл index.php, вставил вызов функции (при true сразу выхожу из index.php):

    Код (CODE):
    1. function checkUserAccount()
    2. {
    3.     $p=strtolower(preg_replace('#//+#','/',$_SERVER['REQUEST_URI']));
    4.     if (strlen($_SERVER['QUERY_STRING'])) $p=substr($p,0,-(strlen($_SERVER['QUERY_STRING'])+1));
    5.     if (count($pa=explode('/',$px=trim($p,'/'),2))<2) $pa[]='';
    6.     if ((count($pa) >= 1) and ($pa[0] является аккаунтом))
    7.     {
    8.         $_GET['id'] = $pa[0];
    9.         include './profile/index.php';
    10.         return true;
    11.     }
    12.     return false;
    13. }
     
  11. OlegK
    Offline

    OlegK Russian Joomla! Team Команда форума ⇒ Профи ⇐

    Регистрация:
    17.01.2011
    Сообщения:
    7 813
    Симпатии:
    771
    Пол:
    Мужской
    А ЧПУ где ?
     
  12. Offline

    gritts80 Недавно здесь

    Регистрация:
    12.09.2017
    Сообщения:
    6
    Симпатии:
    0
    Пол:
    Мужской
    ЧПУ в том, что если вводить vn.com/vasya, то реально работает скрипт
    vn.com/profile.php?id=vasya

    но в адресной строке при этом отображается
    vn.com/vasya
     

Поделиться этой страницей

Загрузка...