КодАвтоматизации
220 subscribers
188 photos
18 videos
44 links
Знаем об автоматизации всё.
Руководитель отдела продаж @automation_code_dev
Download Telegram
Сравнение методов получения элементов инфоблока в 1С-Битрикс

В 1С-Битрикс разработчики часто сталкиваются с задачей получения данных из инфоблоков. Существует несколько способов это сделать, и в данной статье мы рассмотрим два метода: использование класса ElementRykTable и метода CIBlockElement::GetList. Оба подхода имеют свои особенности и могут быть выбраны в зависимости от конкретной задачи и требований к производительности.

Метод 1: ElementInfoblockTable::getList

$elements = \Bitrix\Iblock\Elements\ElementInfoblockTable::getList([
'select' => ['ID', 'NAME', 'CODE', 'PREVIEW_TEXT', 'PREVIEW_PICTURE'],
'filter' => ['=ACTIVE' => 'Y'],
'cache' => [
'ttl' => 3600
]
])->fetchAll();


Этот метод представляет собой современный подход к работе с данными в 1С-Битрикс. Он использует ORM (Object-Relational Mapping), что позволяет разработчикам писать код более декларативно и понятно.

Преимущества:

Читаемость и поддерживаемость: Код выглядит более структурированным и понятным, что упрощает его поддержку.

Кэширование: Встроенные механизмы кэширования позволяют эффективно управлять данными и уменьшать нагрузку на базу данных.

Меньше строк кода: С помощью этого метода можно быстро получить массив данных с необходимыми полями.

Недостатки:

Сложность для новичков: ORM может быть сложнее для понимания, особенно для разработчиков, которые привыкли к "старым" методам работы.
Нужен опыт работы с ORM: Чтобы эффективно использовать этот подход, необходимо знание специфики работы ORM.

Метод 2: CIBlockElement::GetList

$arSelect = Array("ID", "NAME", "DATE_ACTIVE_FROM");
$arFilter = Array("IBLOCK_ID"=>IntVal($yvalue), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
print_r($arFields);
}


Этот метод является более классическим и широко используется в проектах на 1С-Битрикс. Он основан на вызове статического метода GetList, который позволяет извлекать данные из инфоблоков.

Преимущества:

Широкая известность: Этот метод хорошо известен и часто используется, что делает его понятным для многих разработчиков.
Гибкость: Позволяет легко настраивать выборку данных и добавлять дополнительные условия фильтрации.

Недостатки:

Меньшая читаемость: Код может быть менее понятным, особенно при добавлении большого количества условий фильтрации и выборки.
Отсутствие встроенного кэширования: Разработчикам необходимо самостоятельно реализовывать механизмы кэширования, если это требуется.

Заключение

Выбор метода получения элементов инфоблока в 1С-Битрикс зависит от конкретных условий задачи. Если нужна высокая производительность и читаемость кода, стоит обратить внимание на ORM и метод ElementInfoblockTable::getList. Если же требуется гибкость и простота, то метод CIBlockElement::GetList останется отличным выбором.

Каждый из методов имеет свои сильные и слабые стороны, и, в конечном итоге, правильный выбор будет зависеть от требований вашего проекта и предпочтений команды разработчиков.
#php
#1сбитрикс
#код
👍3🔥2
Получение цены товара в 1С-Битрикс: D7 и традиционный подход

В 1С-Битрикс существует несколько подходов для работы с данными, включая получение цен товаров. В этой статье мы рассмотрим два способа получения цены товара по его ID: с использованием нового подхода D7 и традиционного метода.

1. Получение цены товара с помощью D7

С появлением архитектуры D7 в 1С-Битрикс разработчики получили возможность работать с данными более удобно и эффективно. Для работы с ценами товаров мы будем использовать класс \Bitrix\Catalog\Model\Price.

Пример кода:

<?php
use Bitrix\Main\Loader;
use Bitrix\Catalog\Model\Price;

// Подключаем необходимые модули
if (Loader::includeModule("catalog")) {
// Допустим, у нас есть ID товара
$itemId = $arItem['ITEM_ID'];

// Получаем базовую цену товара
$priceData = Price::getList([
'filter' => ['PRODUCT_ID' => $itemId],
'select' => ['ID', 'PRICE', 'CURRENCY'],
'limit' => 1,
])->fetch();

// Проверяем, была ли цена найдена
if ($priceData) {
// Выводим информацию о цене
echo "Цена товара с ID " . $itemId . " составляет: " . $priceData['PRICE'] . " " . $priceData['CURRENCY'];
} else {
echo "Цена товара не найдена.";
}
} else {
echo "Модуль каталога не подключен.";
}
?>


Пояснение:

Мы используем Loader::includeModule("catalog"), чтобы подключить модуль каталога.
С помощью Price::getList() получаем базовую цену товара по его ID, используя фильтр PRODUCT_ID.
Если цена найдена, выводим ее; если нет, выводим сообщение об отсутствии цены.

2. Получение цены товара с помощью традиционного подхода

Традиционный подход к получению цен в 1С-Битрикс основан на использовании класса CPrice. Этот метод был распространен до появления D7 и все еще широко используется.

Пример кода:

<?php
// Подключаем модуль каталога
CModule::IncludeModule("catalog");

// Допустим, у нас есть ID товара
$itemId = $arItem['ITEM_ID'];

// Получаем базовую цену товара
$price = CPrice::GetBasePrice($itemId);

// Проверяем, была ли цена найдена
if ($price) {
// Выводим информацию о цене
echo "Цена товара с ID " . $itemId . " составляет: " . $price['PRICE'] . " " . $price['CURRENCY'];
} else {
echo "Цена товара не найдена.";
}
?>


Пояснение:

