Bitrix элементы инфоблока в меню

Добавить элементы инфоблока в меню как пункты не сложно.

<?

$arSelect = ["NAME", "DETAIL_PAGE_URL"];
$res = CIBlockElement::GetList(
 Array("SORT"=>"ASC"), // arOrder
 Array("IBLOCK_ID"=>IntVal(59)  , "ACTIVE" => "Y" ), // arFilter
 false, // arGroupBy
 false, // arNavStartParams
 $arSelect // arSelectFields 
);

while($ob = $res->GetNextElement(true, false)){ 
	 $arResult["ITEMS"][] = $ob->GetFields();  
	$aMenuLinks_child[] =  	Array(
		$ob->GetFields()['NAME'], 
		$ob->GetFields()['DETAIL_PAGE_URL'], 
		Array($ob->GetFields()['DETAIL_PAGE_URL']), 
		Array(
			"FROM_IBLOCK" => 1,
			"IS_PARENT" => 0,
			"DEPTH_LEVEL" => 2
		)
	);
}

// pr($aMenuLinks_child);
// pr($arResult["ITEMS"]);	

$aMenuLinks = Array(
	Array(
		"Пункт меню", 
		"/punkt_link/", 
		Array("/punkt_link/"), 
		Array(
			"FROM_IBLOCK" => 1,
			"IS_PARENT" => 1,
			"DEPTH_LEVEL" => 1
		)
	),
);

$aMenuLinks = array_merge($aMenuLinks, $aMenuLinks_child);

// pr($aMenuLinks);

где IS_PARENT, DEPTH_LEVEL задают вложенность.

Bitrix поиск по релевантности

Как вывести каталог на стр. поиска писал в прошлой статье /2018/09/12/выводим-каталог-на-странице-поиска-би/

  1. Для результата с учетом релевантности в компоненте bitrix:search.page убираем сортировку и оставляем по
    "USE_TITLE_RANK" => "Y",
    "DEFAULT_SORT" => "rank",

2. Создаем компонент с component.php, где будем тупо выводить элементы по найденным c помощью search.page идшникам. А шаблон остается от bitrix:catalog.section

(далее…)

Bitrix создание модуля часть 2 папка lib

Первая часть создания модуля в уроке https://phpjs.ru/2017/02/28/bitrix-создание-модуля/

Автолоад классов модуля довольно полезная вещь. Делается просто — закидываем классы в папку lib, к-я и заинклудиться полностью. Что важно учитывать.

https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=3524&LESSON_PATH=3913.5062.3524

В этом уроке подробно объясняется, как должны именоваться пространства имен класса. А именно, если модуль партнерский, напр. partner.module1 — namespace будет Partner\Module1. Если же не партнеский, а локальный, заменяем на Bitrix\Module1.

Bitrix подарки sale.gift.basket аяксом Часть 2.

Здесь появляется возможность добавить подарок в корзину аяксом, без перехода на сам товар.

Для этого в карточках выведем кнопку «Выбрать», добавим к нему урл и навесим обработчик, к-й аяксом добавит товар в корзину, отрисует позицию и пересчитает всю  сумму.  Согласитесь, не трудно же?

1. Находим в шаблоне sale.gift.basket кнопку BUY_LINK. Добавляем класс add_to_basket ссыль


href="action=add&id=<? echo $arItem['ID']; ?>

Стоит заметить, что кнопок там будет 2 — одна товар, 2-я — торговое предложение.
(далее…)

Bitrix подарки sale.gift.basket аяксом

Подарки выводяться в корзине компонентом sale.gift.basket. Надо выводить их аяксом сразу после применения купона. Шаблон компонента старый old_version_17. Новые .default и bootstrap_v4 написаны на mustache, там данный код не сработает.
1. Создаем спец. файл gifts.php в компоненте корзины. К нему пойдет аякс запрос. В него помещаем тот же компонент корзины, к-й будет выводить не корзину, а подарки. Делается это, потому как массивы $arResult[«APPLIED_DISCOUNT_LIST»] и $arResult[«FULL_DISCOUNT_LIST»] доступны только из-под корзины. Напрямую подарки не подключить. Для этого создадим отдельный шаблон корзины ajax_gift_template. (далее…)

bitrix умный фильтр красивый урл

Умный фильтр выдает урл вида
site.ru/tovars/filter/color-is-8e4e6038-474d-11e6-80e5-94de807e86a2/apply/
А нужен вида
site.ru/tovars/?filter=color-is-red&model-is-jbl
чтобы не индексировался.
Замена в catalog/index.php


		"SEF_URL_TEMPLATES" => Array(
			"smart_filter" => "#SECTION_CODE_PATH#/?filter=#SMART_FILTER_PATH#"

не полное решение.
(далее…)

Битрикс набор функций

Наверно, самый популярный метод — список элементов


$res = CIBlockElement::GetList(
  Array("SORT"=>"DESC") , // $arOrder 
  array('IBLOCK_ID'=>55), // $arFilter
  false, // $arGroupBy 
  Array("nTopCount"=>10), // $arNavStartParams
        array('ID' , 'NAME') // arSelectFields
); 
while($ob = $res->GetNext(true, false)){
    print_r($ob );
}
(далее…)

Битрикс кастомизация умного фильтра

часто возникает задача поменять шаблон catalog.smart.filter — например, селект сделать картинками, а на range slider цен навесить свои ползунки. Разобраться в битриксовом винегрете из html, php, js можно в этом посте.
Шаблон условно легко поделить на фильтр по св-вам, к-е указали в админке (Магазин — Основной каталог товаров — Настройки каталога), и фильтр по ценам. Это 2 цикла с пометками //prices //not prices (далее…)

Bitrix google recaptcha для компонентов

Добавим рекапчу от гугл в компоненты


1. blog.post.comment // комментарии в блоге
2. forum.topic.reviews // комментарии к статическим страницам
3. iblock.element.add.form // форма

Как подключать рекапчу писал в статье http://phpjs.ru/2017/07/18/google-captcha-v2/. А также, если не умеете работать с классами и композер, можно проверить капчу 3 строчками кода (см. в конце статьи).
Но это не есть красиво) Вынесем верификацию в ReCaptcha.php


    public function verifyCaptcha()
    {
        if ($_POST["g-recaptcha-response"]) {
            $resp = $rec->verify(
                $_POST["g-recaptcha-response"],
                $_SERVER["REMOTE_ADDR"]
            );
            return $resp->isSuccess();
        }
    }

(далее…)

Битрикс замена путей файлов на постоянные

При импорте, а также просто загрузке файлов битрикс создает каждый раз новый путь до файла.
Выглядит он примерно так: /upload/iblock/0a1/image.png . Я же заменю на /upload/files/1234/image.png где 1234 id элемента.
Я пройдусь по всем файлам и перемещю их в постоянные папки, удалив старые, чтобы не занимали места. Далее подробно в комментах. (далее…)