Converttodb bitrix не работает

ConvertToDB

Описание и параметры

Метод должен преобразовать значение свойства в формат пригодный для сохранения в базе данных. И вернуть массив вида array(«VALUE» => «. «, «DESCRIPTION» => «. «). Если значение свойства это массив, то разумным будет использование функции serialize. А вот Дата/время преобразуется в ODBC формат «YYYY-MM-DD HH:MI:SS». Это определит возможности сортировки и фильтрации по значениям данного свойства. Метод статический при использовании штатных свойств. У свойств, созданных клиентом, обязан быть статическим при использовании php7.

Параметры вызова

Параметр Описание
arProperty Метаданные свойства. См. Свойства элементов инфоблока
value Значение свойства. Массив вида:
array(
«VALUE» => значение,
«DESCRIPTION» => описание,
);

Возвращаемое значение

Строка представление для БД.

Смотрите также

Примеры использования

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

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

Источник

Ещё раз про кастомные типы свойств ИБ

Тема не нова, но надеюсь, окажется полезной.

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

1С-Профессионал 15.01.2005
1С-Специалист 09.06.2011
и т.д.

На схеме данных это выглядит так:

Понятно, что хранить лишний инфоблок для такого пустяка избыточно, и был найден другой способ.

Некоторые типы свойств (строка, число, файл, дата, и т.д.) позволяют отдельно хранить поле для описания значения свойства. По умолчанию это просто текстовое поле, что не совсем подходит — вбивать руками дату пользователя не заставишь.

Задача свелась к следующему: создать такой тип свойства ИБ, который бы позволял в поле VALUE хранить ID элемента ИБ Квалификации, а в поле DESCRIPTION — дату её получения. При этом выводиться список Квалификаций должен в селекте, дату же будем выбирать с помощью стандартного bitrix:main.calendar.

К счастью, разработчики из Bitrix оставили некоторые указания на этот счёт[4].

Каждый тип свойства описывается набором методов:

Кроме того, в файле /bitrix/modules/main/classes/general/usertypestr.php достаточно комментариев, описывающих каждый метод.

Реализация

  1. Создаём класс, в котором описываем тип свойства. Методы, которые понадобились мне:
    1. GetUserTypeDescription
    2. GetPropertyFieldHtml
    3. ConvertToDB
    4. ConvertFromDB
Читайте также:  Как настроить цифровые каналы башинформсвязь

В init.php подключаем созданный класс и регистрируем обработчик события OnIBlockPropertyBuildList .

Детали реализаци

  1. Описание класса

require_once($_SERVER[‘DOCUMENT_ROOT’].»/bitrix/php_interface/classes/CCustomTypes/CCustomTypes.php»);
AddEventHandler(‘iblock’, ‘OnIBlockPropertyBuildList’, array(‘CCustomTypeElementDate’, ‘GetUserTypeDescription’));

Выбор нового свойства в настройках ИБ:

Как это выглядит в форме добавления элемента ИБ:

Источник

Ещё раз про кастомные типы свойств ИБ

Тема не нова, но надеюсь, окажется полезной.

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

1С-Профессионал 15.01.2005
1С-Специалист 09.06.2011
и т.д.

На схеме данных это выглядит так:

Понятно, что хранить лишний инфоблок для такого пустяка избыточно, и был найден другой способ.

Некоторые типы свойств (строка, число, файл, дата, и т.д.) позволяют отдельно хранить поле для описания значения свойства. По умолчанию это просто текстовое поле, что не совсем подходит — вбивать руками дату пользователя не заставишь.

Задача свелась к следующему: создать такой тип свойства ИБ, который бы позволял в поле VALUE хранить ID элемента ИБ Квалификации, а в поле DESCRIPTION — дату её получения. При этом выводиться список Квалификаций должен в селекте, дату же будем выбирать с помощью стандартного bitrix:main.calendar.

К счастью, разработчики из Bitrix оставили некоторые указания на этот счёт[4].

Каждый тип свойства описывается набором методов:

Кроме того, в файле /bitrix/modules/main/classes/general/usertypestr.php достаточно комментариев, описывающих каждый метод.

