По просьбе читателя краткий обзор.
Страница плагинов на форуме
Дистрибутив Kohana-for-Wordpress
Дистрибутив Wordpress-for-Kohana
Kohana-for-Wordpress
Плагин предназначен для интеграции фреймворка Kohana 3 в WordPress-систему. Интеграция заключается в возможности вызова контроллеров Kohana из структур WP (шаблонов, виджетов, постов/страниц), а также в возможности обращения к контроллерам Kohana из строки запроса.
Устанавливаем плагин согласно инструкции (я тестировал на инсталлированном Wordpress 2.8.4 Lecactus edition, XAMPP, Windows, PHP 5.2.8):
1. Устанавливаем Kohana3. Под установкой здесь понимается простое копирование папок application/, modules/, system/ куда вы решили (у меня – в DocumentRoot)
2. Закачиваем распакованный плагин в папку wp-content/plugins/
3. Логинимся в админку Вордпресса и активируем плагин
4. Настраиваем плагин. На странице настройки нас встречает прятное разнообразие.
Таб Kohana Options:
система показывает нам адрес Kohana Front Loader — что это такое см. ниже.
- Kohana Application Path — полный абсолютный путь к папке application/ (у меня D:\xampp\htdocs\wp284.loc\www\application\)
- Kohana Module Path — полный абсолютный путь к папке modules/ (у меня D:\xampp\htdocs\wp284.loc\www\modules\)
- Kohana System Path — полный абсолютный путь к папке systems\ (у меня D:\xampp\htdocs\wp284.loc\www\systems\)
- Custom Bootstrap Path — если вы хотите использовать свой собственный загрузчик вместо данного нам в плагине kohana_bootstrap.php, то здесь нужно прописать путь к нему (образцом для вашего загрузчика все равно должен быть kohana_bootstrap.php, поскольку там есть нужные для работы плагина модификации — опции устанавливаются WP-функциями и отсутствует вывод Request::instance()->execute()->send_headers()->response). Я оставил поле пустым.
- Kohana File Extension — расширение файлов Коханы, по умолчанию .php
- Default Placement — здесь нужно определить, как поступит плагин с ответом Кохановского контроллера на запрос: поместит его перед содержимым страницы (Before…), после содержимого страницы (After…) или вместо содержимого страницы (Replace…).
- Kohana Modules — через запятую вписываем используемые модули
- Kohana Default Controller / Action / ID — обязательно должны быть заданы контроллер и метод по умолчанию, иначе система не заработает. ID опционален.
- Include Kohana Front Loader in Wordpress Navigation — включите, если хотите внести Кохановский фронтэнд в навигацию блога
- Process all URIs — если выключите опцию, то плагин будет обрабатывать запросы в URI только со страницы фронтэнда (например, http://wp284.loc/kohana?kr=controller/method/ID); если включите, то Кохана будет пытаться «разглядеть» запросы к себе на любых страницах
Следующий таб — Page Routing
С ним мы должны иметь дело, если хотим «автоматически» включить результаты работы контроллера в существующую страницу Wordpress
- Kohana Controller — вписываем контроллер/метод/параметр
- Wordpress Page — выбираем страницу, куда включить
- Placement — куда будет помещен вывод: перед содержимым страницы (Before…), после содержимого страницы (After…) или вместо содержимого страницы (Replace…)
После добавления роут появляется в строке таблицы, и можно добавлять другой роут. Уже имеющийся роут можно только удалить из таблицы, редактирование не предусмотрено. Еще одно маленькое неудобство — показывается только id страницы, а хотелось бы что-нибудь более читабельное (название или slug).
Работа с вызовами контроллеров Ko3 из WP:
- из шаблона Вордпресса:
Для вызова 'controller/action/id' прописываем
kohana('controller/action/id')
Результат – то, что присваивается в методе свойству $this->request->response. Можно вызывать, например, заранее созданный view, и вообще, делать почти все, что вы привыкли делать у себя дома в Кохане (вроде были какие-то проблемы с сессиями, но я не проверял).
- из виджета Вордпресса:
Перетаскиваем виджет Kohana (он создается автоматически при активации плагина) на сайдбар, задаем заголовок виджета и 'controller/action/id' запроса, который делаем. Все.
- из статической страницы или поста:
В редакторе WP в нужном месте страницы пишем
[request контроллер/метод/параметр]
К стандартному обработчику запросов WP подключен фильтр плагина, который на каждом URI-запросе срабатывает по следующей схеме:
- Если запрашиваемая страница WP не существует и включена опция Process all URIs, то выясняется, идет ли запрос на существующий Кохановский контроллер. Для этого проверяется GET-строка запроса на наличие переменной 'kr', содержащей уже привычный 'controller/action/id' (например, http://wp284.loc/index.php?kr= welcome/index/1). Если ничего не найдено, парсится _SERVER['REQUEST_URI'] с целью найти запрос в стандартном формате «контроллер/метод/параметр» (да-да, можно написать http://wp284.loc/welcome/index и все будет работать!).
Заметьте, что результаты работы контроллера выводятся на странице front loader. То бишь, если вы не включили страницу в Page Routing, все дороги ведут на front loader.
- если запрос идет к странице загрузчика (front loader), то он парсится по той же схеме, причем если строка запроса пустая — берутся дефолтные контроллер/метод/параметр из настроек плагина.
- во всех остальных случаях проверяется, включен ли на вордпресс-странице кохановский роутинг (задается в табе Page Routing) и если да, то соответствующий запрос выполняется с определенными там же опциями вывода результата (перед обычным содержимым, после или вместо).
Детали запроса добавляются в глобальный объект $wp->kohana, содержащий служебную информацию плагина.
Замеченные особенности:
- При апдэйте настроек после изменения состояний некоторых опций (например, Process all URIs, Include Kohana Front Loader in Wordpress Navigation), у меня убирались все слеши в путях к папкам Коханы. Приходилось прописывать их снова. Так что будьте внимательны и проверяйте пути после апдэйтов настроек.
- Если включена опция Process all URIs, то некоторые страницы в админке (например, /wp-admin/edit-pages.php, /wp-admin/edit.php, /wp-admin/upload.php), очевидно, неправомерно обрабатываются Коханой, которая не находит контроллера wp-admin и выкидывает исключение + дебаг-панель (естественно, в продакшне вывод дебаг-панели нужно отключить, но проблему это не решает).
+++++
Что такое Wordpress-for-Kohana? Это плагин для Kohana3 для Kohana-for-Wordpress , который предоставляет WP-style views для Ko3, а также некоторые WP-style функции. Файлы плагина копируются в application/ установленного дистрибутива Коханы, после чего вы можете делать, например, так:
В шаблоне страницы вордпресса (page.php) заменяем get_footer() на kohana('wordpress/footer’) – футером станет кохановский view ‘footer’ из папки views/wp/
Вам мало шаблонов? Добавляйте методы в Controller_Wordpress (там все очевидно), добавляйте шаблоны во views/wp/.
Для удобства в шаблонах можно пользовать статические методы класса Wordpress, имена которых говорят сами за себя: slug(), get_id_from_name(), get_post_by_name(), recent_posts(), postid().
+++++
В целом эти плагины оставили приятное впечатление, хотя с WP я сейчас и не работаю. Было любопытно увидеть пример интеграции Kohana3 в уже сложившуюся CMS. Думаю, еще несколько подобных плагинов для Joomla и Drupal – и популярность Фреймворку обеспечена.
Наше быстрое знакомство закончено, если будут вопросы – постараюсь ответить.
+++++
Кстати, если вы пробуете Kohana3, то вас могут заинтересовать новые и, как всегда, очень обстоятельные статьи Ивана Броткина о мультиязычности и роутинге.
Comments: 3 RSS
1 Satisfaction 04-10-2009 06:33
Шикарная статья ! Спасибо большое.
Этот плагин как раз то что мне было нужно, мощный блоговый функционал вордпресса + гибкость и мощь коханы = отличный движок !
2 Вадим 10-11-2009 19:14
Создал в WP страничку http://blog/about/
Привязал туда контроллер welcome/index
Всё работает, но страница http://blog/about/ выбрасывает ошибку в этой функции:
wp-includes\l10n.php [ 408 ]
function &get_translations_for_domain( $domain ) {
}
Что я не так делаю?
P.s. за статю спасибо.
3 Александр Купреев 11-11-2009 12:46
Вадим, к сожалению, я не являюсь WP-гуру, поэтому быстрого ответа на ваш вопрос дать не могу. При моих экспериментах проблем с функциями локализации не всплывало.
Как минимум, нужно более обстоятельное сообщение об ошибке, включающее вашу версию вордпресса (возможно, какая-то сборка), конфигурацию системы (как ВП, так и плагина), условия возникновения ошибки -- чтобы можно было ее воспроизвести.