Копирование инфоблоков в Битриксе

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

Читать дальше…

Расчет стоимости корзины с учетом купона на d7

При классическом использовании функционала работы с купонами в Битриксе, размер скидки и обновление цен в корзине происходит в момент сохранения заказа. До этого момента объект Basket содержит «исходную» цену товара, а DiscountCouponsManager знает о примененных купонах.

Разбираемся, как показывать цену товаров в корзине до момента оформления заказа с учетом примененных скидок.

Читать дальше…

Чеклист: готовим Битрикс к Kubernetes

Все новые проекты, включая разработанные на 1c-bitrix, мы в компании разворачиваем в Kubernetes. Изначально это кажется довольно сложным процессом, но, при должном подходе все проблемы в итоге решаемы и можно с уверенностью сказать — проекты на битриксе корректно разворачиваются и работают в инфраструктуре k8s.

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

Читать дальше…

Исправляем падение ядра Bitrix при добавлении параметра USER_FIELD_MANAGER

Главный модуль ядра 1с-Битрикс версии 22.100 подвержен ошибке — при добавлении get-параметра ?USER_FIELD_MANAGER=1 в любую ссылку сайт падает в exception вида

[Error] 
Call to a member function getEntityList() on string (0)
/var/www/public/bitrix/modules/main/lib/orm/entity.php:324
#0: Bitrix\Main\ORM\Entity->postInitialize()
	/var/www/public/bitrix/modules/main/lib/orm/entity.php:129
#1: Bitrix\Main\ORM\Entity::getInstanceDirect(string)
	/var/www/public/bitrix/modules/main/lib/orm/entity.php:107
...
----------
Читать дальше…

Сохранение данных веб-формы в Google таблицы

Таблицы Google представляют собой удобный инструмент совместного просмотра\редактирования каких-либо данных. При помощи небольшого скрипта в Google Apps мы напишем обработчик, который будет служить action’ом для любой формы на сайте и сохранять информацию в google-таблицу. Его можно использовать, например, для абсолютно анонимного опроса, отправляя данные из формы сразу в облако, минуя backend-часть сайта. Читать дальше…

Программно отключить NTLM авторизацию

Иногда, после разворачивания копии портала Битрикс, NTLM-авторизация становится недоступна и поэтому невозможно зайти в админку сайта. Авторизация через CUser::Authorize в этом случае тоже не работает.

Код ниже поможет программно выключить NTLM:

<?php

$_SERVER["DOCUMENT_ROOT"] = '/home/bitrix/www/';
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS",true);
define('BX_NO_ACCELERATOR_RESET', true);
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
if (!CModule::IncludeModule('ldap')) {
    return false;
}
CLdapUtil::UnSetBitrixVMAuthSupport(true);
echo 'Ntlm auth off';

Facebook API: публикация записей в ленту групп и страниц

Facebook API дает возможность размещать информацию на страницах или в группах FB без участия редактора. Например, автоматически публиковать в соцсети новости сайта сразу после их появления. Под катом пример интеграции самой актуальной на данный момент библиотеки FB SDK for PHP v5.0.0 и описание популярных ошибок ее использования. Читать дальше…

Json_encode для кириллицы (windows-1251)

Как известно, стандартная функция php json_encode() работает только с строками в кодировке utf-8. В новом ядре 1с-Битрикс появилась замечательная обертка, позволяющая не думать о текущей кодировке сайта:

// encode
$enc_value = \Bitrix\Main\Web\Json::encode($data, $options = null);
// decode
$dec_value = \Bitrix\Main\Web\Json::decode($data);

Параметры $data и $options совпадают с параметрами json_encode().

Если во время преобразования возникла ошибка, генерируется исключение \Bitrix\Main\ArgumentException.

Битрикс не индексирует статические страницы

На одном из проектов часть статических страниц не индексировалась стандартным модулем поиска. Функция CSearch::ReIndexFile() для них всегда возвращала 0, хотя для аналогичного файла из соседнего раздела отрабатывала корректно.

Для корректной индексации файлов необходимо наличие заголовка, установленного функцией $APPLICATION->SetTitle(). Вызов этой функции обязательно должен находиться в первом php-блоке кода страницы.

Такая страница будет доступна для поиска:

<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
$APPLICATION->SetPageProperty("keywords", "keywords");
$APPLICATION->SetPageProperty("description", "description");
$APPLICATION->SetTitle("Title");
?>

А такая нет:

<?require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");?>
<?$APPLICATION->SetPageProperty("keywords", "keywords");?>
<?$APPLICATION->SetPageProperty("description", "description");?>
<?$APPLICATION->SetTitle("Title");?>

ORM в D7 1c-bitrix. Первый подход к снаряду

Реализация ORM в ядре D7 — очередная интересная, перспективная, но как обычно плохо документированная разработка от 1с-Битрикс :) Призвана она абстрагировать разработчика от механики работы с таблицами на уровне запросов к БД, введя понятие сущности и поля сущности. На зимней партнерской конференции Алексей Кирсанов провел мастер-класс по созданию модуля с применением ORM для выборки данных из своей таблицы. После чего я решил провести небольшое исследование на предмет возможности построения более сложных, чем в примере, запросов. Читать дальше…