Задать вопрос
  • /upload/iblock занимает огромное количество места, что делать?

    @tgarl
    Сбросить кеш еще можно. бывает на проектах размерами картинок играются и ресайзы накапливаются, хотя уже давно ими не пользуются.
  • Почему могут не отображаться изображения товаров?

    @tgarl
    Пробую просто скопировать ссылку и вставить в браузер, все равно не открыает.

    я так понял что и файла нет, раз файл есть, то он просто поврежден. Нужно перезагружать картинку заново.
  • Почему могут не отображаться изображения товаров?

    @tgarl
    значит картинка была удалена физически, а не через инфоблок. Вот и получается запись есть что должна быть картинка, а по факту нету.
    Скорее всего этот оптимайзер должен был сжимать картинки и подменять их по основному пути, а после удаления модуля этого не происходит
  • Почему кеш не обновляется?

    @tgarl
    работали нормально, потом через некоторое время немного доработал,

    скорее всего какую-то динамичискую обработку вы занесли в кеш. В этом случае получается что кеш вам выдает html страницу , а ваш обработчик который вы ожидали что что-то проверит , проставит значения не загружается. вот и результат. Чаще всего такое бывает когда в шаблоне компонента используют еще компоненты и получается чтобы отработал 2 компонент нужно чтобы первый не кешировался. При сбросе кеша получается что первый компонент должен выполнится полностью и как раз в этот момент начинает работать 2. Решение: вынести динамическую часть(компонент2 если я правильно догадался о проблеме) component_epilog.php
  • Как правильно сформировать таблицу с размерами и цветами?

    @tgarl
    У вас есть массив $arResult['OFFERS']
    заводите новую переменную и в цикле ее заполняете примерно так
    $arPoColor=[];
    
    foreach($arResult['OFFERS'] as $newEl){
    $arPoColor[$newEl['PROPERTIES']['код свойства содержащий цвет']['VALUE']][]=$newEl;
    }
    
    //а дальше уже где рисуете таблицу используете не $arResult['OFFERS'], а $arPoColor
  • Как выводить элементы в определенном порядке?

    @tgarl Автор вопроса
    Тоже не подходит, версия битрикса ниже чем появилась данная возможность
  • Как выводить элементы в определенном порядке?

    @tgarl Автор вопроса
    Вы немного недопонимаете, что мне нужно. В комментарии у Ирины я описал структуру которую имеем и что хотим. Я не могу воспользоваться такой сортировкой по нескольким причинам: это не разовая ситуация, а каждодневная почти, второе, сортировка нужна не на одной странице, а на разных и для каждой своя, третье, сортировка значений свойств нужна в другом месте.
  • Как выводить элементы в определенном порядке?

    @tgarl Автор вопроса
    Мне стоит наверное расписать как устроен раздел для которого это нужно.
    Есть каталог, элементы которого выгружаются из 1С. Товаров много. Сортировка каталога идет общая своя:
    1. распродажный товар или нет,
    2. новинка или нет
    3. по цене
    У товаров есть свойства линия и бренд.
    Значений брендов что-то около 300, значений линий Если я не ошибаюсь около 10-15000.(тип свойства список). Периодически в каталоге создаются разделы(спецстраницы, 2-3 в неделю, старые могут как оставаться, так и удалятся) со списком фильтров(в свойстве раздела прописывается). Для таких разделов выводятся товары по фильтру, а не по привязке(такие разделы пустые).
    Так вот последние желания появились, что в одном таком разделе требуется чтобы определенная линия шла первой, в другом бренд, в третьем 2 линии, а потом остальные и т.д. До текущего момента хватало сортировки по другим свойствам, чтобы на первые строчки выходило хотя бы 5-10 нужных товаров. Теперь нет.

    Поэтому заводить свойства для товаров очень не хочется, это же считай через день, плюс обработчик.
    К тому же в каталоге и так не десяток свойств в наличии.
  • Как выводить элементы в определенном порядке?

    @tgarl Автор вопроса
    Этот вариант не подойдет. У меня нет сортировки у бренда. И это свойство элемента, не отдельный инфоблок.
  • Как выводить элементы в определенном порядке?

    @tgarl Автор вопроса
    Я рассматривал этот вариант, но он плох тем, что придется на каждое желание его переписывать. Сейчас хотят одну линию, завтра другую для конкретного раздела и т.д.
    Этот вариант не очень хочется, так как на каждый чих писать новый обработчик заполнения свойств + их дублеж когда начнутся для одного раздела так для другого по другому
  • Как пересчитать заказ с учетом всех скидок с использованием события OnSaleOrderSaved?

    @tgarl Автор вопроса
    Я сначала и хотел на событии до сохранения, но на этом событии у меня нет отгрузки почему-то, а если я пытаюсь ее создать и сохранить, то в заказе вообще отгрузка не создается.
  • Как пересчитать заказ с учетом всех скидок с использованием события OnSaleOrderSaved?

    @tgarl Автор вопроса
    Оформление заказа старое, в нем нет D7, соответсвенно нет обработок ExtraServices. Как добавить выбор допуслуг на старом API я не нашел. Поэтому остается вариант событий. У события "перед сохранением" нет еще отгрузок, а у после сохранения (OnSaleOrderSaved) не могу пересчитать заказ со всеми скидками.
  • Как пересчитать заказ с учетом всех скидок с использованием события OnSaleOrderSaved?

    @tgarl Автор вопроса
    и вызываю пересчет
    $basket->refreshData(array('PRICE', 'COUPONS'));
    $discount->calculate();


    если на отдельной странице вызвать
    spoiler

    $order_resave = \Bitrix\Sale\Order::load($now_order_id);
                $discount = $order_resave->getDiscount();
                \Bitrix\Sale\DiscountCouponsManager::clearApply(true);
                \Bitrix\Sale\DiscountCouponsManager::useSavedCouponsForApply(true);
                $discount->setOrderRefresh(true);
                $discount->setApplyResult(array());
    
                if (!($basket = $order_resave->getBasket())) {
                   throw new \Bitrix\Main\ObjectNotFoundException('Entity "Basket" not found');
                }
    
                $basket->refreshData(array('PRICE', 'COUPONS'));
                $discount->calculate();
    
                $order_resave->setField("PRICE", $order_resave->getPrice());
                $order_resave->save();


    то пересчет срабатывает, в событии нет
  • В один из разделов каталога выгружаются не все фотографии позиций. Как исправить?

    @tgarl
    Возможно какое-то ограничение в настройках сервера на одномоментное количество записей в файл. Столкнулся с похожей проблемой(и пришел к такому выводу), причем не предсказуемо где это проявится, а где нет. Например, на главной странице file_put_contents без вопросов всегда выполняется, а в контактах вставляешь тот же код фиг вам. Через пару недель наоборот. Из-за такой ситуации картинки в каталоге пропадают - файлы просто не сохраняются на сервере с выгрузкой, а в файле иморта указаны, поэтому старые затираются, а новых нет. Найдете причину отпишитесь, может и нам поможет.
  • Узнать купоны введенные пользователем в Bitrix?

    @tgarl
    Возможно вы что-то не так делаете. Мой пример выдает результат если купон был применен в корзине, но еще заказ не оформлен. Если нужно у сущестующего заказа, то
    сначала нужно заказ подгрузить
    $order = Bitrix\Sale\Order::load($order_id);
    далее
    
    $discounts  =  $order ->getDiscount();
     $res  =  $discounts ->getApplyResult();
    
    foreach($res['COUPON_LIST'] as $cupo_n=>$ar_r){

    кроме того может быть скидка без купона, тогда ключа COUPON_LIST не будет
    распечатайте массив $res и посмотрите что в нем получается
  • Как сделать акцию в битриксе 3 товара по цене 2?

    @tgarl Автор вопроса
    Ну думаю не последний раз у нас такая акция, перед следующим запуском протестирую ваше решение, возможно из описания я не все возможности увидел и понял. В моем решении периодически проскакивают ошибки - мой вариант сильно не оптимизирован(если кто-то им будет пользоваться учтите этот момент) и грузит сайт, что выдает иногда непредсказуемый результат например на 50 товаров 30 по цене 0. А вынос скидочного товара в отдельную позицию плохо сказывается на обмене с 1С(объединяет либо игнорирует товар ) и пересчет заказа у нас на сайте его удваивал.
  • Как сделать акцию в битриксе 3 товара по цене 2?

    @tgarl Автор вопроса
    Модуль полезный, но не подходит для моей задачи.

    Он не определяет самый дешевый товар, 3 товар это количественный или позиционный?
    если я закину 1 позицию на 3 ед по 10р и 1 позицию на 1 ед по 9р:
    итог скидка должна быть на товар за 9 рублей и не важно в какой последовательности я закину товары.

    если 1 позиця на 3 ед по 10 -> должна быть скидка на 10р
    если 1 позиция на 4 ед по 10р и 1 позиция по 2 ед на 11 -> мы должны получить скидку на 20р

    т.е. каждая самая дешевая 3 единица должна быть бесплатно
  • Как сделать акцию в битриксе 3 товара по цене 2?

    @tgarl Автор вопроса
    А вы можете поделиться примером как вы реализовали? Может я тогда пойму что не так в моем коде. По описанной вами задаче принцип похож.
  • Как сделать акцию в битриксе 3 товара по цене 2?

    @tgarl Автор вопроса
    Я у Романа в комментариях привел код, который я использовал.
    Скидка 3=2 в моем случае подразумевает следующее:
    закинули 3 позиции одного товара по 10р, получили не 30, а 20 рублей
    закинули еще 1 товар за 5 рублей, получили 30 рублей
    т.е. каждый 3 самый дешевый товар в корзиние должен быть бесплатным
    закинули 6 товаров, бесплатными должны стать 2 товара и.д.

    В приведенном мной коде у Романа получается корзина в виде:
    1вариант:
    товар | количество | цена | сумма
    а | 2 | 10 | 20
    a | 1 | 10 | 0

    2 вариант:
    товар | количество | цена | сумма
    а | 3 | 10 | 30
    b | 1 | 5 | 0

    но когда я перехожу к оформлению заказа происходит зацикливание и корзина меняется в большую сторону