Реализация

  1. Создаём класс, в котором описываем тип свойства. Методы, которые понадобились мне:
    1. GetUserTypeDescription
    2. GetPropertyFieldHtml
    3. ConvertToDB
    4. ConvertFromDB

В init.php подключаем созданный класс и регистрируем обработчик события OnIBlockPropertyBuildList .

Детали реализаци

  1. Описание класса

require_once($_SERVER[‘DOCUMENT_ROOT’].»/bitrix/php_interface/classes/CCustomTypes/CCustomTypes.php»);
AddEventHandler(‘iblock’, ‘OnIBlockPropertyBuildList’, array(‘CCustomTypeElementDate’, ‘GetUserTypeDescription’));

Выбор нового свойства в настройках ИБ:

Как это выглядит в форме добавления элемента ИБ:

Источник

Пользовательский тип свойств инфоблока в 1С Битрикс

В дополнение к статье о создании собственного типа пользовательских полей хочу рассказать как делать аналогичные свойства для информационных блоков, т.к. эти свойства относятся к другому модулю, а именно «информационные блоки» (iblock). Из коробки инфоблоки битрикс предоставляют следующий набор типов свойств:

  • Строка
  • Число
  • Список
  • Файл
  • Привязка к элементам
  • Привязка к разделам
  • HTML\Текст
  • Видео
  • Дата
  • Дата\Время
  • Деньги
  • Привязка к Яндекс.Карте
  • Привязка к Google Maps
  • Привязка к пользователю
  • Привязка к разделам с автозаполнением
  • Привязка к теме форума
  • Привязка к товарам (SKU)
  • Привязка к файлу (на сервере)
  • Привязка к элементам в виде списка
  • Привязка к элементам по XML_ID
  • Привязка к элементам с автозаполнением
  • Справочник
  • Счётчик

Достаточно внушительный список, однако иногда заказчику нужны какие-то очень специфические решения, которые не удаётся реализовать в полном объёме. Тут битрикс предоставляет возможность расширить доступный перечень свойств.

Рассмотрим пример создания множественного свойства для реализации расписания врачей.

Подготовка и загрузка класса

Структура и способ загрузки класса будет аналогичным с первой статьёй. Так же используем папку /local/ и такую структуру:

Читайте также:  Настроить принтер эпсон л222

Тут дополнительная функция print_p() служит для удобства вывода содержимого переменных и отладки.

Тут храним константы с путями к ключевым папкам (пока одна).

Тут подгружаем один единственный класс. У меня он будет реализован в файле CUserTypeTimesheet.php .

Тут нам необходимо повесить обработчик на событие построения списка доступных свойств в инфоблоке OnIBlockPropertyBuildList .

Стандартные классы модуля iblock

Подсмотреть реализацию близкого к вашей задаче свойства, можно подсмотреть в модуле «Информационные блоки». Для этого перейдём в папку /bitrix/modules/iblock/classes/general/, здесь вы найдёте перечень классов в отдельных файлов с префиксом prop_, например:

  • prop_date.php
  • prop_datetime.php
  • prop_html.php

Для реализации собственного класса, вам нужно реализовать в собственном классе как минимум 2 метода:

  • GetUserTypeDescription() — метод для описания свойства
  • GetPropertyFieldHtml() — метод для вывода html формы свойства

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

  • ConvertToDB() — обработка значения перед записью в БД
  • ConvertFromDB() — обработка значения после извлечения из БД, но до вывода в GetPropertyFieldHtml()

Создаём класс для реализации собственного свойства инфоблока

Согласно вышеописанной структуре нам остаётся создать файл самого класса.

Подключаемый класс реализует вот такое свойство:

Через инфоблок свойство естественно создаётся как множественное. Как видите для одного и того же дня недели можно создавать неограниченное количество временных промежутков приёма врача и всё это будет корректно сохраняться.

Обратите внимание что для хранения составных данных я использую сериализацию массива + функцию base64_encode() , это позволяет избежать ряд ошибок при хранении данных в БД.

Данное свойство позволит вам реализовать страницу со списком врачей или других специалистов компании с удобным редактированием времени приёма.

Источник

Устранение ошибок CMS Битрикс

