Yii + Wordpress = <3, Или Увлекательный Эксперимент Франкенштейна

Всем привет. Я Денис Мельский.

Я работаю PHP-разработчиком в DataArt. Мои профессиональные интересы — веб-разработка и Linux. Сегодня мне бы хотелось поговорить с вами о «скрещивании ежа со змеей».



Yii + WordPress = <3, или увлекательный эксперимент Франкенштейна



вступление

На первый взгляд может показаться, что это безумие и в каком-то смысле архитектурный костыль.

Но, если посмотреть на это с другой стороны, это один из вариантов выхода из часто встречающейся тупиковой ситуации: заказчик хочет WordPress и ничего другого не принимает. Скорее всего, он услышал что-то подобное, погуглил, увидел, и ему сосед посоветовал гуру кодера Джона (или Васи).

А программисты наотрез отказываются ставить на движок блога, у которого, мягко говоря, не лучшая архитектура, функционал, скажем, интернет-магазина, форума, а вдобавок - REST API для партнеров этого магазина, и сверху — еще пачка крон с бизнес-логикой.

Поставим задачу найти выход, который удовлетворит всех участников проблемы, и чтобы наш продукт нормально запускался и работал.

Один из вариантов, который я нашел, исследуя эту тему, — это скрещивание WordPress и Yii.

Да начнется вечеринка

Что ж, давайте попробуем освоить кое-что из этого в коде.

Начнем с загрузки фреймворка Yii. Думаю, композитор для подобных экспериментов перебор - за счет настройки путей и архитектуры всей сборки у нас будет больше возможностей для экспериментов без композитора, в т.ч.

мы можем легко скачать с помощью домашний сайт .

Такую же простую манипуляцию проделываем с В.

П.

.

Далее вооружаемся вспомогательными мануалами: Один раз Два Пройдемся по первому мануалу, к которому я хочу добавить несколько примечаний и комментариев.

Устанавливаем WP и размещаем всё в следующей архитектуре:

Yii + WordPress = <3, или увлекательный эксперимент Франкенштейна

Во-первых, давайте посмотрим на ключевые строки нашего index.php.

  
   

define(‘WP_USE_THEMES’, true); $wp_did_header = true; require_once(‘wordpress/wp-load.php’);

Здесь мы видим начало включения WP в общую картину происходящего.

Создаем класс Exception Handler, суть которого на основе yii-фреймворка 404-исключения заключается в передаче полномочий 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 на уровне БД есть настройка во вкладке `wp_options` — «siteurl», ее нужно изменить на вашдомен/wordpress .

Вы также можете изменить это в администраторе WP. Настройки -> Общие -> Адрес WordPress (URL).

Не могу не упомянуть интересный момент: в основной макет Yii мы помещаем структуру интерьера нашей темы из WP.

Yii + WordPress = <3, или увлекательный эксперимент Франкенштейна

Мы уже близки к победе: подключаем гии (кто не знает, можете прочитать здесь ).

В gii мы можем создать CRUD-модель и получить в результате именно то, что хотели — скрестить код Yii и WP.

Yii + WordPress = <3, или увлекательный эксперимент Франкенштейна

Оно живое! На этом скриншоте мы видим красивый CRUD от Yii с использованием CGridView. Для авторизации везде попробуем что-то вроде этого метод .

Создаем в корне папку wordpress и переносим туда внутренности самого WP. По результатам моего исследования по теме, мы делаем следующие выводы:

  • Очень возможно пропустить Frontend WP через Yii с настройкой темы, и в итоге мы сможем получить в Yii кастомные модули, которые будут гармонично жить с WP. Кроме того, есть возможность синхронизировать пользователей из WP в Yii.
  • Гармонично связать Backend WP с Yii мне не удалось, т.е.

    общая админка для стандартных модулей WP и пользовательских модулей Yii — не лучший вариант реализации.

    Это связано с тем, что бэкенд WP имеет очень нестандартную архитектуру, не очень подходящую для интеграции.

    Но это результаты моих исследований, которые не претендуют на истину в последней инстанции.

  • В результате мы можем разработать приложение, которое будет гармонично сочетать фронтенд WP с пользовательскими модулями Yii. В бэкенде WP мы можем разрабатывать собственные плагины и загружать Yii в качестве одного из вариантов реализации.

    И даже, меня не пугает этот вариант, рендерить некоторые модули Yii через iframe внутри плагина WP.

P.S. Хочется пожелать всем правильного выбора инструментов для решения определенного круга задач, для которых они созданы, но и не терять азарта экспериментирования.

П.

П.

С.

Несколько ссылок по теме: Примеры подобных подходов к реализации идей; некоторые также используют немного другие настройки yii. www.yiiframework.com/wiki/382/integrating-wordpress-and-yii-working-out-the-details www.yiiframework.com/wiki/322/integrating-wordpress-and-yii-still-another-approach-using-yii-as-the-router-controller www.yiiframework.com/wiki/213/integrating-wordpress-and-yii-yet-another-approach www.yiiframework.com/wiki/202/integrating-yii-with-wordpress www.yiiframework.com/wiki/144/run-an-yii-application-inside-an-wordpress-page Теги: #php #wordpress #yii-framework #Yii #учебник #Эксперименты #wordpress #php

Вместе с данным постом часто просматривают: