Новости Joomla

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!Файловый менеджер Quantum — одно...

Файловый менеджер Quantum — одно из самых популярных решений для Joomla, созданное разработчиком из сообщества Joomla, Дмитрием Цымбалом (@tsymbalmitia). Он делает Quantum удобным, безопасным и современным, обновляет его, исправляет уязвимости и отвечает пользователям — всё это в свободное от основной работы время.

Теперь настал момент для следующего шага: развитие проекта требует больше времени и ресурсов.

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

magistr_yoda

  • Захожу иногда
  • 131
  • 2 / 0
Пытаюсь разобраться со стандартным роутером адсменеджера, сделать урлы вида
site.r/город/категория/id46546
Но почему то когда ставлю в роутере в русские буквы(site.ru/Москва/id46546), ссылки меняются на просто корень сайта,
а если использую английские(site.ru/Moskow/id46546), то работает нормально.

Подскажите как сделать чтобы русские буквы в урлах формировались нормально.
До этого я роутеры ещё не переделывал, поэтому плохо понимаю как они работают.
Пока просто тестирую
Код: php
			switch($v)
{
case "details":
[b] $segments[] = $query["регион"]."Москва";[/b]
$segments[] = $query["catid"]."-".getAdsmanagerRouteCategory($query["catid"]);
$segments[] = $query["id"]."-".getAdsmanagerRouteContent($query["id"]);
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Кирилица в урл - как изменить router ?
« Ответ #1 : 15.02.2012, 15:43:07 »
дык UTF-8 батенька, а не ANSI (для начала)
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

magistr_yoda

  • Захожу иногда
  • 131
  • 2 / 0
Re: Кирилица в урл - как изменить router ?
« Ответ #2 : 16.02.2012, 20:14:02 »
дык UTF-8 батенька, а не ANSI (для начала)

Спасибо, сохранил роутер в утф 8 - помогло. Теперь кирилица в урлах отображается нормально.
Но теперь почему то в опере, на самой странице, кирилица стала отображаться аброкадаброй - "Рё Московская РѕР±Р». Город".

Ещё пара вопросов по роутеру.
Хочу чтобы в урлах также были названия категорий на русском, для этого в функции
getAdsmanagerRouteCategory, я закомментировал строку $result= JFilterOutput::stringURLSafe($result);
Не опасно ли это ? в доках Joomla написанно что эта функция заменяет вырезает из строки символы утф 8.

Ещё в функции AdsmanagerBuildRoute
//$segments[] = $query["catid"]."-".getAdsmanagerRouteCategory($query["catid"]); -- закоменнтировал строку
$segments[] = getAdsmanagerRouteCategory($query["catid"]); // и поставил так

Чтобы в урлах выходило site.ru/Категория - вместо site.ru/3-Категория.

site.ru/Категория - стало показываться но переходы по категориям перестали работать, т.е. нажимаю на ссылку нужной категории, в урле правильная информация(site.ru/Категория), страница перегружается, но открывается та же самая страница на которой я и был.

Пока мне непонятна логика работы роутеров, может надо в функции AdsmanagerParseRoute тоже что то изменить ?
« Последнее редактирование: 16.02.2012, 20:17:24 от magistr_yoda »
*

magistr_yoda

  • Захожу иногда
  • 131
  • 2 / 0
Re: Кирилица в урл - как изменить router ?
« Ответ #3 : 19.02.2012, 05:47:41 »
Подскажите как сделать чтобы в урле были названия категорий(на русском) а не их id ?
*

magistr_yoda

  • Захожу иногда
  • 131
  • 2 / 0
Re: Кирилица в урл - как изменить router ?
« Ответ #4 : 22.02.2012, 08:59:40 »
Пришлось написать самому Томасу Папину - создателю адсменеджера, и он ответил

Цитировать
If you want to remove the catid, you will have to to change the router function to be able to get the id from the adsmanagercatname,.
Currently there is no SQL needed because the catid is in the request, but in your case, the catid is not present so a SQL query should be created to get it from the category name

Thomas


2012/2/20 magistr_yoda

Adsmanager cat name(only) in url - now ? - j2.5 ad2.6.5

Trying to set Joomla + AdsManager urls to this kind site.com/adsmanagercatname/
in adsmanager/router.php


 switch($v)
 {
 case "details":
// erase this lint $segments[] = $query["catid"]."-".getAdsmanagerRouteCategory($query["catid"]);
 $segments[] = getAdsmanagerRouteCategory($query["catid"]); // add this line
....

but then urls looks like needed - site.com/adsmanagercatname/ links not worked - same page reloaded
 but if urls like this site.com/3-adsmanagercatname/ - then worked, but 3-(catid and -) not needed.

It my first work with routers - i can understand where this router get "3-" and how make this work without this.

How to make correct router to AdsManager ? Please help

Ладно посмотрим, как изменить, только пока не понимаю откуда роутер берёт эти параметры. $query["catid"]
*

Alex89

  • Давно я тут
  • 555
  • 198 / 1
  • Joomlaman :)
Re: Кирилица в урл - как изменить router ?
« Ответ #5 : 22.02.2012, 11:58:50 »
Цитировать
откуда роутер берёт эти параметры. $query["catid"]
выдерает из url! отключите SEF и посмотрите как выглядит ссылка и тогда станет понятно :)
как переделать Томас написал, думаю не сложно разобраться... Если не разберётесь - напишите, вместе попробуем!
« Последнее редактирование: 22.02.2012, 12:48:08 от Alex89 »
Увеличить посещаемость сайта помогут здесь - http://tinyurl.com/kpaprwy
Если помог, ткните "крестик" в репу!
*

