0 Пользователей и 1 Гость просматривают эту тему.
  • 19 Ответов
  • 207 Просмотров
*

gritts80

  • Новичок
  • 10
  • 0 / 0
ЧПУ
« : 12.09.2017, 09:00:17 »
Уважаемые кастольеры!

Я в 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?
Код! Хардкод!
*

Aleks.Denezh

  • Живу я здесь
  • 2955
  • 388 / 4
Re: ЧПУ
« Ответ #1 : 12.09.2017, 11:58:37 »
Для этого я вклинился в components/com_content/router.php и там начал писать свой код в build и parse. Код отрабатывает, я возвращаю то, что нужно. Но в итоге не работает: при вводе "https://mysite.ru/bugaga" переход происходит на главную страницу сайта.
Я хочу что бы мой бензиновый мерседес ездил на газе, для этого я влез в электромотор моего ниссана, и почему то ничего не работает.. странно... :dry:

Может вообще я не должен вклиниваться в код Joomla для этого? Может надо в .htaccess? Или надо в index.php?
Вы не должны вклиниваться в код Joomla, и index.php тронув вам не поможет! Вся логика сайта идет через файл index.php даже если вы внесёте какие либо правки в него, то запустив mysite.ru/other/script.php?taram=1&param=2 ничего не произойдёт ибо запустится файл /other/script.php, а не /index.php

А по нормальному вам нужен компонент самописный где вы и сможете настраивать роутинг, только уже в самом самописном компоненте, а не в com_contetn для каждого компонента свой роутер!
« Последнее редактирование: 12.09.2017, 12:09:48 от Aleks.Denezh »
*

zikkuratvk

  • Живу я здесь
  • 4051
  • 292 / 2
  • Разрабатываем для Joomla
Re: ЧПУ
« Ответ #2 : 12.09.2017, 13:37:25 »
Теоретически можно настроить правила преобразования урл через htaccess и ни куда вклиниваться не нужно будет... ну либо совсем простой вариант... взять php модуль вставить туда ваш скрипт и вывести этот модуль в материале Joomla.
Хочется уникальное расширение? ===>>>> JoomLine - Разрабатываем расширения под заказ.
Использую хостинг TimeWeb и Reg
*

gritts80

  • Новичок
  • 10
  • 0 / 0
Re: ЧПУ
« Ответ #3 : 12.09.2017, 13:55:06 »
Цитировать
запустив mysite.ru/other/script.php?taram=1&param=2 ничего не произойдёт ибо запустится файл /other/script.php, а не /index.php[/size]
Aleks.Denezh, за это спасибо! Вроде простая истина, а что-то не доходило ))


Цитировать
настроить правила преобразования урл через htacces[/size][size=78%][/size][/color]
zikkuratvk, спасибо за предложение, а в обратную сторону это работать будет? т.е человек зашел хоть на https://mysite.ru/bugaga, хоть на https://mysite.ru/other/script.php?taram=1&param=2,
а в адресной строке всегда отображается https://mysite.ru/bugaga.
Мне почему-то кажется, что не сработает.
Код! Хардкод!
*

gritts80

  • Новичок
  • 10
  • 0 / 0
Re: ЧПУ
« Ответ #4 : 12.09.2017, 15:32:19 »
Проверил, через добавление правил в .htaccess работает не правильно. Он ведь просто редиректит на адрес https://mysite.ru/bugaga, который не существует. Следовательно 404.

Как же быть?
Код! Хардкод!
*

Aleks.Denezh

  • Живу я здесь
  • 2955
  • 388 / 4
Re: ЧПУ
« Ответ #5 : 12.09.2017, 15:49:42 »
Как же быть?
Развлекаться:
1. http://www.visiospark.com/mod-rewrite-rule-generator/
2. http://www.generateit.net/mod-rewrite/index.php

Но лучший вариант это использовать компонент для всего этого!
*

gritts80

  • Новичок
  • 10
  • 0 / 0
Re: ЧПУ
« Ответ #6 : 12.09.2017, 16:26:43 »
Развлекаться:
1. http://www.visiospark.com/mod-rewrite-rule-generator/
2. http://www.generateit.net/mod-rewrite/index.php

Но лучший вариант это использовать компонент для всего этого!

После развлечений  ;D стало понятно , что mod_rewrite никак не решит эту задачу. Всегда переходит на 404.

Наверное , надо решить хаком. На каком-то сайте видел, что стоит обработка ErrorDocument 404 на вывоз другого .php, в котором можно понять что за адрес пришел
Код! Хардкод!
*

gritts80

  • Новичок
  • 10
  • 0 / 0
Re: ЧПУ
« Ответ #7 : 12.09.2017, 16:40:20 »
Переформулирую вопрос:

Как сделано в известных соц.сетях, когда вводишь адрес:

vn.com/vasya

на самом деле отрабатывает

vn.com/profile.php?id=vasya

А если, наоборот, ввести адрес vn.com/profile.php?id=vasya
то отобразится все равно vn.com/vasya

Как они это делают?
Код! Хардкод!
*

robert

  • Живу я здесь
  • 4254
  • 406 / 15
Re: ЧПУ
« Ответ #8 : 12.09.2017, 17:19:50 »
Вы правильно поняли, что это делает router. Только для каждого компонента он свой. build() строит красивый url, а parse() его разбирает, чтобы выдать нужный контент.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

zikkuratvk

  • Живу я здесь
  • 4051
  • 292 / 2
  • Разрабатываем для Joomla
Re: ЧПУ
« Ответ #9 : 12.09.2017, 17:20:12 »
Ваш пример будет такой:

