Дата последнего изменения: 08.11.2023
Несколько примеров решения задач с помощью файла result_modifier.
Задача: показывать новых сотрудников на корпоративном портале только небольшой период времени, допустим, месяц с момента их приема на работу, а не до тех пор, пока не будет принят кто-то еще.
Чтобы решить задачу можно слегка изменить результаты работы компонента intranet.structure.informer.new, на основе которого работает гаджет Новые сотрудники.
//show only users hired in the last N days
$period_days = 30;
foreach ($arResult['ENTRIES'] as $key => $arEntry) {
$user_reg_timestamp = MakeTimeStamp($arEntry["DATE_ACTIVE_FROM"] , "MM/DD/YYYY HH:MI:SS");
$from = strtotime("-".$period_days." days");
if ($user_reg_timestamp < $from) {
unset($arResult['ENTRIES'][$key]);
}
}
В коде задается количество дней: в данном случае гаджет будет показывать только сотрудников, принятых в течение месяца. Дата приема сотрудника будет сравниваться с текущей датой и, если сотрудник принят больше, чем месяц назад, то он выводиться не будет.
<?
if (count($arResult['ENTRIES']) == 0) {
echo GetMessage('INTR_NO_ENTRIES');
}
?>
Само текстовое сообщение будет находиться в файле шаблона /lang/ru/template.php
$MESS['INTR_NO_ENTRIES'] = "Новых сотрудников в последнее время не было";
После изменений гаджет Новые сотрудники сможет показывать новых сотрудников в соответствии с выбранными параметрами.
На тех страницах корпоративного портала, где используется комплексный компонент Библиотека (bitrix:webdav), можно настроить список полей для показа. Но на вкладке Файлы на персональной странице или на вкладке Файлы в рабочих группах штатно список полей для показа настроить нельзя.
Если надо показывать описание файла на персональной странице или в рабочих группах, то сделайте следующее. Скопируйте компонент в собственное пространство имён. Далее в каталог /local/components/_ваше_пространство_имен_/webdav.section.list/templates/.default/ добавьте файл result_modifier.php со следующим кодом:
<?
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();
$arParams['COLUMNS'][] = 'PREVIEW_TEXT';
?>
В результате имеем дополнительную колонку Описание для анонса:

Для размещения рекламного баннера внутри текста новости используйте разделитель #BANNER_BOTTOM#, где BOTTOM - тип баннера, который будет показан.
В режиме визуального редактора код может выглядеть следующим образом:

Используйте result_modifier.php, который следует поместить рядом с соответствующим шаблоном показа новости или статьи. Шаблон компонента предварительно скопирован в текущий шаблон сайта:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$arResult["DETAIL_TEXT"] = preg_replace(
"/#BANNER_([A-Za-z-0-9]+)#/e",
'CAdvBanner::GetHTML(CAdvBanner::GetRandom("\1"))',
$arResult["DETAIL_TEXT"]
);
?>
В итоге на сайте это будет выглядеть следующим образом:

foreach ($arResult['ITEMS'] as $key => $item) {
if (!empty($item['PREVIEW_PICTURE']['SRC'])) {
$resizeImg = CFile::ResizeImageGet(
$item['PREVIEW_PICTURE'],
[
'width' => 300,
'height' => 300,
]
);
if (!empty($resizeImg['src'])) {
$resizeImg = array_change_key_case($resizeImg, CASE_UPPER);
$arResult['ITEMS'][$key]['PREVIEW_PICTURE'] = $resizeImg;
}
}
}
Еще примеры: