- PVSM.RU - https://www.pvsm.ru -
Всем привет. Я — Денис Мельский. Работаю PHP Developer в DataArt. Область моих профессиональных интересов — Web Development и Linux. Сегодня я хотел бы поговорить с вами о «скрещивании ежа с ужом».
На первый взгляд может показаться, что это безумство и, в некотором роде, архитектурный костыль. Но, если посмотреть с другой стороны, это один из вариантов выхода из часто встречающейся тупиковой ситуации: заказчик хочет WordPress и ничего другого не признает. Скорее всего, что-то он такое услышал, нагуглил, увидел, посоветовал сосед гуру кодер Джон (ну, или Вася).
А программисты наотрез отказываются натягивать на движок блога, с, мягко говоря, не самой лучшей архитектурой, функционал, допустим, интернет-магазина, форума, и вдобавок — REST API для партнёров этого магазина, и сверху — еще пачку кронов с бизнес-логикой.
Давайте поставим задачу найти такой выход, чтобы удовлетворить всех участников проблемы, и чтобы наш продукт заводился и нормально работал.
Один из вариантов, который я нашел проводя исследование, на эту тему— скрещивание WordPress и Yii.
Что же, давайте попробуем осилить что-то из этого в коде.
Начнем со скачивания Yii framework. Думаю, composer для таких экспериментов — перебор — из-за кастомизации путей и архитектуры всей сборки у нас без композера будет больше возможностей для экспериментов, т. ч. спокойно качаем с родного сайта [1].
Ту же нехитрую манипуляцию производим с WP [2].
Далее вооружаемся вспомогательными мануалами:
Раз [3]
Два [4]
Идем по первому мануалу, к которому хочу добавить несколько замечаний и комментариев.
Устанавливаем WP размещаем всё в такую архитектуру:
Для начала рассмотрим ключевые строки нашего index.php.
define(‘WP_USE_THEMES’, true);
$wp_did_header = true;
require_once(‘wordpress/wp-load.php’);
Тут мы можем наблюдать начало подключения WP в общую картину происходящего.
Создаем класс Exception Handler, суть которого на 404 exception yii framework — передавать власть WP.
Делаем дефолтный .htaccess для Yii, который дает возможность делать красивые URL.
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
Прописываем в конфиге Yii ‘showScriptName’ => false и раскоментируем дефолтные правила стоковой поставки.
Далее по вышеуказанному мануалу создаем WpController и View к нему.
Еще интересный момент, который нельзя обойти стороной: в wordpress конфигах на уровне DB есть настройка в табличке `wp_options`— “siteurl”, ее нужно поменять на yourdomain/wordpress [5]. Также это можно поменять в админке WP
Settings -> General -> WordPress Address (URL).
Не могу не упомянуть интересный момент: в main layout Yii размещаем структуру внутренности нашей темы из WP.
Мы уже близки к победе: подключаем gii (кто не в курсе почитать можно тут [6]).
В gii мы можем и создать модель CRUD, и получить на выходе собственно то, что хотели — скрещенный код Yii и WP.
It's alive!
На этом скрине мы можем наблюдать красивый CRUD из Yii с использованием CGridView.
Для авторизации везде попробуем вот такой метод [7].
В корне создаем папку wordpress и переносим туда внутренности самого WP.
По итогу моего ресеча на тему получаем такие выводы:
P.S. Хочу пожелать всем правильного выбора инструментов для решения определённого спектра задач, для которого они созданы, но и не терять азарта эксперементаторства
P.P.S. Немного линков на тему:
Примеры схожих подходов для реализации задумки в некоторых так же используются немного другие кастомизации yii.
www.yiiframework.com/wiki/382/integrating-wordpress-and-yii-working-out-the-details/ [8]
www.yiiframework.com/wiki/213/integrating-wordpress-and-yii-yet-another-approach/ [9]
www.yiiframework.com/wiki/202/integrating-yii-with-wordpress/ [10]
www.yiiframework.com/wiki/144/run-an-yii-application-inside-an-wordpress-page/ [11]
Автор: DataArt
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/tutorial/69474
Ссылки в тексте:
[1] родного сайта: http://www.yiiframework.com/download/
[2] WP: https://wordpress.org/download/
[3] Раз: http://www.yiiframework.com/wiki/322/integrating-wordpress-and-yii-still-another-approach-using-yii-as-the-router-controller/
[4] Два: http://www.yiiframework.com/wiki/595/wordpress-role-based-authentication-in-yii
[5] yourdomain/wordpress: http://yourdomain/wordpress
[6] тут: http://www.yiiframework.com/doc/guide/1.1/ru/topics.gii
[7] метод: http://www.yiiframework.com/wiki/595/wordpress-role-based-authentication-in-yii/
[8] www.yiiframework.com/wiki/382/integrating-wordpress-and-yii-working-out-the-details/: http://www.yiiframework.com/wiki/382/integrating-wordpress-and-yii-working-out-the-details/
[9] www.yiiframework.com/wiki/213/integrating-wordpress-and-yii-yet-another-approach/: http://www.yiiframework.com/wiki/213/integrating-wordpress-and-yii-yet-another-approach/
[10] www.yiiframework.com/wiki/202/integrating-yii-with-wordpress/: http://www.yiiframework.com/wiki/202/integrating-yii-with-wordpress/
[11] www.yiiframework.com/wiki/144/run-an-yii-application-inside-an-wordpress-page/: http://www.yiiframework.com/wiki/144/run-an-yii-application-inside-an-wordpress-page/
[12] Источник: http://habrahabr.ru/post/236635/
Нажмите здесь для печати.