Андрей Николаев написал: Настя Толкач , $eventManager->addEventHandler('sale', 'onSaleDeliveryRestrictionsClassNamesBuildList', 'myDeliveryFunction');// службы доставки
Как обьявлен $eventManager ??
use Bitrix\Main\EventManager; $eventManager = \Bitrix\Main\EventManager::getInstance();
Пытаюсь добавить свое собственное ограничение в службы доставки по группе пользователей. Нашла урок, в котором расписаны методы и события, с помощью которых это все можно сделать:
Создала в файле init.php событие и подключила функцию:
Код
$eventManager->addEventHandler('sale', 'onSaleDeliveryRestrictionsClassNamesBuildList', 'myDeliveryFunction');// службы доставки
// службы доставки
function myDeliveryFunction()
{
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
array(
'\MyDeliveryRestriction' => '/bitrix/php_interface/include/MyDeliveryRestriction.php',
)
);
}
В файле /bitrix/php_interface/include/MyDeliveryRestriction.php прописала класс для нового ограничения:
Код
<?php
use Bitrix\Sale\Delivery\Restrictions;
use Bitrix\Sale\Internals\Entity;
class MyDeliveryRestriction extends Restrictions\Base
{
public static $easeSort = 200;
/**
* @return mixed
*/
public static function getClassTitle()
{
return 'По группе пользователей';
}
/**
* @return mixed
*/
public static function getClassDescription()
{
return 'Ограничение по группе пользователей';
}
/**
* @param CollectableEntity $entity
* @return int
*/
protected static function extractParams(CollectableEntity $entity)
{
/** @var ShipmentCollection $collection */
$collection = $entity->getCollection();
/** @var Order $order */
$order = $collection->getOrder();
if($GLOBALS['USER']->isAuthorized()){
$usergroupId=$GLOBALS['USER']->GetUserGroupArray();
}else
$usergroupId=array(2);
return $usergroupId;
}
/**
* @param $deliveryId
* @return array
* @throws \Bitrix\Main\ArgumentException
*/
public static function getParamsStructure($deliveryId = 0)
{
$personTypeList = array();
$dbRes = \Bitrix\Main\GroupTable::getList();
while ($personType = $dbRes->fetch())
$personTypeList[$personType["ID"]] = $personType["NAME"]." (".$personType["ID"].")";
return array(
"USER_GROUP_ID" => array(
"TYPE" => "ENUM",
'MULTIPLE' => 'Y',
"LABEL" => Loc::getMessage("SALE_DLVR_RSTR_BY_PERSON_TYPE_NAME"),
"OPTIONS" => $personTypeList
)
);
}
/**
* @param $personTypeId
* @param array $params
* @param int $deliveryId
* @return bool
*/
public static function check($usergroupId, array $params, $deliveryId = 0)
{
if (is_array($params) && isset($params['USER_GROUP_ID']))
{
return sizeof(array_intersect($usergroupId, $params['USER_GROUP_ID']))>0;
}
return true;
}
/**
* @param $mode
* @return int
*/
public static function getSeverity($mode)
{
return \Bitrix\Sale\Delivery\Restrictions\Manager::SEVERITY_STRICT;
}
}
Но в службах доставки ограничение По группе пользователей не появляется, подскажите, пожалуйста, что я делаю не так?
search.form преобразует русские символы в escape последовательности
Иван Москвин, спасибо за подсказку. У меня тоже возникла такая же проблема после переноса сайта с локального сервера на хостинг, при этом локально на сайте не появлялась эта проблема. Решила проблему исправление в вызове компонента search.form "PAGE" => "#SITE_DIR#search/index.php" на "PAGE" => "/search/" :
компоненте catalog.section (вы ведь именно им выводите!?) - да, именно им
Да, нужна одновременная сортировка по трем параметрам (т.е. изначально при загрузке каталога товары должны выводится отсортированными по трем параметрам)
Да, Ваш вариант идеально бы подошел, но на сайте разрешена покупка товара при его отсутствии, т.е. товар можно покупать "под заказ" поэтому я так поняла, такой вариант мне не подойдет, к сожалению
Да, действительно, нужна сортировка не по количеству, а по доступности к покупке, т.е. те товары которых по количеству 0 должны быть внизу списка товаров, а в начале те, которые есть в наличии.
Здравствуйте) Мне нужна помощь специалистов. У меня в каталоге необходимо настроить три уровня сортировки: по индексу сортировки, по наличию на складе, по цене, то есть первыми выводятся с меньшим индексом, потом те, что в наличии, потом те, у которых цена меньше. В данный момент получилось настроить только два каких-либо вида сортировки: по наличию на складе и цене, например. А как добавить третий вид сортировки? в настройках компонента нет такой возможности. Добавила непосредственно в код вызова компонента поля