Мы подключаем модуль каталога с помощью CModule::IncludeModule("catalog").
Метод CPrice::GetBasePrice($itemId) используется для получения базовой цены товара по его ID.
Если цена найдена, мы выводим ее; если нет, выводим сообщение о том, что цена не найдена.

Сравнение подходов:

Структура кода: Код на D7 более лаконичен и читабелен, благодаря использованию методов класса.
Гибкость: D7 позволяет легко расширять функционал и использовать другие возможности ORM.
Поддержка: Традиционный подход все еще поддерживается, но D7 является более современным решением.

Заключение

Оба подхода имеют свои плюсы и минусы. Если вы разрабатываете новый проект или обновляете существующий, рекомендуется использовать D7, так как он предлагает ряд преимуществ, связанных с удобством и современными методами работы с данными. Однако традиционный метод по-прежнему актуален и может быть полезен в определенных ситуациях. Выбор подхода зависит от конкретных задач и требований вашего проекта.

#php
#1сбитрикс
#код
👍41🔥1
Редиректы на 1С-Битрикс: Как настроить перенаправление с www на без www и наоборот

Веб-разработка и поддержка сайтов часто требуют от нас настройки правильного редиректа для обеспечения корректного отображения сайта и повышения его SEO-показателей. Одной из распространенных задач является перенаправление с адреса с www на адрес без www и наоборот. В этой статье мы рассмотрим, как настроить такие редиректы на платформе 1С-Битрикс.

Почему это важно?

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

Удобство: У пользователей не возникнет путаницы, если они всегда будут попадать на одну и ту же версию сайта.

Безопасность: Правильная настройка редиректов может также помочь в защите от фишинга и других угроз.

Настройка редиректов в .htaccess

Для настройки редиректов вам необходимо отредактировать файл .htaccess, который находится в корневой директории вашего сайта на 1С-Битрикс. Ниже представлены два основных правила для перенаправления: с www на без www и наоборот.

1. Перенаправление с www на без www

Если вы хотите, чтобы ваш сайт был доступен только по адресу без www, добавьте следующее правило:

# Перенаправление с www на без www
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ https://%1/\$1 [R=301,L]


Объяснение правил:

RewriteEngine On: включает механизм перезаписи URL.
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]: условие, которое проверяет, начинается ли хост с "www.". [NC] означает, что проверка не чувствительна к регистру.
RewriteRule ^(.*)$ https://%1/\$1 [R=301,L]: если условие выполнено, выполняется перенаправление на адрес без www. %1 соответствует захваченной части из условия, а R=301 указывает на постоянное перенаправление.

2. Перенаправление с без www на www

Если ваш сайт должен быть доступен только с www, используйте следующее правило:

# Перенаправление с без www на www
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ https://www.%1/\$1 [R=301,L]


Объяснение правил:

RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]: условие, которое проверяет, не начинается ли хост с "www.". Знак восклицания ! означает отрицание.
RewriteRule ^(.*)$ https://www.%1/\$1 [R=301,L]: если условие выполнено, выполняется перенаправление на адрес с www.

Проверка работы редиректов

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

Заключение

Настройка редиректов с www на без www и наоборот является важной частью работы с веб-сайтами. Это не только помогает улучшить SEO, но и обеспечивает удобство для пользователей. Следуя приведенным инструкциям, вы сможете легко настроить правильные редиректы на своем сайте на платформе 1С-Битрикс.

Также вы можете установить наш модуль по SEO редиректам

#php
#1сбитрикс
#код
👍4🔥2
Как восстановить доступ к административной панели 1С-Битрикс, если забыли пароль

Забыть пароль от административной панели 1С-Битрикс — ситуация довольно распространенная. Однако, если у вас есть доступ к хостингу, вы можете легко восстановить доступ, используя простой скрипт. В этой статье мы расскажем, как это сделать.

Шаги по восстановлению доступа

1. Подготовка

Прежде чем начать, убедитесь, что у вас есть доступ к файловой системе вашего сайта на хостинге. Вы можете использовать FTP-клиент (например, FileZilla) или файловый менеджер, предоставленный вашим хостинг-провайдером.

2. Создание PHP-скрипта

Создайте новый PHP-файл в корневой директории вашего сайта. Например, назовите его auth.php. Откройте этот файл в текстовом редакторе и добавьте следующий код:

<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");

global $USER;
$USER->Authorize(1);
LocalRedirect("/bitrix/admin/");

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php");
?>


3. Разбор кода

Давайте разберем, что делает этот скрипт:

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php"); — подключает заголовок системы Битрикс.

global $USER; — получает доступ к глобальной переменной $USER, которая отвечает за пользователей в системе.

$USER->Authorize(1); — авторизует пользователя с ID 1. Обычно это администратор системы.

LocalRedirect("/bitrix/admin/"); — перенаправляет на страницу административной панели после успешной авторизации.

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); — подключает подвал системы Битрикс.

4. Запуск скрипта

Теперь вам нужно загрузить созданный файл на сервер в корневую директорию вашего сайта. После этого перейдите по адресу https://ваш_домен/auth.php в браузере.

Если все сделано правильно, вы будете перенаправлены в административную панель Битрикс без необходимости вводить пароль.

5. Обеспечение безопасности

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

6. Изменение пароля

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

Заключение

Забыть пароль — это не конец света, особенно если у вас есть доступ к хостингу. С помощью простого скрипта вы можете быстро восстановить доступ к административной панели 1С-Битрикс. Однако всегда помните о безопасности и удаляйте временные скрипты после использования. Если у вас возникли дополнительные вопросы, не стесняйтесь обращаться к документации Bitrix или в службу поддержки вашего хостинг-провайдера.

#php
#1сбитрикс
#код
👍4