• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Вывод минимальной цены по разделу в мета-тегах в CMS bitrix

Всем Салам. Все чаще в работе сталкиваюсь с интернет-магазинами на Битрикс и учитывая, что эта CMS система набирает сильную популярность в странах СНГ, особенно часто используют для создания интернет-магазинов, хотел бы поделится одним полезным лайфхаком.

[0] - Немного теории

Так как уже во многих проектах сталкивался с задачей вывода минимальной цены по разделу в мета-тегах. У меня для решения данной задачи есть 2 способа, но 1 из них рассматривать не буду, так как после того вы сдадите проект, 100% у заказчика будут проблемы с дальнейшими манипуляциями с мета-тегами.
Поэтому я распишу способ полегче в реализации и он мне больше нравится.

[1] - Реализация

Нусс, начнем. В первую очередь нам нужно создать пользовательское поле для сохранения нашего вычисленного среднего ценника по разделу.

Selection_026.jpg


Поле у нас готово, теперь создаем файл типа price.php, сейчас я это сделаю в корне, но лучше где-нибудь в самом шаблоне его разместить. А в файле собственно у нас будет лежать такой код:

Код:
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");

if(CModule::IncludeModule('iblock')){
    $objectSection = new CIBlockSection;
    $arSelect = Array('ID');
    $arFilter = Array('IBLOCK_ID'=>18, 'ACTIVE'=>'Y', 'GLOBAL_ACTIVE'=>'Y');
    $resultSection = CIBlockSection::GetList(Array('SORT'=>'ASC'), $arFilter, false, $arSelect);
    while($arSection = $resultSection->GetNext()) {
        $dbElements = CIBlockElement::GetList(
            array('CATALOG_PRICE_1'=>'ASC'),
            array("IBLOCK_ID" => 18,"SECTION_ID"=>$arSection['ID'], "INCLUDE_SUBSECTIONS" => "Y"),
            false,
            array('nTopCount'=>1),
            array("IBLOCK_ID","ID", "NAME","CATALOG_PRICE_1")
        );
        if($arElement = $dbElements->GetNext(false,false)){
            $Result = $objectSection->Update($arSection['ID'], array('UF_MIN_PRICE' => round($arElement['CATALOG_PRICE_1'])));
            var_dump($Result);
        }
    }
}

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

После идем в раздел настройки SEO раздела и там ставим как свойство, наше пользовательское поле

Selection_028.jpg


Готово. Осталось запустить файл и в Title будет выводится минимальная цена по разделу.

При запуске получим результат, true значит что все прошло успешно, а его количество это разделы.

1_027.jpg

Чтобы не запускать его вручную, вещаем на крон вместе с вашим кроном по обновлению цен или интеграцию с 1с или вообще отдельный крон для обновления страницы раз в 1 или в неделю.

На этом у меня все. Дайте обратную связь, если вам нравится всяко-разно полезное по cms и фреймам.
 
  • Нравится
Реакции: Vertigo
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!