Возможно уже кто-нибудь сталкивался. Прошу откликнуться. Требуется подключить шаблон от яндекса на БУС.
Нам дали [URL=https://gist.github.com/yandexmarketforbitrix/55b899e4b0327966ca2fa6f14e7eeb0b]Шаблон[/URL] там находятся классы и обработчик события. Привожу отрывки кода и некоторые файлы.
файл [URL=https://gist.github.com/yandexmarketforbitrix/55b899e4b0327966ca2fa6f14e7eeb0b#file-environment-php]environment.php[/URL]
[CODE]<?php
namespace PhpInterface\YandexMarket\Trading;
use Yandex\Market;
use Bitrix\Main;
if (!Main\Loader::includeModule('yandex.market')) { return; }
class Environment extends Market\Trading\Entity\Sale\Environment
{
protected function createDelivery()
{
return new Delivery($this);
}
protected function createStore()
{
return new Store($this);
}
protected function createOrderRegistry()
{
return new OrderRegistry($this);
}
}
[/CODE]файл [URL=https://gist.github.com/yandexmarketforbitrix/55b899e4b0327966ca2fa6f14e7eeb0b#file-delivery-php]delivery.php[/URL][CODE]<?php
namespace PhpInterface\YandexMarket\Trading;
use Yandex\Market;
use Bitrix\Main;
use Yandex\Market\Trading\Entity as TradingEntity;
if (!Main\Loader::includeModule('yandex.market')) { return; }
class Delivery extends Market\Trading\Entity\Sale\Delivery
{
public function calculate($deliveryId, TradingEntity\Reference\Order $order)
{
/** @var TradingEntity\Reference\Delivery\CalculationResult */
$calculateResult = parent::calculate($deliveryId, $order);
if (DeliveryRules::isPickup($deliveryId))
{
$saleOrder = $this->getOrderCalculatable($order);
$location = $saleOrder->getPropertyCollection()->getDeliveryLocation();
$locationCode = $location !== null ? $location->getValue() : null;
$calculateResult->setDeliveryType('PICKUP');
$calculateResult->setOutlets(DeliveryRules::getOutletCodes($deliveryId, $locationCode));
}
return $calculateResult;
}
}[/CODE]
и файл [URL=https://gist.github.com/yandexmarketforbitrix/55b899e4b0327966ca2fa6f14e7eeb0b#file-index-php]index.php[/URL][CODE]<?php
use Bitrix\Main;
require_once __DIR__ . '/delivery.php';
require_once __DIR__ . '/deliveryrules.php';
require_once __DIR__ . '/store.php';
require_once __DIR__ . '/order.php';
require_once __DIR__ . '/orderregistry.php';
require_once __DIR__ . '/environment.php';
$eventManager = Main\EventManager::getInstance();
$eventManager->addEventHandler('yandex.market', 'onTradingEntityEnvironmentBuildList', function() {
return new Main\EventResult(Main\EventResult::SUCCESS, [
'CODE' => 'user',
'ENVIRONMENT' => PhpInterface\YandexMarket\Trading\Environment::class,
]);
});
[/CODE]Я подключил это согласно п.1 статьи [URL=https://it-svalka.ru/blog/bitrix/zagruzka-sobstvennykh-klassov-v-1s-bitriks/#header_0]Автозагрузка классов[/URL]
1. Создал папку /local/php_interface/lib/yandex_market в нее поместил файлы environment.php и delivery.php
2. в Папке /local/php_interface создал файл autoload.php[CODE]<?php
Bitrix\Main\Loader::registerAutoLoadClasses(null,
[
'PhpInterface\YandexMarket\Trading\Delivery' => '/local/php_interface/lib/yandex_market/delivery.php',
'PhpInterface\YandexMarket\Trading\DeliveryRules' => '/local/php_interface/lib/yandex_market/deliveryrules.php',
'PhpInterface\YandexMarket\Trading\Environment' => '/local/php_interface/lib/yandex_market/store.php',
'PhpInterface\YandexMarket\Trading\Order' => '/local/php_interface/lib/yandex_market/order.php',
'PhpInterface\YandexMarket\Trading\OrderRegistry' => '/local/php_interface/lib/yandex_market/orderregistry.php',
'PhpInterface\YandexMarket\Trading\Store' => '/local/php_interface/lib/yandex_market/environment.php'
]
);[/CODE]3. В файле /local/php_interface/init.php внес такие строки
[CODE]<?
require_once($_SERVER['DOCUMENT_ROOT'] . '/local/php_interface/autoload.php');
use Bitrix\Main;
use Bitrix\Main\EventManager;
use Bitrix\Main\EventResult;
use Bitrix\Main\Loader;
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;
$eventManager = EventManager::getInstance();
$eventManager->addEventHandler('yandex.market', 'onTradingEntityEnvironmentBuildList', function () {
return new Main\EventResult(Main\EventResult::SUCCESS, [
'CODE' => 'user',
'ENVIRONMENT' => PhpInterface\YandexMarket\Trading\Environment::class,
]);
});[/CODE]
Обработчик зарегистрировался. Сайт работает, init.php отработал.
код в консоли возвращает:[CODE]use Bitrix\Main\EventManager;
$handlers = EventManager::getInstance()->findEventHandlers("yandex.market", "onTradingEntityEnvironmentBuildList");
echo var_dump($handlers, true);[/CODE]array (size=1) 0 [COLOR=#888a85]=>[/COLOR]
array (size=7)
'FROM_MODULE_ID' [COLOR=#888a85]=>[/COLOR] string [COLOR=#cc0000]'yandex.market'[/COLOR] (length=13)
'MESSAGE_ID' [COLOR=#888a85]=>[/COLOR] string [COLOR=#cc0000]'onTradingEntityEnvironmentBuildList'[/COLOR] (length=35)
'CALLBACK' [COLOR=#888a85]=>[/COLOR]
object(Closure)[72]
'SORT' [COLOR=#888a85]=>[/COLOR] int [COLOR=#4e9a06]100[/COLOR]
'FULL_PATH' [COLOR=#888a85]=>[/COLOR] boolean [COLOR=#75507b]false[/COLOR]
'VERSION' [COLOR=#888a85]=>[/COLOR] int [COLOR=#4e9a06]2[/COLOR]
'TO_NAME' [COLOR=#888a85]=>[/COLOR] string [COLOR=#cc0000]'callable'[/COLOR] (length=8)
Но теперь при работе модуле яндекса возникает ошибка
PhpInterface\YandexMarket\Trading\Environment must extends Yandex\Market\Trading\Entity\Reference\Environment for user (100)
Правильно ли я подключил классы и обработчик событий из исходников?
Нам дали [URL=https://gist.github.com/yandexmarketforbitrix/55b899e4b0327966ca2fa6f14e7eeb0b]Шаблон[/URL] там находятся классы и обработчик события. Привожу отрывки кода и некоторые файлы.
файл [URL=https://gist.github.com/yandexmarketforbitrix/55b899e4b0327966ca2fa6f14e7eeb0b#file-environment-php]environment.php[/URL]
[CODE]<?php
namespace PhpInterface\YandexMarket\Trading;
use Yandex\Market;
use Bitrix\Main;
if (!Main\Loader::includeModule('yandex.market')) { return; }
class Environment extends Market\Trading\Entity\Sale\Environment
{
protected function createDelivery()
{
return new Delivery($this);
}
protected function createStore()
{
return new Store($this);
}
protected function createOrderRegistry()
{
return new OrderRegistry($this);
}
}
[/CODE]файл [URL=https://gist.github.com/yandexmarketforbitrix/55b899e4b0327966ca2fa6f14e7eeb0b#file-delivery-php]delivery.php[/URL][CODE]<?php
namespace PhpInterface\YandexMarket\Trading;
use Yandex\Market;
use Bitrix\Main;
use Yandex\Market\Trading\Entity as TradingEntity;
if (!Main\Loader::includeModule('yandex.market')) { return; }
class Delivery extends Market\Trading\Entity\Sale\Delivery
{
public function calculate($deliveryId, TradingEntity\Reference\Order $order)
{
/** @var TradingEntity\Reference\Delivery\CalculationResult */
$calculateResult = parent::calculate($deliveryId, $order);
if (DeliveryRules::isPickup($deliveryId))
{
$saleOrder = $this->getOrderCalculatable($order);
$location = $saleOrder->getPropertyCollection()->getDeliveryLocation();
$locationCode = $location !== null ? $location->getValue() : null;
$calculateResult->setDeliveryType('PICKUP');
$calculateResult->setOutlets(DeliveryRules::getOutletCodes($deliveryId, $locationCode));
}
return $calculateResult;
}
}[/CODE]
и файл [URL=https://gist.github.com/yandexmarketforbitrix/55b899e4b0327966ca2fa6f14e7eeb0b#file-index-php]index.php[/URL][CODE]<?php
use Bitrix\Main;
require_once __DIR__ . '/delivery.php';
require_once __DIR__ . '/deliveryrules.php';
require_once __DIR__ . '/store.php';
require_once __DIR__ . '/order.php';
require_once __DIR__ . '/orderregistry.php';
require_once __DIR__ . '/environment.php';
$eventManager = Main\EventManager::getInstance();
$eventManager->addEventHandler('yandex.market', 'onTradingEntityEnvironmentBuildList', function() {
return new Main\EventResult(Main\EventResult::SUCCESS, [
'CODE' => 'user',
'ENVIRONMENT' => PhpInterface\YandexMarket\Trading\Environment::class,
]);
});
[/CODE]Я подключил это согласно п.1 статьи [URL=https://it-svalka.ru/blog/bitrix/zagruzka-sobstvennykh-klassov-v-1s-bitriks/#header_0]Автозагрузка классов[/URL]
1. Создал папку /local/php_interface/lib/yandex_market в нее поместил файлы environment.php и delivery.php
2. в Папке /local/php_interface создал файл autoload.php[CODE]<?php
Bitrix\Main\Loader::registerAutoLoadClasses(null,
[
'PhpInterface\YandexMarket\Trading\Delivery' => '/local/php_interface/lib/yandex_market/delivery.php',
'PhpInterface\YandexMarket\Trading\DeliveryRules' => '/local/php_interface/lib/yandex_market/deliveryrules.php',
'PhpInterface\YandexMarket\Trading\Environment' => '/local/php_interface/lib/yandex_market/store.php',
'PhpInterface\YandexMarket\Trading\Order' => '/local/php_interface/lib/yandex_market/order.php',
'PhpInterface\YandexMarket\Trading\OrderRegistry' => '/local/php_interface/lib/yandex_market/orderregistry.php',
'PhpInterface\YandexMarket\Trading\Store' => '/local/php_interface/lib/yandex_market/environment.php'
]
);[/CODE]3. В файле /local/php_interface/init.php внес такие строки
[CODE]<?
require_once($_SERVER['DOCUMENT_ROOT'] . '/local/php_interface/autoload.php');
use Bitrix\Main;
use Bitrix\Main\EventManager;
use Bitrix\Main\EventResult;
use Bitrix\Main\Loader;
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;
$eventManager = EventManager::getInstance();
$eventManager->addEventHandler('yandex.market', 'onTradingEntityEnvironmentBuildList', function () {
return new Main\EventResult(Main\EventResult::SUCCESS, [
'CODE' => 'user',
'ENVIRONMENT' => PhpInterface\YandexMarket\Trading\Environment::class,
]);
});[/CODE]
Обработчик зарегистрировался. Сайт работает, init.php отработал.
код в консоли возвращает:[CODE]use Bitrix\Main\EventManager;
$handlers = EventManager::getInstance()->findEventHandlers("yandex.market", "onTradingEntityEnvironmentBuildList");
echo var_dump($handlers, true);[/CODE]array (size=1) 0 [COLOR=#888a85]=>[/COLOR]
array (size=7)
'FROM_MODULE_ID' [COLOR=#888a85]=>[/COLOR] string [COLOR=#cc0000]'yandex.market'[/COLOR] (length=13)
'MESSAGE_ID' [COLOR=#888a85]=>[/COLOR] string [COLOR=#cc0000]'onTradingEntityEnvironmentBuildList'[/COLOR] (length=35)
'CALLBACK' [COLOR=#888a85]=>[/COLOR]
object(Closure)[72]
'SORT' [COLOR=#888a85]=>[/COLOR] int [COLOR=#4e9a06]100[/COLOR]
'FULL_PATH' [COLOR=#888a85]=>[/COLOR] boolean [COLOR=#75507b]false[/COLOR]
'VERSION' [COLOR=#888a85]=>[/COLOR] int [COLOR=#4e9a06]2[/COLOR]
'TO_NAME' [COLOR=#888a85]=>[/COLOR] string [COLOR=#cc0000]'callable'[/COLOR] (length=8)
Но теперь при работе модуле яндекса возникает ошибка
PhpInterface\YandexMarket\Trading\Environment must extends Yandex\Market\Trading\Entity\Reference\Environment for user (100)
Правильно ли я подключил классы и обработчик событий из исходников?