Форум русской поддержки Joomla!® CMS
11.12.2016, 12:02:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Новый роутер Joomla - первый взгляд

 (Прочитано 406 раз)
0 Пользователей и 1 Гость смотрят эту тему.
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« : 26.02.2016, 12:39:11 »

Провёл небольшой анализ исходного кода нового роутера. Интересно услышать мнение разработчиков.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +121/-4
Offline Offline

Пол: Мужской
Сообщений: 1471


« Ответ #1 : 26.02.2016, 13:14:06 »

Мнение такое, что Joomla медленно, но верно приобретает облик профессиональной и гибкой системы. Главный недостаток в том, что развитие идёт очень медленно. 2 года для реализации базового функционала нового роутера, на мой взгляд, — это очень много. Всё потому, что в одиночку этот обоз ни один разработчик не потянет, будь он хоть семь пядей во лбу, как наш герой. А если по мне, то идеальный роутинг должен строиться на регулярных выражениях.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #2 : 26.02.2016, 13:22:49 »

посмотрел, почитал.. если они хотели усложнить жизнь программистам, они с этим отлично справились!
Пока я не вижу никаких плюсов этого похода (в котором нужно написать тону непонятного кода) перед стандартным + прикрутить в хелпере простейший код на 10-20 строк для определения роута!
+ теперь не понятно как вообще делать условия для роутинга!
например у меня в роутере может быть привязка только на один вид (список категорий)
нет переменны, выводим список, одна переменная, выводим категорию, две переменных выводим материал в категории...
Или допустим у меня есть такое:
if ( isset( $segments[0] ) && $segments[0] === 'getFile' ) {
   $vars['task'] = 'file.download';
   $vars['id'] = $segments[1];
   return $vars;
}
То есть если приходит такая ссылка /getFile/1.html
У меня не бежит в вид, у меня выполняет задачу на скачивание файла в контроллере! Как теперь строить подобные условия я не врубился пока!
upd.:
Подозреваю что все можно будет сделать в методе function contentParseRoute($segments) но сильно подозреваю что будут большие проблемы..
« Последнее редактирование: 26.02.2016, 13:29:44 от Istaan » Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #3 : 26.02.2016, 13:35:36 »

Ну так это всё в правиле надо делать. Посмотри исходный код правил - там как раз и есть эта реализация.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #4 : 26.02.2016, 14:01:24 »

Так и не понял где смотреть..
на правилах в com_content такие строки:

Код
$this->attachRule( new JComponentRouterRulesMenu( $this ) );
$params = JComponentHelper::getParams( 'com_content' );
if ( $params->get( 'sef_advanced', 0 ) ) {
$this->attachRule( new JComponentRouterRulesStandard( $this ) );
}
else {
require_once JPATH_SITE . '/components/com_content/helpers/legacyrouter.php';
$this->attachRule( new ContentRouterRulesLegacy( $this ) );
}
1. new JComponentRouterRulesMenu($this) поиск по коду класса JComponentRouterRulesMenu ничего не дал..
2. JComponentRouterRulesStandard поиск по коду класса JComponentRouterRulesStandard ничего не дал
3. require_once JPATH_SITE . '/components/com_content/helpers/legacyrouter.php';

Естественно такого файла по указанному пути нет!
Так что правилами пока ничего не понятно!
Нужно ждать стабильной версии и документации от разработчиков...или придется самому очень сильно поковыряться.. но подозреваю что это банальная смена шила на мыло...
Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #5 : 26.02.2016, 14:16:56 »

Вот код стандартного правила из репы Ханса. Смотри там метод parse(&$segments, &$vars) - в нём всё релизовано. Делаешь своё правило, расширяешь Standard. Где надо, делаешь свою обработку, а остальное parent::parse();

В ветке Joomla 3.6.x не хватает файлов. Я спецом написал в материале:
Цитировать
Если вы хотите самостоятельно изучить исходный код, то либо используйте ветку Joomla 3.6.x (но там пока нет некоторых файлов), либо репозитроий Hannes (на момент написания статьи он был актуален).
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #6 : 26.02.2016, 14:36:24 »

Мдаа.. почитал. Я единственное непонимаю, зачем так было все усложнять? Куча классов, интерфейсов. В любом фреймворке роутинг это тупо набор регулярок, плюc там еще возможно определить свое правило которое состоит всего из двух методов parse и build.  Тут какой то просто зоопарк классов и методов. Единственная надежда что они от половины избавятся со временем. Также поражают такие вот названия классов: JComponentRouterViewconfiguration, JComponentRouterRulesStandard. Это что за портянка такая в названии класса?  Я понимаю что когда писалась Joomla, то неймспейсы еще не были в php реализованы. Но сейчас то в 2016 году так писать зачем?
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #7 : 26.02.2016, 14:52:30 »

Мдаа.. почитал. Я единственное непонимаю, зачем так было все усложнять? Куча классов, интерфейсов. В любом фреймворке роутинг это тупо набор регулярок, плюc там еще возможно определить свое правило которое состоит всего из двух методов parse и build.  Тут какой то просто зоопарк классов и методов. Единственная надежда что они от половины избавятся со временем. Также поражают такие вот названия классов: JComponentRouterViewconfiguration, JComponentRouterRulesStandard. Это что за портянка такая в названии класса?  Я понимаю что когда писалась Joomla, то неймспейсы еще не были в php реализованы. Но сейчас то в 2016 году так писать зачем?
полностью поддерживаю..
Надеюсь что оставят старый метод формирования роутинга, ибо этот как по мне бред сивой кобылы...
Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #8 : 26.02.2016, 17:09:25 »