magistr_yoda

  • Захожу иногда
  • 131
  • 2 / 0
Re: Кирилица в урл - как изменить router ?
« Ответ #6 : 22.02.2012, 22:06:16 »
выдерает из url! отключите SEF и посмотрите как выглядит ссылка и тогда станет понятно :)
как переделать Томас написал, думаю не сложно разобраться... Если не разберётесь - напишите, вместе попробуем!

Да, так и есть, передаётся из урла вызовом функции
JRoute::_( "index.php?option=com_adsmanager&view=details&id=".$content->id."&catid=".$content->catid."&Itemid=".$this->Itemid);

Только теперь непонял надо будет везде где эти фунции(JRoute) вызываются ставить вместо catid, catname или можно как то роутер переделать чтобы он генерировал урлы для ссылок, сам вытаскивая из sql название категорий.

Блин пока не понимаю как этот роутер работает...
если урл будут(с sef) не такого вида catid=3, а вида site.ru/categoryname - т.е. без пары параметр=значение(catid=3) - то как он будет определять к какому параметру относится categoryname - т.е. что это именно параметр категории, а не какой нибудь другой параметр.
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Кирилица в урл - как изменить router ?
« Ответ #7 : 22.02.2012, 22:25:54 »
ты должен обеспечить работу роутера таким образом, что бы получив из оригинальной ссылки А, SEF-ссылку B, роутер так же был способен адекватно сделать обратное преобразование из SEF-ссылки B в оригинальную ссылку A.
алгоритм преобразования A-->B и B-->A определяются исключительно разработчиком роутера
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

Alex89

  • Давно я тут
  • 555
  • 198 / 1
  • Joomlaman :)
Re: Кирилица в урл - как изменить router ?
« Ответ #8 : 23.02.2012, 00:47:31 »
Попробую "разжевать" всё как для школьника :)
К примеру, имеем ссылку вида index.php?option=com_adsmanager&view=details&id=5&catid=3&Itemid=120. После включения SEF ссылка разбивается на части (параметр=значение) и записывается в ассоциативный массив $query, где в качестве ключа выступает имя параметра, а в качестве значения - значение параметра соответственно. Т.о. после передачи ссылки в JRoute имеем массив:
$query["option"]=>"com_adsmanager"
$query["view"]=>"details"
$query["id"]=>"5"
$query["catid"]=>"3"
$query["Itemid"]=>"120"

