bitrix яндекс карты

использую обратное геокодирование от яндекса для получения координат из адреса

https://tech.yandex.ru/maps/geocoder/doc/desc/concepts/input_params-docpage/

$arResult['POSITION']['yandex_scale']='18'; // масштаб карты
function my_curl_fun($url) {
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
 $data = curl_exec($ch);
 curl_close($ch);
 return $data;
}
// внимание данный апи-ключ не работает
$url = 'https://geocode-maps.yandex.ru/1.x/?format=json&geocode=' . urlencode($addr['TEXT']) . '&key=' . urlencode('AHpH0VgBAAAA8FcHXwIA7b8-WHvp5NDvQe08RTwA0cxkgs4BBB1231232312DyJ-gsqxw5zvtgfhfgIJKXOxX8LA==');
$response = my_curl_fun($url);

//var_dump($response);
$response = json_decode($response, true);
//pr($response);
$geo_object = $response['response']['GeoObjectCollection']['featureMember'];
$coord = isset($geo_object[0]) ? $geo_object[0]['GeoObject']['Point']['pos'] : $geo_object['GeoObject']['Point']['pos'];
var_dump($coord);
$coord = explode(' ', $coord);

$arResult['POSITION']['yandex_lon'] = $coord[0]; // долгота
$arResult['POSITION']['yandex_lat'] = $coord[1]; // широта

$APPLICATION->IncludeComponent(
	"bitrix:map.yandex.view", 
	".default", 
	array(
		"INIT_MAP_TYPE" => "MAP",
		"MAP_DATA" => serialize($arResult['POSITION']),
		"MAP_WIDTH" => "100%",
		"MAP_HEIGHT" => "350",
		"CONTROLS" => array(
			0 => "ZOOM",
			1 => "MINIMAP",
			2 => "TYPECONTROL",
			3 => "SCALELINE",
		),
		"OPTIONS" => array(
			0 => "ENABLE_SCROLL_ZOOM",
			1 => "ENABLE_DBLCLICK_ZOOM",
			2 => "ENABLE_DRAGGING",
		),
		"MAP_ID" => "MyMap".$_GET["id"],
	),
	false
);

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
		)
	);
}

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

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

где 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();
        }
    }

(далее…)