• Codeby web-security - Курс "Тестирование Веб-Приложений на проникновение с нуля" от команды codeby. Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь

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

r0hack

DAG
Gold Team
29.09.2017
441
739
#1
Всем Салам. Все чаще в работе сталкиваюсь с интернет-магазинами на Битрикс и учитывая, что эта 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
Вверх Снизу