Как раз с таким массивом Joomla предлагает работать разработчику роутера компонента! Для работы с SEF разработчику предлагаются 2 функции:
1. для построения (билдинга) ЧПУ-ссылки, имя функции имеет вид ComponentNameBuildRoute, где ComponentName - название компонента, в качестве аргумента для функции выступает вышеописанный массив $query. Возвращает движку массив $segments для построения новой "красивой" ссылки! Если пункт меню указывает на компонент и настроен aliac, то из новой ссылки автоматически уберутся параметры option и Itemid, а если включен mod_rewrite, то уберётся ещё и index.php
2. для разбора (парсинга) ЧПУ-ссылки, имя функции имеет вид ComponentNameParseRoute, в качестве аргумента для функции выступает полученный ранее массив $segments!
Возвращает движку массив $vars для возврата ссылки к исходному виду.

Но это всё только теория, давайте рассмотрим на конкретном примере с adsmanager'ом и категориями:
Открываем файл роутера и смотрим в функцию AdsmanagerBuildRoute(&$query) и видим строку преобразования категории
Код
$segments[] = $query["catid"]."-".getAdsmanagerRouteCategory($query["catid"]);
Функция getAdsmanagerRouteCategory посылает запрос в БД на выборку имени категории по её id и возвращает это имя в "безопасном" виде (строка $result= JFilterOutput::stringURLSafe($result);), но нам не нужно транслитить имя категории, поэтому нужно либо переписать функцию stringURLSafe либо написать свою и заменить на неё вызов из класса JFilterOutput. Теперь удалим из ссылки id категории, т.е. приведём к виду
Код
$segments[] = getAdsmanagerRouteCategory($query["catid"]);
. Т.о. получаем красивую ссылку, но теперь функция AdsmanagerParseRoute не знает id категории и везде "перебрасывает" на "Все объявления", а чтобы получить id нужно написать функцию противоположную функции getAdsmanagerRouteCategory, т.е. по названию категории получить её id запросом к БД. Затем в функции AdsmanagerParseRoute заменить все
Код
$catid = explode( ':', $segments[0] );
$vars['catid'] = (int) $catid[0];
на
Код
$vars['catid'] = (int) Ваша_функция($segments[0]);

Таким же макаром делаем и для других параметров ссылки (если надо)! Надеюсь, что понятно изложил, аж замучился печатать :)
   
Увеличить посещаемость сайта помогут здесь - http://tinyurl.com/kpaprwy
Если помог, ткните "крестик" в репу!
*

magistr_yoda

  • Захожу иногда
  • 131
  • 2 / 0
Re: Кирилица в урл - как изменить router ?
« Ответ #9 : 26.02.2012, 15:41:49 »
Так, кажется я допёр  ^-^
В функции AdsmanagerParseRoute - содержиться массив внутренних переменных, которые view компонента видят,
и не обязательно чтобы эти переменные передавались в урл. Т.е. урл в AdsmanagerBuildRoute можно делать каким
угодно, главоное чтобы AdsmanagerParseRoute - задать эти внутренние переменные.

До этого думал что придётся менять все view.html.php - чтобы они вытаскивали например id категории по её имени в урл,
думал а откуда Joomla узнает а какой параметр к чему(если урл без пара ключ=значение), но оказывается можно напихать каких угодно переменных
в AdsmanagerParseRoute и они будут видны компоненту.
$vars["view"] = "result";
$vars["view"] = "edit";
итд

В роутере сделал так
Код: php
			case "list":
