<head>
<?$APPLICATION->ShowHead();?>
<title><?$APPLICATION->ShowTitle()?></title>
</head>
Перед названием фильтруемого поля можно указать тип проверки фильтра:
- "!" - не равно
- "<" - меньше
- "<=" - меньше либо равно
- ">" - больше
- ">=" - больше либо равно
- "><" - между
- и т.д.
Значения фильтра - одиночное значение или массив значений. Для исключения пустых значений необходимо использовать false.
Необязательное. По умолчанию записи не фильтруются.
Примечание 1: (по настройке фильтра для свойства типа "Дата/Время"): свойство типа Дата/Время хранится как строковое с датой в формате YYYY-MM-DD HH:MI:SS. Соответственно сортировка по значению такого свойства будет работать корректно, а вот значение для фильтрации формируется примерно так: $cat_filter[">"."PROPERTY_available"] = date("Y-m-d");
Примечание 2: при использовании типа проверки фильтра "><" для целых чисел, заканчивающихся нулем, необходимо использовать тип поля число или разделительный знак "," для десятичных значений (например, 20000,00). Иначе работает не корректно.
">PROPERTY_SEMINAR_END" => date('Y-m-d)
$description = $APPLICATION->GetProperty("description");
echo $APPLICATION->ShowProperty("page_title");
use \Bitrix\Main\Loader;
use \Bitrix\Highloadblock as HL;
/**
* @var array Массив описывающий свойство типа справочник
*/
$arHighloadProperty = $arResult["PROPERTIES"]['TEST'];
/**
* @var string название таблицы справочника
*/
$sTableName = $arHighloadProperty['USER_TYPE_SETTINGS']['TABLE_NAME'];
/**
* Работаем только при условии, что
* - модуль highloadblock подключен
* - в описании присутствует таблица
* - есть заполненные значения
*/
if ( Loader::IncludeModule('highloadblock') && !empty($sTableName) && !empty($arHighloadProperty["VALUE"]) )
{
/**
* @var array Описание Highload-блока
*/
$hlblock = HL\HighloadBlockTable::getRow([
'filter' => [
'=TABLE_NAME' => $sTableName
],
]);
if ( $hlblock )
{
/**
* Магия highload-блоков компилируем сущность, чтобы мы смогли с ней работать
*
*/
$entity = HL\HighloadBlockTable::compileEntity( $hlblock );
$entityClass = $entity->getDataClass();
$arRecords = $entityClass::getList([
'filter' => [
'UF_XML_ID' => $arHighloadProperty["VALUE"]
],
]);
foreach ($arRecords as $record)
{
/**
* Тут любые преобразования с записью, полученной из таблицы.
* Я транслировал почти все напрямую.
*
* Нужно помнить, что например в UF_FILE возвращается ID файла,
* а не полный массив описывающий файл
*/
$arRecord = [
'ID' => $record['ID'],
'UF_NAME' => $record['UF_NAME'],
'UF_SORT' => $record['UF_SORT'],
'UF_XML_ID' => $record['UF_XML_ID'],
'UF_LINK' => $record['UF_LINK'],
'UF_DESCRIPTION' => $record['UF_DESCRIPTION'],
'UF_FULL_DESCRIPTION' => $record['UF_FULL_DESCRIPTION'],
'UF_DEF' => $record['UF_DEF'],
'UF_FILE' => [],
'~UF_FILE' => $record['UF_FILE'],
];
/**
* Не очень быстрое решение - сколько записей в инфоблоке, столько файлов и получим
* Хорошо было бы вынести под код и там за 1 запрос все получить, а не плодить
* по дополнительному запросу на каждый файл
*/
if ( !empty($arRecord['~UF_FILE']) )
{
$arRecord['UF_FILE'] = \CFile::getById($arRecord['~UF_FILE'])->fetch();
}
$arHighloadProperty['EXTRA_VALUE'][] = $arRecord;
}
}
}
RewriteEngine On
RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]
<form action='http://borelli.beget.tech/bitrix/templates/eshop_bootstrap_blue/send_msg_form.php' method='GET'>
<input name='name' type='text' placeholder='Имя*' class='name_form' ></input>
<input name='email' type='email' placeholder='E-mail*' class='email_form' ></input><br><br>
<input name='topic' type='text' placeholder='Тема*' class='topic_form' ></input><br><br>
<textarea name='msg' placeholder='Сообщение*'></textarea><br><br>
<img src='http://borellifashiongroup.ru/bitrix/templates/eshop_bootstrap_blue/captcha.php' class='captcha' />
<input type='text' name='norobot' placeholder='Введите текст с картинки*' class='captcha_code' ></input>
<button>отправить</button>
</form>
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible('search', 'BeforeIndex', ['\\CatalogProductIndexer','handleBeforeIndex']);
class CatalogProductIndexer
{
/**
* @var int Идентификатор инфоблока каталога
*/
const IBLOCK_ID = '30';
/**
* Дополняет индексируемый массив нужными значениями
* подписан на событие BeforeIndex модуля search
* @param array $arFields
* @return array
*/
public static function handleBeforeIndex( $arFields = [] )
{
if ( !static::isInetesting( $arFields ) )
{
return $arFields;
}
/**
* @var array Массив полей элемента, которые нас интересуют
*/
$arSelect = [
'ID',
'IBLOCK_ID',
'PROPERTY_TEST1',
'PROPERTY_TEST2'
];
/**
* @var CIblockResult Массив описывающий индексируемый элемент
*/
$resElements = \CIBlockElement::getList(
[],
[
'IBLOCK_ID' => $arFields['PARAM2'],
'ID' => $arFields['ITEM_ID']
],
false,
[
'nTopCount'=>1
],
$arSelect
);
/**
* В случае, если элемент найден мы добавляем нужные поля
* в соответсвующие столбцы поиска
*/
if ( $arElement = $resElements->fetch() )
{
$arFields['TITLE'] .= ' '.$arElement['PROPERTY_TEST1_VALUE'];
$arFields['BODY'] .= ' '.$arElement['PROPERTY_TEST2_VALUE'];
}
return $arFields;
}
/**
* Возвращает true, если это интересующий нас элемент
* @param array $fields
* @return boolean
*/
public static function isInetesting( $fields = [] )
{
return ( $fields["MODULE_ID"] == "iblock" && $fields['PARAM2'] == static::IBLOCK_ID );
}
}