Цитата |
---|
Сергей . написал: а если подключить Bitrix\Sale? |
04.07.2019 11:39:36
|
|||
|
02.07.2019 16:25:25
На деле там css файл и мало вероятно, что он кому то потребуется. Я по другому понимал необходимость, поэтому и спросил. Бывает что фронт разработка закончена и back-end программист должен по ТЗ внедрить вёрстку как есть, чтобы загрузка всех css и js была идентичной. Поэтому при вопросе в фронт-эндщику, с вопросами "посмотри, тут вёрстка поехала" или "перекрой вот этот стиль который bitrix генерирует", можно услышать "на вёрстке всё работает корректно, разберитесь с back-end!" Хотел узнать как правильно решить задачу исключительно силами back-end, не трогая css код. |
|||
|
02.07.2019 15:59:43
Касаемо ошибки в документации, её поправят? Если я как пользователь опубликую комментарий его добавят? |
|||
|
02.07.2019 14:45:00
Ваш ответ, так написан, что возможно предполагает и другие варианты. Есть ли варианты программированием на back-end? Можете что то отрицательное сказать, про метод: 1) включаем буферизацию вывода на область где подключается скрипт в html, парсим, удаляем ссылку, возвращаем результат? Вопрос о том насколько такое приемлемо с точки зрения стандартов разработки на bitrix? |
|||
|
02.07.2019 14:05:07
По ссылке -
<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); use Bitrix\Main\Context, Bitrix\Currency\CurrencyManager, Bitrix\Sale\Order, Bitrix\Sale\Basket, Bitrix\Sale\Delivery, Bitrix\Sale\PaySystem, YandexCheckout\Client; $basket = \Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(CSaleBasket::GetBasketUserID()), \Bitrix\Main\Context::getCurrent()->getSite()); // Поскольку корзина не привязана к заказу делаем так $context = new \Bitrix\Sale\Discount\Context\Fuser($basket->getFUserId()); $discounts = \Bitrix\Sale\Discount::buildFromBasket($basket, $context); $r = $discounts->calculate();// Проверял, в $r есть нужные мне скидки if (!$r->isSuccess()) { var_dump($r->getErrorMessages()); } $result = $discounts->getApplyResult();// var_dump($result); показывает что ключа ['BASKET_ITEMS'] в нём нет if (isset($result['BASKET_ITEMS'])) {// из комментария выше следует что следующий код выполнен не будет $r = $basket->applyDiscount($result['BASKET_ITEMS']); if (!$r->isSuccess()) { var_dump($r->getErrorMessages()); } } Вопрос в том, почему $result['BASKET_ITEMS'] не существует и как применить скидки чтобы цена с скидкой была доступна по $basketItem->getPrice() а так же величина скидки по $basketItem->getField("DISCOUNT_PRICE") $basketItem получаю так foreach ($basket->getBasketItems() as $basketItem) {...} |
|
|
02.07.2019 10:32:54
|
|||||
|
28.06.2019 16:30:07
|
|||
|
28.06.2019 16:13:42
Благодарю за ответ! Нашёл ещё вот такой вариант Основанный на переписывании класса: $this->facet = new Facet($this->IBLOCK_ID); сам его не пробовал. Может быть кто то ещё метод предложит? |
|||
|
28.06.2019 16:00:14
Нашёл по ссылке
Вот только информации как им пользоваться почти нет. 2 вопроса: 1) с какой версии этот параметр доступен? 2) как им пользоваться? |
|
|
28.06.2019 14:00:43
Сейчас решил вопрос следующим образом:
|
|
|
28.06.2019 13:59:59
Сейчас решил следующим образом, при этом если у Вас есть иное решение - пожалуйста, предлагайте!
require($_SERVER['DOCUMENT_ROOT'].'/local/templates/main/phpscripts/myGetBasketData.php');// класс нужен для получения Id товаров с скидкой $myGetBasketData = new myGetBasketData; global $arrFilter; $arrFilter = array(); $arrFilter["=ID"] = $myGetBasketData->getProductIdDiscontAr(); далее $arrFilter передаём комплексному компоненту bitrix catalog через FILTER_NAME а именно $APPLICATION->IncludeComponent( "bitrix:catalog", "new_catalog", array( "FILTER_NAME" => "arrFilter", ... Метод getProductIdDiscontAr класса myGetBasketData доступен в листинге файла класса myGetBasketData.php по ссылке Важно! Метод возвращает массив товаров с скидкой, только тогда, когда скидка создана непосредственно на товар, то есть так как показано на скринсшоте. ![]() Алгоритм работы метода определения Id товаров с скидкой метода getProductIdDiscontAr() примерно следующий 1) получается список скидок через CSaleDiscount::GetList 2) далее в foreach Id скидок передаются в CSaleDiscount::GetByID 3) у возвращённых данных проверяется наличие и не пустота ключа массива ["CONDITIONS"] 4) если строка есть и не пустая парсятся данные от Equal";s:5:"value";a: до } 5) если такие данные найдены то они множественно парсятся от i: до ; 6) каждое второе значение это и есть Id товара на который действует скидка(эти Id собираются в массив $prodIdAr и возвращаются методом getProductIdDiscontAr) Таким образом если у Вас скидки указаны не явно на товар а например по свойства, то метод нужно дописывать под такие скидки. |
|
|