• Как в веб-форме Битрикс прикрепить файл PDF для отправки?

    @PetrPo
    Все работает. Был кривой pdf-ник
    Ответ написан
    Комментировать
  • Почему не работает запрос на добавление в корзину Битрикс через XMLHttpRequest?

    @PetrPo
    BX.ajax({
    	url: '<?=\CUtil::jsEscape(SITE_TEMPLATE_PATH)?>/ajax/addtobasket.php',
    	method: 'POST',
    	data: {"id": idElements, "count": countElements},
    	dataType: 'json',
    	async: true,
    	onsuccess: BX.delegate(function (response) {
    
    	}, this),
    	onfailure: BX.delegate(function () {
    
    	}, this)
    });


    и еще юзай лучше битриксовое api, тогда и проблем таких не будет
    $request = \Bitrix\Main\HttpApplication::getInstance()->getContext()->getRequest();
    if($request->isPost() && isset($request['id']) && isset($request['count'])) {
    
    }
    Ответ написан
    Комментировать
  • Как передать в форму значения из другого источника?

    @PetrPo
    Если речь про выбор этой категории в select-е
    5ff1789a1192f144308433.jpeg
    то там прямо в шаблоне этого селекта прописано, что если в get-е idea=значение option-а из этого селекта то автоматически проставится значение.
    Значение option-ов=символьный код категории, в get можно указывать lowercase
    Ответ написан
  • Версия amcharts Битрикс?

    @PetrPo
    amcharts4
    /bitrix/modules/main/jscore.php
    Ответ написан
    Комментировать
  • Почему в title передается название инфоблока, когда находишься в корне раздела?

    @PetrPo
    В шаблоне комплекного компонента находишь вызов списка и ставишь SET_TITLE = N
    Ответ написан
    Комментировать
  • Как реализовать изменение корзины в оформлении заказа?

    @PetrPo
    1. Ставишь на одну страницу bitrix:sale.basket.basket и sale.order.ajax
    2. У корзины ставишь параметр BASKET_WITH_ORDER_INTEGRATION = Y
    3. Получаешь профит

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

    @PetrPo
    Поставь в настройках компонента CACHE_GROUPS = Y
    Ответ написан
    Комментировать
  • Как проверить существует ли свойство страницы (отложенные функции)?

    @PetrPo
    перенеси компонент в футер))
    <?
    ob_start();
    	// вызов компонента
        $mainSiteSelectorComponent = ob_get_contents();
    ob_end_clean();
    $APPLICATION->AddViewContent('mainSiteSelectorComponent', $mainSiteSelectorComponent);
    ?>


    В хедере, где выводил компонент
    <?$APPLICATION->ShowViewContent('mainSiteSelectorComponent');?>


    Дальше варианта 2:
    1. Впринципе, как ты правильно говорил шаблон этого компонент не кешируется, так что можешь свободно получить значение свойста в нем
    2. Передать значение в параметр компонента, это если бы шаблон был кешируемым

    Получить свойство
    $APPLICATION->GetProperty('link');

    UPD
    соответсвенно можешь и проверку вставить
    $propertyLink = $APPLICATION->GetProperty('link');
    if($propertyLink) {
    
    }
    Ответ написан
    Комментировать
  • Как убрать дубликаты при выводе свойств элементов на сайте битрикс?

    @PetrPo
    В result_modifier.php
    if($arResult['ITEMS']) {
    	$arResult['FILE_TYPES'] = $filmTypes = [];
    	
    	foreach($arResult['ITEMS'] as $key => $arItem) {
    		$filmTypesProp = isset($arItem['DISPLAY_PROPERTIES']['FILM_TYPES']) ? $arItem['DISPLAY_PROPERTIES']['FILM_TYPES'] : false;
    		$value = $filmTypesProp && $filmTypesProp['VALUE'] ? $filmTypesProp['VALUE'] : false;
    		$displayValue = $filmTypesProp && $filmTypesProp['DISPLAY_VALUE'] ? $filmTypesProp['DISPLAY_VALUE'] : false;
    		
    		if($value && $displayValue) {
    			$filmTypes['VALUE'][] = $value;
    			$filmTypes['DISPLAY_VALUE'][] = $displayValue;
    		}
    	}
    	
    	$arResult['FILE_TYPES'] = [
    		'VALUE' => array_values(array_unique($filmTypes['VALUE'])),
    		'DISPLAY_VALUE' => array_values(array_unique($filmTypes['DISPLAY_VALUE'])),
    	];
    }


    Где сам select выводишь
    <?if(isset($arResult['FILE_TYPES']) && $arResult['FILE_TYPES']):?>
    	<select class="drop" id="regionDropdown">
    		<option value="All">Показать все</option>
    		<?foreach($arResult['FILE_TYPES']['DISPLAY_VALUE'] as $value):?>
    			<option value="<?=$value;?>"><?=$value;?></option>
    		<?endforeach;?>
    	 </select>
    <?endif;?>
    Ответ написан
  • Как убрать из тела страницы системные скрипты ядра битрикса?

    @PetrPo
    Собственно так и есть, вызов <?$APPLICATION->ShowHead();?> равносилен
    <?
    $APPLICATION->ShowMeta('keywords');
    $APPLICATION->ShowMeta('description');
    $APPLICATION->ShowHeadStrings();
    $APPLICATION->ShowHeadScripts();
    $APPLICATION->ShowCSS();
    ?>

    $APPLICATION->ShowHeadStrings(); - где-то там подключается этот самый core.js. Но если у тебя нет вызова \CJSCore::Init(), то собственно и ядро не будет подключаться, а значит у тебя подключаются какие-то битриксовые js библиотеки и видимо они нужны))
    Если не подключать core.js - горя хапнешь, как минимум битриксовый ajax работать не будет (параметр компонентов AJAX_MODE), а т.к. этот ajax зашит в ядре и доступен абсолютно во всех компонентах, то это может большую беду принести
    Ответ написан
    Комментировать
  • Как добавить сопутствующие товары по нажатию на chekbox?

    @PetrPo
    компоненты каталога не поддерживают удаление товара из корзины.
    Если посмотришь, что catalog.section, что catalog.element наследуются от класса \Bitix\Iblock\Component\Base, который содержит код добавления товара в корзину по get параметру ADD2BASKET и нет никаких методов связаных с удалением.

    Простыми манипуляциями не решить, могу порядок действий описать:
    1. В шаблоне компонента, который будет выводить твои товары в файле script.js надо написать свою логику удаления, там буквально несколько строк кода достаточно, но надо будет тебе разобраться в этом скрипте. Смысл в том чтобы отправлять ajax на свой файл
    2. В файле ajax пишешь логику удаления товара - погугли, там ничего сложного
    3. Сложная вещь - при загрузке надо узнать товар уже в корзине или нет, чтобы показать нужную кнопку, нужно учитывать что товар может быть с торговыми предложениями
    4. Нужно синхронизировать все это дело с малой корзиной, в том же script.js, при добавлении товара в корзину есть такая синхронизация

    Ну и самый неприятный момент - это рассмотрение неординарного поведения юзера:
    1. захожу в товар1 и кладу в корзину 5 единиц
    2. захожу в товар2, к этому товару привязан товар1 и этот товар уже в корзине, нажимаю удалить, которая удалит все 5 единиц товара, как сам считаешь это нормально давать такую возможность пользователю? Я уже не говорю о том, что он тупить начнет, когда перейдет в корзину и не увидит там товар1, а даже с точки зрения маркетинга ты даешь ему лишнюю возможность отказаться от покупки
    Ответ написан
    Комментировать
  • Корзина в popup окне при добавлении товара в каталоге?

    @PetrPo
    Решение в комментариях
    Ответ написан
    Комментировать
  • Bitrix ORM getList как использовать data_doubling?

    @PetrPo
    чтобы data_doubling = false работал, в описании сущности должно быть указание на отношение, в твоем случае видимо OneToMany

    Пример
    new \Bitrix\Main\ORM\Fields\Relations\OneToMany('PROFESSION', \Bitrix\Iblock\SectionTable::class, 'IBLOCK_SECTION')


    Пример запроса
    $result = \Bitrix\Iblock\SectionTable::getList([
    	'filter' => ['IBLOCK_ID' => 2, '!PROFESSION.ID' => false],
    	'select' => ['NAME'],
    	'data_doubling' => false
    ])->fetchAll();

    Тогда указанные поля в select, в примере NAME это типа PROFESSION.NAME, как-то так
    Ответ написан
    Комментировать
  • Как привязать элемент к нескольким разделам сайта и фильтровать?

    @PetrPo
    Решение в комментариях
    Ответ написан
    Комментировать
  • Как исправить ошибку в битрикс при переходе на PHP 7.2?

    @PetrPo
    Там прямо по-русски написано - в файле /bitrix/templates/aspro_tires2/components/bitrix/catalog/podbor/kompot/catalog.section.list/.default/template.php на строке 48 в функцию viewType() передано мало аргументов, а именно 1, когда должно быть 2. Дальше по stacktrace вызов из init.php 52 строка, на которой, как ни странно, определена функция с двумя аргументами
    function viewType($array, $cuurrentSecId){

    Ты или в вызове добавь второй аргумент или в определении функции добавь значение по умолчанию для этого аргумента
    Ответ написан
    Комментировать
  • Как передать заголовок новости в форму в popup?

    @PetrPo
    1. В template.php внутри цикла по элементам, ниже пример, думаю поймешь что куда подставить
    <?foreach($arResult['ITEMS'] as $arItem):?>
    	<?
    	$popupId = randString(10, ['abcdefghijklmnop']);
    	?>
    	
    	<?//............................?>
    	
    	<a href="javascript:;" class="btn js-offer-request" data-fancybox="" data-src="#individual-tour-form_<?=$popupId;?>">
    		<span>Забронировать экскурсию</span>
    	</a>
    	
    	<?//............................?>
    <?endforeach;?>


    2. В вызов компонента формы добавь параметр, например после ON_NAME
    "POPUP_ID" => $popupId

    3. В компоненте формы, файл template.php добавь
    <?
    $popupId = isset($arParams['POPUP_ID']) && $arParams['POPUP_ID'] ? '_'.$arParams['POPUP_ID'] : '';
    ?>
    <div class="form-modal" id="individual-tour-form<?=$popupId;?>">
    Ответ написан
    Комментировать
  • Проблема с полем и маской ввода для телефона?

    @PetrPo
    Похоже на нормализацию номера телефона, попробуй в компоненте параметр USE_PHONE_NORMALIZATION = N поставь
    Ответ написан
    Комментировать
  • Редирект Битрикс?

    @PetrPo
    1. В параметр SEF_URL_TEMPLATES добавь свою строку
    "redirect" => "#SECTION_CODE_PATH#/#ELEMENT_ID#/",
    2. В своем шаблоне комплексного компонента catalog создай файл redirect.php (там где файлы типа section.php, element.php и т.д.)
    3. В этом файле напиши
    <?
    if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
    $this->setFrameMode(true);
    
    $iblock = \Bitrix\Iblock\IblockTable::getList([
    	'select' => ['DETAIL_PAGE_URL'],
    	'filter' => ['ID' => $arParams['IBLOCK_ID']],
    	'cache' => ['ttl' => 31536000]
    ])->fetch();
    
    if(strpos($iblock['DETAIL_PAGE_URL'], '#ELEMENT_CODE#') !== false) {
    	$elementId = $arResult['VARIABLES']['ELEMENT_ID'];
    	$filter = ['IBLOCK_ID' => $arParams['IBLOCK_ID'], 'ID' => $elementId];
    	
    	$obCache = new CPHPCache();
    	if($obCache->InitCache(36000, serialize($filter), '/iblock/catalog/redirect')) {
    		$element = $obCache->GetVars();
    	}
    	elseif($obCache->StartDataCache()) {
    		$element = [];
    
    		$iterator = CIBLockElement::GetList([], $filter, false, false, ['IBLOCK_ID', 'ID', 'DETAIL_PAGE_URL']);
    		
    		if(defined("BX_COMP_MANAGED_CACHE")) {
    			global $CACHE_MANAGER;
    			$CACHE_MANAGER->StartTagCache('/iblock/catalog/redirect');
    
    			if($row = $iterator->GetNext()) {
    				$element = $row;
    				$CACHE_MANAGER->RegisterTag('iblock_id_'.$arParams['IBLOCK_ID']);
    			}
    
    			$CACHE_MANAGER->EndTagCache();
    		}
    		else {
    			if($row = $iterator->GetNext()) {
    				$element = $row;
    			}
    		}
    			
    			
    		$obCache->EndDataCache($element);
    	}
    
    	if($element['DETAIL_PAGE_URL']) {
    		LocalRedirect($element['DETAIL_PAGE_URL']);
    	}
    }

    4. там же где файл redirect.php создал, есть файл .parameters.php, добавь в конце
    $arTemplateParameters['SEF_URL_TEMPLATES_redirect'] = array(
        'PARENT' => 'SEF_MODE',
        'NAME' => "Редирект",
        "DEFAULT" => "",
        "VARIABLES" => array(),
    );

    это чтобы при сохранении компонента из публички не стерся твой параметр, ну и лучше 'NAME' => "Редирект", через GetMessage сделать
    Ответ написан
  • Как в 1С Битрикс вывести свойство инфоблока в виде html кода?

    @PetrPo
    Перед VALUE тильду поставь ~
    <div><?=$arItem['PROPERTIES']['youtube']['~VALUE']['TEXT']?></div>
    Ответ написан
    Комментировать