@maxyc_webber
Web-программист

Yii2: Как внедрить Bitrix?

Стоит задача обьединить эти два FW в одном месте.
Битрикс отвечает за витрину, Yii2 отвечает за обработку данных от поставщиков и подготовка данных в бд для битрикса.
Создал модель, в которой в идеале было бы описать основные методы работы с продукцией через API Bitrix, но данные удобно получать из Yii2ActiveRecord

<?php
namespace app\models;
use app\models\partners\Merlion\Category;
use app\models\partners\Merlion\Product;
use app\models\partners\Merlion\Property;
use app\models\Vendor;

class Bitrix extends \yii\base\Model 
{
    private $_element = null;
    
    public function init()
    {
        
            $_SERVER["DOCUMENT_ROOT"] = '/var/www';
            define("NO_KEEP_STATISTIC", true); 
            define("NOT_CHECK_PERMISSIONS", true); 
            set_time_limit(0); 
            define("LANG", "ru"); 
            require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); 
            
            global $DB;
            
            // этот блок отрабатывает норм.
            \CModule::IncludeModule("iblock");
            \CModule::IncludeModule("currency");
            \CModule::IncludeModule("catalog");
        
        // тут уже ругается, что в \ данный класс не найден. , я так понимаю, что он не инклудится корректно в prolog_before
        $this->_element = new \CIBlockElement;
	
        return parent::init();
    }
    
    public function uploadGoods()
    {
        $iblock_res = \CIBlock::GetList(array(), array('TYPE'=>'catalog_co'));
        while($iblock = $iblock_res->Fetch()){debug($iblock);}
    }
}


Как решить колизию?
  • Вопрос задан
  • 4044 просмотра
Пригласить эксперта
Ответы на вопрос 1
@fewald
В аналогичной ситуации, get_declared_classes() показало что CIBlockElement действительно остался незагруженным, несмотря на prolog_before и include_module.

До причины не докопался, грязно хакнул:
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/iblock/classes/mysql/iblockelement.php");
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/iblock/classes/mysql/iblock.php");
Не хорошо (на случай, кому срочно).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы