• Как добавить переменную типа {=this.Name} в обычное поле Битрикс?

    @tgarl
    Переменные на SEO вкладке не обрабатываются в полях других вкладок. Они только для SEO вкладки.
    Если вы хотите их использовать в подробно, то нужно в вашем шаблоне написать самостоятельно обработчик таких переменных.
    Например вы решили использовать {=this.Name} в поле подробно.
    Вам нужно примерно такую подмену сделать
    $arResult['DETAIL_TEXT']=str_replace('{=this.Name}', $arResult['NAME'], $arResult['DETAIL_TEXT']);

    Для цены вам нужно получить нужную цену в нужном вам формате и примерно так же написать замену.
    И так со всеми переменными какие вы хотите использовать
    Ответ написан
  • Как сделать общий вывод страницы редактирования материала?

    @tgarl
    Если вы настраиваете под админом, то там есть галочка Установить данные настройки по умолчанию для всех пользователей, в противном случае только для себя применить настройки возможно
    Ответ написан
    Комментировать
  • Как клонировать элемент если в количестве указанно "2"?

    @tgarl
    Честно не хочется ковыряться в вашем коде, запросов лишних у вас там огого.
    Но смысл решения вашей задачи такой:
    у вас есть код формирующий строку
    <tr>
                <td style="border: 0;opacity: 0;"><?echo $i+1;?></td>
    <td align="center"><?echo $A?></td>
    ...

    так и проверяйте ваше количество $A
    если больше 1 то делайте цикл внутри которого вывод, иначе - выводите как есть.
    if($A>1){
        for(){
               // то что имеете сейчас, но в цикле
               ?><tr><td style="border: 0;opacity: 0;"><?echo $i+1;?></td><td ...<?
           }
    }else{
               //то что имеете сейчас
                ?><tr><td style="border: 0;opacity: 0;"><?echo $i+1;?></td><td ...<?
         }
    }

    только примите к сведению
    Не зря же в компонентах есть разделение на файл result_modifier и template - это по сути помощь в разделении логики. Т.е. Вы сначала делаете все необходимые манипуляции, запросы, формируете конечный массив, а в темплейте работаете с получившимся массивом. Вот и вам нужно сделать рефакторинг вашего кода, разделить его на обработку и шаблон. А у вас все в куче, вот вы и не видите решения. А добавите цикл в который впихнете дублирующие запросы(при вашем коде именно так и получится) и получите, что страница грузится долго.
    Ответ написан
    9 комментариев
  • Как прикреплять картинку к заказу?

    @tgarl
    В корзину добавляется товар, а не картинка.
    Поэтому вариантов решения как я вижу 2:
    1. Вы после нажатия на кнопку в корзину обрабатываете данные, создаете новый товар с ценой и прочим, в том числе и с картинкой и отправляете его в корзину
    2. если это дополнение к существующему товару, то генерите картинку, регистрируете ее в битриксе и идентификатор/путь прикрепляете как свойство товара которое и отправляете в корзину.
    Ответ написан
    3 комментария
  • Можно ли оформлять заказы без авторизации?

    @tgarl
    По умолчанию, нет, нельзя. Заказ должен быть привязан к пользователю.
    Но если вы никуда выгружать не планируете в дальнейшем, то можно завести отдельного пользователя и кастомизировать оформление указав автоматическую регистрацию, но вместо создания пользователя подставлять вашего.
    Еще вариант написать свое оформление заказа, но опять же привязка к пользователю должна быть обязатаельна.

    Еще минус таких вариантов - это то что пользователи никак не смогут посмотреть историю когда и что они заказывали.
    Ответ написан
  • Почему не выгружаются товары из 1С в Битрикс?

    @tgarl
    Судя по логу вы выгружаете 1 товар и он выгрузился. Что именно вы имеете ввиду когда говорите, что не выгружается?

    Нет вашего товара? Проверьте не появился ли новый инфоблок, может не туда выгружается куда вы хотели.
    Не обновляются свойства? Включите сохранение файлов обмена, в dbconn добавьте define("BX_CATALOG_IMPORT_1C_PRESERVE", true); - возможно файлы приходят без свойств.
    Ответ написан
    1 комментарий
  • Как изменить цену при добавлении/изменении элемента торгового каталога?

    @tgarl
    Главная ваша ошибка, это то что вы просто хотите добавить цену, а она может уже у товара есть. Следовательно вам сначала нужно получить идентификатор цены товара. Если его нет, то тогда добавлять, иначе обновлять.

    Если посмотреть в документации, то там есть наглядный пример
    $res = CPrice::GetList(
            array(),
            array(
                    "PRODUCT_ID" => $PRODUCT_ID,
                    "CATALOG_GROUP_ID" => $PRICE_TYPE_ID
                )
        );
    
    if ($arr = $res->Fetch())
    {
        CPrice::Update($arr["ID"], $arFields); //если есть обновляем
    }
    else
    { //иначе добавляем
        CPrice::Add($arFields);
    }
    Ответ написан
  • Bitrix как сделать сортировку по дате создания раздела первого уровня в catalog.section.list?

    @tgarl
    В вашем случае только самому сортировку делать, штатно не будет
    Ответ написан
    Комментировать
  • Как обновить certbot на centos 7?

    @tgarl Автор вопроса
    Решилось все довольно просто. Команда работает, просто что-то зависло и перезапуск сервера убрал зависшее.

    далее запускаем обновление(нашу команду и ждем когда прочитает все депозитории), далее подтверждаем скачивание обновлений и готово.
    ну и после запускаем renew.
    Он скажет что там что-то с регистрацией связано указываем почту - в общем идет процесс как будто первый раз установили. далее находит настройки сайтов и все, все сертификаты обновляет
    После незабываем рестартануть службы от которых идет конфигурация(нжинкс, апач , у кого что)и вуаля все работает, обновлять отдельно acme не требуется
    Ответ написан
    Комментировать
  • Как запретить скидку для типа цен в Битрикс?

    @tgarl
    Оптовики ограничены группой, вот у скидки ограничение на группу также добавьте
    Ответ написан
    1 комментарий
  • Почему автоматически не создается событие при заполнении веб-формы Bitrix?

    @tgarl
    Результат заполнения вебформы у вас создается, верно?
    У вас сейчас стоит расширенный режим вебформы, верно?

    Проверьте доступ у этой вебформы, кто имеет право устанавливать статус (у вас как я вижу ID вебформы 'FORM_ID' => '19' ), тогда статус можно посмотреть на странице
    /bitrix/admin/form_status_list.php?lang=ru&WEB_FORM_ID=19

    если нет статуса, значит вы его не завели(при расширенном варианте его заводить нужно вручную самому)
    Если статус есть проверьте кто и что имеет право делать, иногда бывает либо забывают настроить после создания, либо переключая упрощенный режим и расширенный(туда-сюда), эта часть может слетать, пересохраните.

    Еще бывает некоторые создают сначала вебформу, затем идут вручную создают шаблон письма выбрав почтовое событие вебформы, в этом случае оно не привязывается к вебформе, хотя светится что привязка есть, шаблон нужно создать через вебформу. в этом случае заново
    Ответ написан
  • Как вывести из инфоблока определенные разделы и вложенные элементы в виде дерева?

    @tgarl
    1. Вы забыли при отборе элементов поставить фильтр на нужные разделы, поэтому берутся все и из других тоже, т.е. лишние (добавив фильтр вы избежите делать отдельные проверки)
    $arFilter = array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE_DATE" => "Y", "ACTIVE" => "Y", "SECTION_ID" => $idSections, "INCLUDE_SUBSECTIONS" => "Y",);

    2. формируйте нужный массив на уровне foreach ($arResult["ITEMS"] as $key => $arItem) , тогда вы избежите 3 вложенных циклов(3 вложенных цикла очень сильно нагружают, старайтесь такие конструкции избегать)
    Ответ написан
    Комментировать
  • Как сделать права на запись в временную папку?

    @tgarl
    сначала нужно проверить есть ли такая папка, и какой пользователь у вас
    bitrix:bitrix - а вы уверены что у вас такой?
    он легко может отличаться, пользователь bitrix в основном встречается если была установлена виртуальная машина от битрикса, а если ставили сайт без нее, то пользователь может очень сильно отличатся, у меня на одном проекте это 500:500

    Поставьте какую-нибудь ftp программу чтобы можно было визуально просмотреть пользователей, структуру сайта... Мне очень нравится winscp, всякие filezila нет, найдите какая вам больше по душе и ваш вопрос решится легко
    Ответ написан
  • Как добавить картинку к MORE_PHOTO?

    @tgarl
    $elementId=1; //ID элемента в который нужно добавить
    $tmpFilePath=$_SERVER['DOCUMENT_ROOT']."/upload/picatest.jpg";
    $arFile=array("VALUE" => \CFile::MakeFileArray($tmpFilePath),"DESCRIPTION"=>"");
    \CIBlockElement::SetPropertyValueCode($elementId, 'MORE_PHOTO', $arFile);


    таким обновлением он картинки не удаляет если были, а дописывает

    если нужно несколько картинок к элементу
    то собираем все в массив $arFile (пример без циклов и прочего)

    $elementId=1; //ID элемента в который нужно добавить
    
    $tmpFilePath=$_SERVER['DOCUMENT_ROOT']."/upload/picatest1.jpg";
    $arFile[]=array("VALUE" => \CFile::MakeFileArray($tmpFilePath),"DESCRIPTION"=>"");
    
    $tmpFilePath=$_SERVER['DOCUMENT_ROOT']."/upload/picatest2.jpg";
    $arFile[]=array("VALUE" => \CFile::MakeFileArray($tmpFilePath),"DESCRIPTION"=>"");
    
    $tmpFilePath=$_SERVER['DOCUMENT_ROOT']."/upload/picatest3.jpg";
    $arFile[]=array("VALUE" => \CFile::MakeFileArray($tmpFilePath),"DESCRIPTION"=>"");
    
    
    \CIBlockElement::SetPropertyValueCode($elementId, 'MORE_PHOTO', $arFile);
    Ответ написан
    Комментировать
  • Bitrix как убить обмен между БУС и 1С?

    @tgarl
    Понятно что это не очень-то похоже на решение проблемы, но вариантов как я вижу 3:
    1. Поставить ограничение на количество позиций в заказе(в большинстве случаев это и есть решение, для оптовиков это не удобно, но зато работать все будет более менее штатно)
    2. переписать оформление заказа разбивая его на несколько
    3. переписать обмен заказами с 1С чтобы сбор заказов был не налету, а подготовленные файлы, в этом случае если заказ большой, чтобы он отдавался только один
    Ответ написан
  • Как добавить в корзину товар с его скидкой по купону?

    @tgarl Автор вопроса
    нашел решение: после сохранения корзины вызываем новый ее объект и работаем дальше с ним и все скидки от корзины применяются. Странно конечно, но работает
    $basket->save();
    $basket = \Bitrix\Sale\Basket::loadItemsForFUser( $fuser,   's1'   );
    Ответ написан
    Комментировать
  • Как вызывать пагинацию для своего orm объекта в админке сайта?

    @tgarl
    Я еще прописывал вызовы
    $nav = new \Bitrix\Main\UI\PageNavigation("nav-more-notice");
    $nav->allowAllRecords(true)
       ->setPageSize(15)
       ->initFromUri();

    и убрать в навигации "TABLE_ID" => "my_table_id",
    Ответ написан
    Комментировать
  • Как обойти запрет кликов в BX.PopupWindow?

    @tgarl Автор вопроса
    Есть 2 решения этой задачи:
    1. как написал PetrPo добавить параметр
    compatibleMode: false

    2. я нашел такое
    events: {
    		onAfterPopupShow: function(popup) {
    					var obj= BX.findChild(popup.contentContainer, {className: 'form__btn1'}, true);
    					if (obj)
    					{
    						BX.bind(obj, 'mousedown', function(){ 
    							alert('111');
    						});
    					}
    		}
    Ответ написан
  • Не обновляются цены при выгрузке?

    @tgarl
    первое что можно включить - это сохранение файлов выгрузки - так хотя бы будете знать все файлы приходят или нет, полные или обрезаны
    в /bitrix/php_interface/dbconn.php добавить строку
    define("BX_CATALOG_IMPORT_1C_PRESERVE", true);
    но помните оставлять без присмотра после этого обмен нельзя иначе место на сервере очень быстро закончится.
    если все в порядке, то тут как вариант пробовать ковырять код и логировать его выполнение.

    Вообще такое может быть если файл очень большой(у нас на проекте было что файл весом более 400Мб не читался - улетало все в 502 ошибку, от полной выгрузки после этого отказались потом 1С-ник написал ограничение на количество товаров в файлах за раз обмена, а потом вообще пришлось писать новый обмен через справочники и свою обработку), попробуйте выгрузить только пару товаров.
    Ответ написан
  • Bitrix как передать переменную с одного шаблона на другой и использовать её?

    @tgarl
    result_modifier.php - тут конечно вы можете получить свои данные, но их нужно поместить в кеш компонента, если отсутвуют уже там, чтобы передать в component_epilog.php
    Если вам данные не нужны в template, то и получать их можно сразу в там же не задействуя result_modifier.
    а там уже все просто
    $GLOBALS['peremen'] = $arResult["AR_LIST_SERVICES_FILTER"];

    теперь ниже за пределами компонента ниже у вас есть $peremen, которую передаете в компонент в виде параметра

    ...
    'NEW_PARAM'=>$peremen,
    ...
    Ответ написан
    Комментировать