if (isset($query["catid"])&&($query["catid"] != 0)) {
// $segments[] = $query["catid"]."-".getAdsmanagerRouteCategory($query["catid"]);
$segments[] = getAdsmanagerRouteCategory($query["catid"]);
}

Спасибо за помощь Alex89, userxp

Ещё пара вопросов,
1. В оригинале роутера, id категории вытаскивается так
      $catid = explode( ':', $segments[0] );
          $vars['catid'] = (int) $catid[0];
Но так как сейчас в урл не передаётся циферка категории, то нужно вытаскивать id категории из базы, по её имени из урла.
Но зачем делать лишний sql запрос к бд.
Может можно както передать(напрмер через какую то глобальную переменную)? из AdsmanagerBuildRoute в
AdsmanagerParseRoute так чтобы и овцы целы и волки сыты ? т.е. без циферки в урле и без запроса к бд ?

2. Роутер содержит функцию getAdsmanagerRouteCategory
В ней я закомментировал строку
// $result= JFilterOutput::stringURLSafe($result); - чтобы категории были на русском
иначе проходят названия категорий только на английском.
Так вот, не опасно ли чтобы компонент работал без этой функции JFilterOutput::stringURLSafe ?
*

Alex89

  • Давно я тут
  • 555
  • 198 / 1
  • Joomlaman :)
Re: Кирилица в урл - как изменить router ?
« Ответ #10 : 26.02.2012, 19:51:38 »
1. Без дополнительного запроса никак... точнее, скорей всего, можно сделать, но по производительности получится тоже самое, что и с запросом
2. Если все названия категории состоят только из букв (не содержат пробелов и прочих специфических для url символов), то можно и оставить строку закомментированной, а если нет, то нужно написать либо функцию-аналог JFilterOutput::stringURLSafe без транслитерации, либо исправить уже существующую
Увеличить посещаемость сайта помогут здесь - http://tinyurl.com/kpaprwy
Если помог, ткните "крестик" в репу!
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Кирилица в урл - как изменить router ?
« Ответ #11 : 26.02.2012, 20:43:42 »
лучше "загонять" вызов запроса в БД в статику или кэшировать блочно, что бы не обращаться каждый раз в БД по очередному урл-у, которых на странице может быть достаточно много
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

magistr_yoda

  • Захожу иногда
  • 131
  • 2 / 0
Re: Кирилица в урл - как изменить router ?
« Ответ #12 : 27.02.2012, 04:29:12 »
лучше "загонять" вызов запроса в БД в статику или кэшировать блочно, что бы не обращаться каждый раз в БД по очередному урл-у, которых на странице может быть достаточно много

Это как ? Можно пример ?
*

magistr_yoda

  • Захожу иногда
  • 131
  • 2 / 0
Re: Кирилица в урл - как изменить router ?
« Ответ #13 : 09.03.2012, 22:06:16 »
Подскажите пожалуйста, почему когда я запускаю отладку из файла роутера функцией exit - кирилица
выдаётся абракадаброй, например "Москва и Московская область" - выдаётся как РњРѕСЃРєРІР° Рё Московская РѕР±Р».

И ещё, непонимаю почему, но в роутере
когда подставляю значения страна,регион,город - взятые из БД, то урлы генерируются вида -
http://site.ru/index.php/ads/%20%20Москва-и-Московская-обл./Категория ?
а должно быть просто
http://site.ru/index.php/ads/Москва-и-Московская-обл./Категория
Т.е. откуда беруться эти знаки %20% и как их убрать ?

Если же просто, жёстко в роутере прописываю
$segments[]= "Москва-и-Московская-обл" - то отображается как надо.
*

Alex89

  • Давно я тут
  • 555
  • 198 / 1
  • Joomlaman :)