Мдаа.. почитал. Я единственное непонимаю, зачем так было все усложнять? Куча классов, интерфейсов. В любом фреймворке роутинг это тупо набор регулярок, плюc там еще возможно определить свое правило которое состоит всего из двух методов parse и build.  Тут какой то просто зоопарк классов и методов. Единственная надежда что они от половины избавятся со временем.
Регулярка, аха... Ну попробуй такую сделать для Joomla, да так, чтобы старое не сломалось. Что-то не вижу пока что желающих Azn

Что касается зоопарка - как ещё заставить стороннего разработчика написать правило, которое было бы совместимо с роутером? Или роутер, совместимый с правилами? Для этого нужен интерфейс. Мне тоже сначало показалось, что много всего, но в итоге понимаешь, что без этого никак

Также поражают такие вот названия классов: JComponentRouterViewconfiguration, JComponentRouterRulesStandard. Это что за портянка такая в названии класса?  Я понимаю что когда писалась Joomla, то неймспейсы еще не были в php реализованы. Но сейчас то в 2016 году так писать зачем?
Согласен, но пишут под тройку... В J4 ты этого конечно уже не увидешь.

Цитировать
Надеюсь что оставят старый метод формирования роутинга, ибо этот как по мне бред сивой кобылы...
Конечно оставят. B/C сохранить же нужно.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #9 : 26.02.2016, 17:57:29 »

Регулярка, аха... Ну попробуй такую сделать для Joomla, да так, чтобы старое не сломалось. Что-то не вижу пока что желающих Azn
Я бы например желал что то сделать, но с моим английским боюсь что либо никто не поймет что это было.. либо вообще даже смотреть не будут...


Что касается зоопарка - как ещё заставить стороннего разработчика написать правило, которое было бы совместимо с роутером? Или роутер, совместимый с правилами? Для этого нужен интерфейс. Мне тоже сначало показалось, что много всего, но в итоге понимаешь, что без этого никак
Дима о чем ты.. покажи хоть одно расширение где разработчики делают так как нужно, а не пишут свой фреймворк внутри фреймворка! Да 90% напишут костыль  с которым им будет проще в разы!

Согласен, но пишут под тройку... В J4 ты этого конечно уже не увидешь.
Если мы увидим 4-ку Grin

Конечно оставят. B/C сохранить же нужно.
Слава богу..


p.s. многие говорят что в Joomla проблема с роутингом.. а может хоть кто то объяснить в чем эта проблема? Как по мне с ним проблем нету, вообще! Я с легкостью делаю ссылки любой сложности не напрягаясь..
Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #10 : 26.02.2016, 18:00:07 »

Я бы например желал что то сделать, но с моим английским боюсь что либо никто не поймет что это было.. либо вообще даже смотреть не будут...
Ну переводчики найдутся, не беспокойся.
Записан
voland
Профи
********

Репутация: +488/-86
Offline Offline

Пол: Мужской
Сообщений: 8736


любит наш народ всякое гавно...


« Ответ #11 : 26.02.2016, 18:01:04 »

Вот не надо регулярок!
Кто тестить будет? Те 2,5 человека, что  их понимают?
Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #12 : 26.02.2016, 18:05:07 »

И вообще если посмотреть ещё раз, то где зоопарк? База реально состоит из следующего:
- 2 интерфейса (роутер и правило);
- 3 класса роутера (базовый, легаси для старых расширений и новый);
- 1 класс конфигурации представления.

Правила не в счёт - это просто довесок. К тому же, Вам не нужно изучать всю эту базу. Нужно будет только понимать принцип работы правил и класса конфигурации представления. В этом и состоит суть API и инкапсуляции в частности - вам не обязательно знать реализацию. В роутере вы только регистрируете список представлений и добавляете правила. Ну да, ещё нужно возвращать сегменты и ID для parse и build.

Мне кажется, когда будет хоть какая-то документация, то всё встанет на свои места. До конца понять логику работы по исходному коду очень непросто.
« Последнее редактирование: 26.02.2016, 18:12:37 от b2z » Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #13 : 26.02.2016, 18:58:30 »

Цитировать
В роутере вы только регистрируете список представлений

Вот это мне вобще непонятно нафига сделано. Мало того что отдельный класс для регистрации представлений, так еще и отдельные классы для конфигураций этих представлений. Зачем это все? Возвращать сегменты, добавлять правила... Зачем это тоже? Нельзя так просто чтоли дать возможность писать свои правила для роутера компонентов и для глобального роутера? И чтобы в этих правилах можно было оперировать сегментами из запросов. И переопределять их плагинами.
Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #14 : 26.02.2016, 19:02:40 »

Может и можно. Но никто этого не сделал. А он сделал. И PR висел очень долго и видимо всех устроил.
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #15 : 26.02.2016, 19:10:25 »

На самом деле возможность переопределять правила роутеров компонентов с помощью плагинов появилась еще в роутере для 3.3 версии. Просто никто этого не заметил . Я написал плагин даже под это дело. Надесь он будет работать с новым роутером.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #16 : 26.02.2016, 19:12:42 »

Может и можно. Но никто этого не сделал. А он сделал. И PR висел очень долго и видимо всех устроил.
для меня пока что это выглядит как то так:
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet