Короткие заметки о нестандартных или малодокументированных возможностях 1с-Битрикс.

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");?>

Категории: Справочник

Битрикс путает шаблоны сайтов

Дано: многосайтовость на разных доменах (2й способ), разные шаблоны для сайтов.

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

Решение: выключить html-кэширование. Периодически владельцы сайтов сами его включают, думая что так будет лучше.

Метки: ,

Категории: Справочник

Как очистить базу на этапе установки

На любом шаге установщика достаточно добавить параметр clear_db=Y в адресную строку и база данных будет очищена в процессе установки 1с-Битрикс.

Категории: Справочник

Своя иконка для инфоблока в админке

Код, который позволяет в админке для заданного инфоблока установить свою иконку (автор Максим Смирнов, идея).

Для этого нужно:
1. в css создать правило #my_menu_icon { background:url(путь до иконки); }
2. в /bitrix/php_interface/init.php дописать

AddEventHandler("main", "OnBuildGlobalMenu", array("MyClass", "OnBuildGlobalMenu"));
class MyClass
{
   function OnBuildGlobalMenu(&$aGlobalMenu, &$aModuleMenu)
   {
      $type = "articles"; // тип инфоблока
      $iblock_id = 19; // ID нужного инфоблока

      foreach($aModuleMenu as $i1 => $aMenu1)
      {
         if($aMenu1["items_id"] == "menu_iblock_/$type")
         {
            foreach($aMenu1["items"] as $i4 => $aMenu4)
            {
               if($aMenu4["items_id"] == "menu_iblock_/$type/$iblock_id")
               {
                  $aModuleMenu[$i1]["items"][$i4]["icon"] = "my_menu_icon";
                  //<a id="my_menu_icon"></a> + css = result
               }
            }
         }
      }
   }
}

Категории: Справочник

Как сделать ссылку для печати в Битрикс

Ссылки для печати обычно имеют вид Домен/Адрес_страницы/?print=Y Чтобы всегда иметь в ссылке актульный адрес страницы, его необходимо выводить с помощью встроенной функции GetCurPageParam(), которая позволяет удалять и добавлять параметры к текущему адресу. Соответственно html-код будет иметь вид:

<a href="<?=$APPLICATION->GetCurPageParam("print=Y", array("print"))?>" title="Версия для печати">Версия для печати</a>

Категории: Справочник

Как изменить заголовок X-Powered-CMS, отсылаемый сервером

CMS 1c-Bitrix отличается большой любовью везде упоминать свое название. Одним из таких мест является ответ сервера, куда автоматически подставляется строка X-Powered-CMS:Bitrix Site Manager (DEMO или хеш ключа). Если вдруг понадобится отключить, то сделать это можно 2 способами — удалить соответствующую строку в /bitrix/modules/main/include.php или добавить следующий код в /bitrix/php_interface/init.php

AddEventHandler("main", "OnBeforeProlog", "ChangeHeaders");
function ChangeHeaders() {
	header("X-Powered-CMS: any_string", true);
}

Метки:

Категории: Справочник

Невозможность редактировать меню из публичной части

Иногда в битриксе невозможно отредактировать пункты меню, кликнув на соответствующую ссылку из меню компонента в режиме правки. Проблема возникает при использовании нестандартного типа меню (в стандартной поставке это .top и .left). Для исправления ситуации нужно в настройках модуля «Управление структурой» прописать новый тип.

Категории: Справочник