Re: Кирилица в урл - как изменить router ?
« Ответ #14 : 09.03.2012, 22:21:41 »
я уже говорил в предыдущем посте, но скажу ещё раз!
%20 - знак пробела... соответственно после выборки из базы нужно заменить пробелы, например, на тире!
Увеличить посещаемость сайта помогут здесь - http://tinyurl.com/kpaprwy
Если помог, ткните "крестик" в репу!
*

magistr_yoda

  • Захожу иногда
  • 131
  • 2 / 0
Re: Кирилица в урл - как изменить router ?
« Ответ #15 : 10.03.2012, 08:17:11 »
я уже говорил в предыдущем посте, но скажу ещё раз!
%20 - знак пробела... соответственно после выборки из базы нужно заменить пробелы, например, на тире!

Так я делаю
$segments[]= str_replace(" ", "-", $country_name);
И эта %20 - всё равно выходит, может это какой то пробел в другой кодировке что его str_replace не берёт ?
*

Alex89

  • Давно я тут
  • 555
  • 198 / 1
  • Joomlaman :)
Re: Кирилица в урл - как изменить router ?
« Ответ #16 : 10.03.2012, 09:02:10 »
ну попробуйте написать так $segments[]= str_replace(" ", "-", trim($country_name));
а лучше заглянуть в базу и удалить эти пробелы
Увеличить посещаемость сайта помогут здесь - http://tinyurl.com/kpaprwy
Если помог, ткните "крестик" в репу!
*

magistr_yoda

  • Захожу иногда
  • 131
  • 2 / 0
Re: Кирилица в урл - как изменить router ?
« Ответ #17 : 10.03.2012, 15:21:01 »
ну попробуйте написать так $segments[]= str_replace(" ", "-", trim($country_name));
а лучше заглянуть в базу и удалить эти пробелы

О да, заработало. Спасибо.
Блин, мог бы сам догадаться.
*

lovivolnu

  • Захожу иногда
  • 323
  • 8 / 0
Re: Кирилица в урл - как изменить router ?
« Ответ #18 : 10.03.2012, 18:15:23 »
подскажите как сделать урлы типа "site.ru/Moskow/id46546"
ads2.6.5
*

magistr_yoda

  • Захожу иногда
  • 131
  • 2 / 0
Re: Кирилица в урл - как изменить router ?
« Ответ #19 : 10.03.2012, 22:24:44 »
подскажите как сделать урлы типа "site.ru/Moskow/id46546"
ads2.6.5

В нужном месте функции AdsmanagerBuildRoute вставить
$segments[] = "Moscow";

и в функции AdsmanagerParseRoute уже обрабатывать со смещением
если раньше по умолчанию было $vars['catid'] = (int) $catid[0];
то теперь будет $vars['catid'] = (int) $catid[1];
т.к. добавился дополнительный параметр Moscow в урл
*

lovivolnu

  • Захожу иногда
  • 323
  • 8 / 0
Re: Кирилица в урл - как изменить router ?
« Ответ #20 : 18.03.2012, 16:36:08 »
можете по подробней рассказать как избавиться от <Все%20объявления> т.к. я совсем не разбиваюсь в роутере)
спасибо.
ads 2.6.5
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Изменить категории в AdsManager 3.1.5

Автор Doc

Ответов: 2
Просмотров: 10234
Последний ответ 17.03.2019, 21:17:30
от Doc
Изменить страницу объявления

Автор Mick_20

Ответов: 0
Просмотров: 970
Последний ответ 26.05.2017, 12:08:42
от Mick_20
Изменить цвет в dropdown multiselect

Автор elipssp

Ответов: 0
Просмотров: 1192
Последний ответ 25.01.2017, 01:30:31
от elipssp
Изменить размер полей

Автор elipssp

Ответов: 10
Просмотров: 1456
Последний ответ 24.01.2017, 23:14:28
от elipssp
Как изменить месторассположение ссылки категории в adsmanager?

Автор serg2010

Ответов: 21
Просмотров: 4693
Последний ответ 19.01.2017, 07:43:09
от Doc