Код
RewriteEngine On
RewriteRule ^([^/]*)$ /profile.php?id=$1 [L]
Хочется уникальное расширение? ===>>>> JoomLine - Разрабатываем расширения под заказ.
Использую хостинг TimeWeb и Reg
*

gritts80

  • Новичок
  • 10
  • 0 / 0
Re: ЧПУ
« Ответ #10 : 12.09.2017, 17:23:43 »
zikkuratvk, не сработает, т.к. по сути сделает редирект, в итоге получится ошибка 404, т.к папки /vasya реально не существует
Код! Хардкод!
*

zikkuratvk

  • Живу я здесь
  • 4051
  • 292 / 2
  • Разрабатываем для Joomla
Re: ЧПУ
« Ответ #11 : 12.09.2017, 17:24:41 »
Там просто у человека разрыв шаблона... :-)
дело в том... что он подключает сторонний скрипт который находится в пространстве жумла и правила преобразования url дествуют Joomla... )) а если заглянуть в htacces Joomla сразу все будет понятно... он пытается обработать ссылку /vasya средствами Joomla и ясно дело, что выдается 404 ошибка.
Хочется уникальное расширение? ===>>>> JoomLine - Разрабатываем расширения под заказ.
Использую хостинг TimeWeb и Reg
*

gritts80

  • Новичок
  • 10
  • 0 / 0
Re: ЧПУ
« Ответ #12 : 12.09.2017, 17:26:41 »
да, у меня уже реально разрыв шаблона.
я с этой задачей бьюсь несколько дней.
писал уже и свой router.php, правил htaccess, index.php, разные варианты.
но ничего не работает.
хотя наверное должно быть простое решение, чувствую хожу где-то рядом
Код! Хардкод!
*

zikkuratvk

  • Живу я здесь
  • 4051
  • 292 / 2
  • Разрабатываем для Joomla
Re: ЧПУ
« Ответ #13 : 12.09.2017, 17:26:56 »
не сработает, т.к. по сути сделает редирект, в итоге получится ошибка 404, т.к папки /vasya реально не существует
RewriteRule вообще за этим и нужен чтоб делать виртуальные вещи реальными)))
Я советую просто прочитать, что вы делаете, прежде чем делать и сразу все понятно станет...
Хочется уникальное расширение? ===>>>> JoomLine - Разрабатываем расширения под заказ.
Использую хостинг TimeWeb и Reg
*

gritts80

  • Новичок
  • 10
  • 0 / 0
Re: ЧПУ
« Ответ #14 : 12.09.2017, 17:42:20 »
Создал в корне сайта файл profile.php.
При обращении к нему по полному пути (вида vn.com/profile.php?id=vasya) все хорошо.

Вставил в .htaccess код:

Код
RewriteEngine On
RewriteRule ^([^/]*)$ /profile.php?id=$1 [L]

Стала выходить ошибка 500 Internal Server Error в обоих случаях:
vn.com/profile.php?id=vasya
vn.com/vasya

Что-то я запутался...
« Последнее редактирование: 12.09.2017, 17:50:12 от gritts80 »
Код! Хардкод!
*

Septdir

  • Живу я здесь
  • 2741
  • 133 / 3
  • JoomlaZen
Re: ЧПУ
« Ответ #15 : 12.09.2017, 20:11:37 »
1. Не стоит пихать отдельные скрипты а подавно скрипты с каким то выводом отдельно. Это элементарно не безопасно. Пишите свой компонент. Если сам код готов, и там нет извращений то это 1-3 часа работы и будет вам и view и model и controler с router
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
Мои Контакты | Мой GitHub | JoomlaZen
*

robert

  • Живу я здесь
  • 4254
  • 406 / 15
Re: ЧПУ
« Ответ #16 : 12.09.2017, 22:50:22 »
gritts80, htaccess вам не поможет: он перенаправляет с одного реального URL'a на другой реальный, а ваш https://mysite.ru/bugaga взят с потолка.
Система должна понять, что https://mysite.ru/bugaga - на самом деле https://mysite.ru/other/script.php?taram=1&param=2. Для этого и нужен router, который по структуре URL'a определяет, каким параметрам строки запроса он соответствует. А без компонента со своими view в связке с меню задачу решить очень трудно.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

gritts80

  • Новичок
  • 10
  • 0 / 0
Re: ЧПУ
« Ответ #17 : 13.09.2017, 12:39:04 »
Да, htaccess и RewriteRule уже почти казались решением этой задачи, но есть условия, которые htaccess в принципе побороть не может. Придется все же писать свой компонент под джумла ради такого роутинга.
Код! Хардкод!
*

gritts80

  • Новичок
  • 10
  • 0 / 0
Re: ЧПУ
« Ответ #18 : 14.09.2017, 08:13:17 »
Задача решена. Спасибо всем откликнувшимся.
Очень помогла статья http://gency.ru/single-entry-point

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

Код
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;
}
Код! Хардкод!
*

Aleks.Denezh

  • Живу я здесь
  • 2955
  • 388 / 4
Re: ЧПУ
« Ответ #19 : 14.09.2017, 11:33:30 »
Очень помогла статья http://gency.ru/single-entry-point
Статья из цикла как делать не надо?)

Вклинился в корневой файл index.php, вставил вызов функции (при true сразу выхожу из index.php):
А теперь при каждом обновлении Joomla вам придётся этот код "вклинивать" заново!

А всего лишь надо было сделать свой компонент, например сгенерировав каркас его через какой либо сервис, например: СОЗДАНИЕ КОМПОНЕНТА,
Перенести функционал в него (даже если не знаете как работать с MVC в Joomla то могли бы тупо в вид вставить весь ваш код), и настроить роутер как надо и не переживать что при каждом обновлении функционал будет слетать!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться