Yii + Bitrix
Нашел хороший, но неполный рецепт по склейке Yii и 1С-Битрикс. На этот раз захотелось мне из Yii-приложения лазить в базу через Bitrix API, однако вылезает фундаментальная проблема — конфликт имен классов (пространства имен не используются). Решение: в PhpStorm прогоняем по папке с фреймворком Yii функцию Replace in path (case sensitive, whole words only) для следующих пар слов:
После этого меняем имена файлов:CComponent → YiiComponent
CEvent → YiiEvent
CModule → YiiModule
CApplication → YiiApplication
CMenu → YiiMenu
Соответственно, если в приложении есть вызовы компонентов по старым именам (// в папке base
CComponent.php → YiiComponent.php
CModule.php → YiiModule.php
CApplication.php → YiiApplication.php
// в папке zii/widgets
CMenu.php → YiiMenu.php
$this->widget('zii.widget.CMenu')
) — нужно все переименовать.
Дописываем в index.php:
Как пользоваться:// ..
require_once($yii);
// наш код
function __autoload($className)
{
// подключаем файлы битрикса через автозагрузку
include_once('../bitrix/modules/main/include/prolog_before.php');
CModule::RequireAutoloadClass($className);
}
define("NO_BITRIX_AUTOLOAD", FALSE);
// сначала отключим автозагрузчик Yii, потом, после Битрикса, включим обратно
spl_autoload_unregister(array('YiiBase','autoload'));
spl_autoload_register('__autoload');
spl_autoload_register(array('YiiBase','autoload'));
// закончили
Yii::createWebApplication($config)->run();
public function actionFoobar()
{
if(CModule::IncludeModule('iblock'))
{
// если подключился модуль информационных блоков, можно работать...
}
}
TODO: Разобраться, возможно, получится повесить prolog_before.php
и prolog_after.php
на события onBeginRequest
и onEndRequest
.