Для чего?
Модуль позволяет писать более гибкий client-side код, формируя необходимые URI и URL на основе правил маршрутизации, определенных на сервере.
Как пользоваться?
Использовать его очень просто:
1. Разархивируйте и скопируйте папку в %MODPATH%
2. Подключите модуль стандартными средствами
Kohana::modules(array(
// ...
'jsroute' => MODPATH.'jsroute', // JSRoute
// ...
));
3. Включите в страницу jquery-плагин после jquery, например:
<script type="text/javascript" src="/media/js/jquery.kohana.router-0.1.js"></script>
4. Использование, пример:
$.kohanaRouter({onload: function(router) {
var uri = router.get('category/index').uri({id: 2}),
url = router.url('category/index', {id: 2}),
absUrl = router.url('category/index', {id: 2}, true);
console.log(uri, url, absUrl);
}});
Предполагается, что на сервере зарегистрирован такой маршрут
Route::set('category/index', 'category/<id>', array(
'id' => '\d+',
))
->defaults(array(
'controller' => 'catalog',
'action' => 'index',
'id' => null,
));
Иначе будет выброшен объект $.kohanaRouter.Error, в котором сказано, что маршрут не найден.
Как это работает?
Схема работы:
1. При создании объекта $.kohanaRouter производится ajax-запрос на сервер, где контроллер модуля подготавливает массив всех правил и отправляет этот массив клиенту в JSON-формате.
2. $.kohanaRouter принимает ответ от сервера и создает коллекцию маршрутов
3. по завершению обработки данных kohanaRouter вызывает функцию onload (передав туда свой инстанс), переданную при создании объекта в качестве одного из свойств объекта-аргумента. После этого можно выполнять необходимые действия по формированию урлов.
При попытке вызова одного из методов до загрузки данных с сервера будет брошено исключение.
Надеюсь, кому-то он окажется полезным :)
Спустя 5 минут, 44 секунды (5.05.2012 - 15:43) Invis1ble написал(а):
Критика и пожелания приветствуются.
Не стесняемся, комментируем
Не стесняемся, комментируем
Спустя 8 минут, 26 секунд (5.05.2012 - 15:51) Игорь_Vasinsky написал(а):
ты писал модуль?
Спустя 1 минута, 23 секунды (5.05.2012 - 15:53) Invis1ble написал(а):
да
Спустя 14 минут, 4 секунды (5.05.2012 - 16:07) johniek_comp написал(а):
Чего-то я не понял, а зачем?
Спустя 3 минуты, 14 секунд (5.05.2012 - 16:10) Invis1ble написал(а):
johniek_comp
Цитата |
Для чего? Модуль позволяет писать более гибкий client-side код, формируя необходимые URI и URL но основе правил маршрутизации, определенных на сервере. |
Без модуля в js тебе прийдется писать http://domain/category/2 явно, и при смене правил маршрутизации url будет невалидным. Следовательно прийдется переписывать все урлы в js-коде каждый раз.
При использовании модуля jquery-плагин сам позаботится о смене url'ов, синхронизируясь с сервером.
Спустя 6 минут, 36 секунд (5.05.2012 - 16:17) johniek_comp написал(а):
Invis1ble
та же настройка роутинга что в index.php, только ещё и на js? и её не надо настраивать? она сама берет данные какие у меня там маршруты?
та же настройка роутинга что в index.php, только ещё и на js? и её не надо настраивать? она сама берет данные какие у меня там маршруты?
Спустя 58 секунд (5.05.2012 - 16:18) Invis1ble написал(а):
Цитата |
та же настройка роутинга что в index.php, только ещё и на js? и её не надо настраивать? она сама берет данные какие у меня там маршруты? |
Да. Ничего дополнительно настраивать не надо. Подключаешь модуль, плагин и пользуешься.
Спустя 1 день, 7 часов, 20 минут, 2 секунды (6.05.2012 - 23:38) Invis1ble написал(а):
Удалил архив. Теперь код запилен на гитхаб https://github.com/Invis1ble/kohana-jsroute
Кто качал - обновитесь, исправлено пару багов и произведена небольшая оптимизация плагина.
Кто качал - обновитесь, исправлено пару багов и произведена небольшая оптимизация плагина.
Спустя 4 часа, 15 минут, 18 секунд (7.05.2012 - 03:53) Invis1ble написал(а):
Добавлена новая фича - фильтры. Подробнее см. в README
Спустя 7 часов, 39 минут, 53 секунды (7.05.2012 - 11:33) vital написал(а):
А че, в кохане нету штуки в шаблонизаторе, типа как в Yii::
Ну и соответсвенно в яваскрипте
Это если у меня 50 ссылок на стрнице, будет 50 запросов к серверу?
При хотя бы 100 пользователях- онлайн - это уже мамммамиа..
$this->createUrl('controller/action');
Ну и соответсвенно в яваскрипте
$.ajax({url:'<?php echo $this->createUrl('controller/action'); ?>'})
Это если у меня 50 ссылок на стрнице, будет 50 запросов к серверу?
При хотя бы 100 пользователях- онлайн - это уже мамммамиа..
Спустя 2 часа, 40 минут, 43 секунды (7.05.2012 - 14:13) sharki написал(а):
И на symfony тоже всё лаконично
Есть файл роутера, где производяться все настройки, типа
Вызвать из пакета AcmeDemoBundle - Класс Welcome и в нем метод index
И в шаблоне
Ну или использовав встроенный шаблонизатор
Есть файл роутера, где производяться все настройки, типа
test_well:
pattern: /
defaults: { _controller: AcmeDemoBundle:Welcome:index }
Вызвать из пакета AcmeDemoBundle - Класс Welcome и в нем метод index
И в шаблоне
<a href="<?php echo $view['router']->generate('test_well') ?>">Home</a>
Ну или использовав встроенный шаблонизатор
<a href="{{ path('test_well') }}">Home</a>
Спустя 36 минут, 10 секунд (7.05.2012 - 14:50) Invis1ble написал(а):
vital
Цитата |
А че, в кохане нету штуки в шаблонизаторе, типа как в Yii |
Есть.
Цитата |
Это если у меня 50 ссылок на стрнице, будет 50 запросов к серверу? |
В том то и дело, что нет. При создании инстанса $.kohanaRouter будет сделан один запрос на сервер и получены все роуты, не внесенные в "черный" список. А потом можно уже формировать любые урлы на js.
sharki
Цитата |
на symfony тоже всё лаконично |
я в курсе, как в симфони. В кохане по сути тоже самое.
Вобщем вы не поняли прикола. На javascript можно писать без php-шных вставок, т.е. $.kohanaRouter - как бы отражение кохановского Route.
На php пишем
Route::url('media', array('file' => 'img/logo.png'));
на js
router.url('media', {file: 'img/logo.png'})
синопсис тот же, что и в php-шном Route
PS. Если не ошибаюсь, для symfony существует аналогичный бандл. Но я его не смотрел, признаюсь.
Спустя 59 минут, 23 секунды (7.05.2012 - 15:49) Семён написал(а):
Проще js генерировать через php, чтобы в нужных местах была произведена замена. У меня так реализовано.
Спустя 4 минуты, 49 секунд (7.05.2012 - 15:54) Invis1ble написал(а):
Семён
Расскажи, как именно ты генерируешь. Не совсем понятно, что конкретно ты имеешь ввиду.
Расскажи, как именно ты генерируешь. Не совсем понятно, что конкретно ты имеешь ввиду.
Спустя 4 минуты, 43 секунды (7.05.2012 - 15:59) Семён написал(а):
Зачем обращаться из JS к PHP когда в процессе генерации итак известны все роуты, я имею ввиду в странице:
<script type="text/javascript" src="myJs.php"></script>
в которой
меняем на нужный нам роут, в итоге у тебя будет js уже с подставленными всеми роутами без лишнего фонового запроса
<script type="text/javascript" src="myJs.php"></script>
в которой
request : #(route)#;
меняем на нужный нам роут, в итоге у тебя будет js уже с подставленными всеми роутами без лишнего фонового запроса
Спустя 4 минуты, 30 секунд (7.05.2012 - 16:03) Invis1ble написал(а):
А, понял. Как вариант - да. Но у тебя в любом случае будет задействован пых, как и у меня.
При моём подходе удается полностью отделить javasript от php, и цена этому - да, фоновый запрос.
При моём подходе удается полностью отделить javasript от php, и цена этому - да, фоновый запрос.
Спустя 3 минуты, 9 секунд (7.05.2012 - 16:06) Семён написал(а):
Да тут, просто весь смысл как раз упирается в этот самый 1 фоновый запрос)
Спустя 31 минута, 34 секунды (7.05.2012 - 16:38) Invis1ble написал(а):
Справедливое замечание. Естественно есть обратная сторона медали.
В принципе, я и не говорил, что изобрел что-то мегаохренительное, просто удобный вариант (для меня по крайней мере) писать код.
В принципе, я и не говорил, что изобрел что-то мегаохренительное, просто удобный вариант (для меня по крайней мере) писать код.
Спустя 1 час, 16 минут, 34 секунды (7.05.2012 - 17:54) Семён написал(а):
Invis1ble
Согласен, если теоретически ты сделаешь кеширование роутов, то 1 запрос не критичен
Согласен, если теоретически ты сделаешь кеширование роутов, то 1 запрос не критичен
Спустя 17 дней, 4 часа, 45 минут, 21 секунда (24.05.2012 - 22:40) Invis1ble написал(а):
Отрефакторен jquery-плагин (фактически переписан заново).
Добавлен коллбэк onerror.
Добавлена новая фича - получение определенных роутов.
Подробнее в README.md
Добавлен коллбэк onerror.
Добавлена новая фича - получение определенных роутов.
Подробнее в README.md
_____________
Профессиональная разработка на заказ
Я на GitHub | второй профиль