Опция «Проверка системы» в CMS Битрикс позволяет проверить соответствие настроек хостинга требованиям CMS и вашего сайта. При запуске этой опции на хостинге Timeweb, Битрикс, как правило, приводит несколько ошибок и замечаний. В этой статье мы рассмотрим, как их исправить.

Отправка почты

Речь идет о двух параметрах: «Отправка почты» и «Отправка почтового сообщения больше 64Кб».

Уведомление: Ошибка! Не работает

Эта ошибка возникает, если вы используете хостинг на тестовом периоде — до оплаты услуги почта недоступна. Как только хостинг будет оплачен, почта заработает.

Режим работы MySQL

Уведомление: Ошибка! innodb_strict_mode=ON, требуется OFF. Переменная sql_mode в MySQL должна быть пустая, текущее значение: NO_ENGINE_SUBSTITUTION

Эта ошибка критична. Она может привести к блокировке запросов к базе данных, что практически означает остановку работы сайта.

Решение:

Необходимо внести изменения в файлы конфигурации Bitrix, в которых задаются параметры базы данных, и указать в них нужные значения. Отредактировать файлы можно, например, с помощью Файлового менеджера.

В файл /public_html/bitrix/php_interface/after_connect.php под уже имеющимися строками и до символов ?> добавьте:

В файл /public_html/bitrix/php_interface/after_connect_d7.php под уже имеющимися строками и до символов ?> добавьте:

Читайте также:  Не работал паркомат пришел штраф

После этого проверка Bitrix пройдет успешно.

Размер стека и pcre.recursion_limit

Уведомление: Замечание: Возможны проблемы в работе с длинными строками из за системных ограничений

Это замечание некритично и, как правило, на работе сайтов не сказывается, однако оно может влиять на обработку очень длинного текста, например, если в нем сотни тысяч символов.

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

Решение:

  • Если у вас тариф мощного хостинга, решением будет переключение сайта на PHP 7.4. Это можно сделать в разделе «Сайты» по нашей инструкции.
  • Если у вас тариф обычного хостинга или если смена версии PHP не помогла, исправить ошибку, добавьте в файл /public_html/.htaccess строки:

Выполнение агентов на cron

Уведомление: Замечание: Агенты выполняются на хитах, рекомендуется перенести их выполнение на cron

Это замечание некритично. В Битрикс предусмотрен внутренний планировщик задач (агентов). Данное замечание влияет на то, насколько точно по времени сработают запланированные задачи. Грубо говоря, скрипты сайта выполняются, только когда его страницы кто-то посещает. Если нет посещений, то и таймер работать не будет. Cron позволяет полностью решить проблему с планированием задач.

Решение:

Чтобы перенести работу непериодических агентов (и передачу почты) на Сron, необходимо установить константу BX_CRONTAB_SUPPORT .

Для этого добавьте в файл /public_html/bitrix/php_interface/dbconn.php строку:

1. В разделе Crontab нажмите «Добавить новую задачу» и задайте удобное имя для задачи.

2. В пункте «Исполнитель» выберите «Исполняемый бинарный файл».

3. В пункте «Путь до файла» укажите команду следующего вида:

  • В /opt/php72/bin/php укажите ту версию php, которую использует сайт. Например, /opt/php74/bin/php ( или /opt/php7.4/bin/php ).
  • Вместо /home/u/user/site.ru/public_html укажите корректный путь до папки сайта и замените u и user на первую букву вашего логина и сам логин.

4. В пункте «Периодичность» выберите «Каждую минуту».

Уведомление: Ошибка! Не настроен запуск cron_events.php на cron

Эта ошибка может возникнуть, если в пункте выше вы только добавили константу, но не добавили задачу cron. Без настройки задачи в crontab будет остановлена часть агентов, в том числе с сайта перестанет отправляться почта. Письма будут накапливаться в очередь и отправляться по частям после устранения ошибки.

Решение:

Выполните приведенную выше инструкцию по добавлению задачи cron, и ошибка будет устранена.

Обязательные параметры PHP

Уведомление: Ошибка! Значение max_input_vars должно быть не ниже 10000

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

Решение:

Необходимо добавить следующую строку в файл /public_html/.htaccess :

Источник

Оцените статью