Remontnouta.ru

ПК Ремонт техники
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Битрикс получить значение свойства элемента

Битрикс получить значение свойства элемента

Не раз приходилось сталкиваться с задачей, когда нужно было вывести свойство инфоблока через 1с-Битрикс API. Рассмотрим такой пример : имеется инфоблок с различными футболками , задача — вывести название футболки и ткань , из которой она сделана.

Инфоблок с футболками имеет >

и требуется вывести свойство с символьным кодом = «TKAN»(рис.2).

Вот что у меня получилось:

Главный наш помощник в получении результата функция битрикс API — CIBlockElement::GetList.

$arSort — отвечает за сортировку. Значение ‘NAME’ => ‘ASC’ означает сортировать по имени по возрастанию.
$arSelect — массив возвращаемых полей элемента. В нашем случае доступны:

Этот список можно пополнить другими свойствами.

$arFilter — нужен для фильтрации элементов. $arFilter = Array('IBLOCK_ID'=> 5) означает, что из всех элементов хранимых в инфоблоках сайта, мы выбираем только те, которые находятся в инфоблоке с >

  • $arFilter = Array('PROPERTY_ TKAN '=> 'шерсть') — все элементы, у которых параметр ткань = шерсть.
  • $arFilter = Array('SECTION_ID' => 55) — все элементы, которые лежат в папке с >Осталось лишь вывести информацию. Для этого используем цикл while с функцией GetNextElement() .И в результате применения функции GetFields() в массиве $arFields будут храниться отобранные по фильтру футболки со свойствами, добавленными в массив $arSelect .

Когда вы используете API в CMS Битрикс, очень часто вы не видите всех значений у свойства список. Или же, вы видите в цикле один и тот же товар, и сразу несколько выбранных значений, что тоже не очень удобно.

Аналог CIBlockElement::GetById() в ORM

Для получения данных по элементу инфоблока, по ID этого элемента, используется метод getByPrimary() вашего «виртуального класса»:

В переменной $product будет примерно такая информация:
Обратите внимание, что ключи пользовательских свойств инфоблока, MANUFACTURER и MATERIAL указываются как есть, без префикса PROPERTY_ . Чтобы избежать таких длинных ключей как IBLOCK_ELEMENTS_ELEMENT_PRODUCTS_MANUFACTURER_IBLOCK_ELEMENT_ID в результирующем массиве, можно использовать псевдонимы, вот так:
В таком случае, данные приходят в более удобном виде:

Элемент инфоблока как объект

С данными элемента инфоблока можно работать не только как с массивом, но и как с объектом. Для этого используйте метод fetchObject() вместо fetch() после вызова getByPrimary() .

В данном случае, в $product будет получен объект класса BitrixIblockElementsEO_ElementProducts с множеством методов для работы с ним. Например:
Как видите для получения значений элемента инфоблока используются так называемые геттеры (методы getXXXX где XXX — название поля в «верблюжьей нотации» или CamelCase). Существует так же общий метод get() который принимает наименование поля, значение которого вам нужно получить. Например:

Читайте так же:
Видео прохождение игры халф лайф

Свойства элемента

Свойства элементов (когда мы работаем с ними в виде объекта) так же получаются при помощи геттеров (методов getXXXX где XXXX — код свойства записанный как CamelCase). У каждого свойства есть поле значения VALUE и описания DESCRIPTION и соответcnвующие методы для доступа к ним getValue() и getDescription() . Рассмотрим пример:

В результате получим строку:

Чтобы получить дополнительную информацию для некоторых типов свойств через ORM, нужно указать дополнительный ключ при выборке свойства:

  • FILE — свойство типа файл
  • ITEM — свойство типа список,
  • ELEMENT — свойство типа привязка к элементу инфоблока
  • SECTION — свойство типа привязка к разделу инфоблока

Давайте рассмотрим это детальнее. У нашего элемента есть следующие свойства требуемых типов:

  • MORE_PHOTO — Картинки галереи (тип файл)
  • NEWPRODUCT — Новинка (тип список)
  • RECOMMEND — С этим товаром рекомендуем (тип привязка к элементу)
  • NEWS_SECTION — Показывать в рекламном блоке в новостях (тип привязка к разделу), это я создал для теста, в «коробке» такого нет

Давайте получим их в ORM:

Свойство типа файл в ORM

Свойство типа список в ORM

Свойство типа привязка к элементам инфоблока в ORM

Свойство типа привязка к разделу инфоблока в ORM

Используются в видео уроке по разработке информационного портала

Вывести теги с отправкой на страницу поиска

Вывести дату создания элемента в правильном формате "22 января 2015"

Вывести количество просмотров элемента инфоблока. Если просмотров нет, вывести 0

Вывести количество комментариев к элементу инфоблока. Если просмотров нет, вывести 0

Не раз приходилось сталкиваться с задачей, когда нужно было вывести свойство инфоблока через 1с-Битрикс API. Рассмотрим такой пример : имеется инфоблок с различными футболками , задача – вывести название футболки и ткань , из которой она сделана.

Инфоблок с футболками имеет >

и требуется вывести свойство с символьным кодом = «TKAN»(рис.2).

Вот что у меня получилось:

Главный наш помощник в получении результата функция битрикс API — CIBlockElement::GetList.

$arSort — отвечает за сортировку. Значение ‘NAME’ => ‘ASC’ означает сортировать по имени по возрастанию.
$arSelect — массив возвращаемых полей элемента. В нашем случае доступны:

Читайте так же:
Бесконечная загрузка скайпа вин 10

Этот список можно пополнить другими свойствами.

$arFilter – нужен для фильтрации элементов. $arFilter = Array(‘IBLOCK_ID’=> 5) означает, что из всех элементов хранимых в инфоблоках сайта, мы выбираем только те, которые находятся в инфоблоке с >

  • $arFilter = Array(‘PROPERTY_ TKAN ‘=> ‘шерсть’) – все элементы, у которых параметр ткань = шерсть.
  • $arFilter = Array(‘SECTION_ID’ => 55) – все элементы, которые лежат в папке с >Осталось лишь вывести информацию. Для этого используем цикл while с функцией GetNextElement() .И в результате применения функции GetFields() в массиве $arFields будут храниться отобранные по фильтру футболки со свойствами, добавленными в массив $arSelect .

Акции

Мы в яндекс

Часто при верстке шаблона и или интеграции верстки в 1с-битрикс, возникает необходимость вывести некоторые свойства инфоблока отдельно или в отдельный блок.
Для этого достаточно в нужном шаблоне вписать:

И не забываем смотреть массив- что указать для шаблона
$arResult
$arItem
$item

К примеру чтобы вывести и название и значение свойства — если оно заполнено, пишем Чтобы вывести свойство строка как ссылку

Вывести свойство типа строка в режиме html:
Что бы вывести свойство типа html / text:
Свойство список в виде select
Множественное свойство типа список:
Вывести список связанных элементов со свойством привязка к элементам в виде списка
Вывести свойство файл-изображение как изображение а не ссылку на загрузку:
Вывести список связанных элементов со свойством привязка к элементам в виде списка
Вывести свойство файл-изображение как изображение а не ссылку на загрузку:
Путь к файлу свойства
Свойство типа файл с ссылкой на загрузку файла
Вывод пользовательского свойства типа html
Вывод дополнительных фото
Если свойство типа список имеет значение. выводим
Как вывести количество просмотров элемента списка

Выборка разделов инфоблока

разделы инфоблока

Получаем все разделы и подразделы инфоблока c ID 12:

Выбираем подразделы из раздела c ID 99 инфоблока с ID 12:

Выборка из инфоблока (ID=12) 20 активных разделов/подразделов:

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

  • 12 — идентификатор инфоблока.
  • false — указывает что выбираем все разделы/подразделы. Вместо этого параметра можно указать ID любого раздела, чтобы выбирать уже его подразделы.
  • $arSort — массив с параметрами сортировки результатов. Подробности смотрите в официальной документации.
  • 20 — ограничение по выборке, по-умолчанию — 0.
  • $arFilter — массив с условиями выборки. В нашем случае в него записано два условия:
    • ACTIVE — раздел/подраздел должен быть активным;
    • GLOBAL_ACTIVE — вся цепочка родительских разделов так же должна быть активна.

    Функционал раздела

    Роберт Басыров

    Nikolay Ryzhonin: Все-таки более правильный и эффективный путь — это анализ с explain медленных запросов и анализ кода, их вызвавшего. А уже по результатам — добавление необходимых индексов или изменение кода приложения. Так как не всегда медленные запросы — следствие проблем в API, часто встречаются случаи его неправильного использования.

    Кеширование иногда — это зло. Если кешировать каталог с многовариативным фильтром при большой посещаемости, то генерация кеша может превышать 200 мегабайт в минуту. Любая квота на диске заполнится достаточно быстро. Возникают и проблемы с очисткой этого кеша. Отключение такого кеша снизит количество операций на запись.

    Не надо бояться создавать индексы. Хотя точно сказать какие индексы создавать в каждой конкретной ситуации заочно нельзя, надо всегда рассматривать конкретную ситуацию. В этом помогает инструмент Индексы.

    Один из часто используемых индексов — индекс по списочному свойству. Это индекс для простых инфоблоков. b_iblock_element_property — в этой таблице хранятся значения свойств. Её и индексируем: значение свойства, его ID, ID элемента. Создание такого индекса при фильтре по списковому свойству фактически исключает обращение MySQL к указанной таблице, так как все имеющиеся в запросе поля присутствуют в индексе.

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

    Совет от веб-разработчиков.

    Антон Долганин: Если требуется обновить большое количество элементов, то имеет смысл обновление производить в обход индексации поиском: 4-й параметр в false. А уже после обработки запустить переиндексацию инфоблоков сайта. Запись в модуль поиска увеличивает конечное время исполнения в десятки-сотни раз.

    Типы фильтрации

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

    • (пустой) — для строковых полей означает поиск по маске (в маске: "%" — произвольное число любых символов, "_" — один произвольный символ), для полей с нестроковыми типами поиск "равно".
    • "!" — для строк выражение не попадающее под маску, или не равно (для остальных типов полей).
    • "?" — с применением логики, работает только для строковых свойств.
    • "<" — меньше;
    • "<=" — меньше либо равно;
    • ">" — больше;
    • ">=" — больше либо равно.
    • "=" — равно;
    • "!=" — не равно.
    • "%" — подстрока;
    • "!%" — не подстрока.
    • "><" — между;
    • "!><" — не между.

    В качестве аргумента данные типы фильтров принимают массив вида Array("значение ОТ", "значение ДО") .

    Указанные операторы отображаются в sql BETWEEN, то есть граничные значения попадают в результат, используется выражение (min .

    Несколько частных случаев фильтрации

    Настройка фильтрации для отображения связанных элементов

    Задача: допустим, что есть 2 инфоблока, связанные между собой по одному из свойств. Как настроить фильтрацию, чтобы среди элементов ифоблока показывались только связанные?

    Настройка фильтрации по свойству типа "Дата/время"

    Свойство типа "Дата/время" хранится как строковое в формате YYYY-MM-DD HH:MI:SS, поэтому значение для фильтрации формируется следующим образом:

    Что дальше? Дальше мы включим GetList, который производет выборку.

    Если вы вставить получившийся код на страницу, то получите «портянку» из всех элементов и их свойств. Что бы получить конкретное значение свойства привязанного элемента (в разных случаях это может потребоваться) — в условии print_r ($arFields); нужно указать к примеру print_r ($arFields[«NAME»]); или в случае с свойством инфоблоком print_r ($arFields[«PROPERTY_2_VALUE»]); (где 2, это ID свойства)

    В итоге готовый код выглядит следующим образом:

    Очень надеюсь, что благодаря нашей шпаргалке разработчикам 1С Битрикс станет чуточку проще разрабатывать свои проекты, в том числе выводить свойство привязка к элементу!

    Если вы или ваши специалисты столкнулись с проблемами вывода необходимой информации из инфоблоков — вы всегда можете обратиться к нам. Наша команда имеет большой опыт работы с 1С-Битрикс и сможет решить большинство задач. Так же вы можете заказать поддержку, оптимизацию и SEO продвижение вашего сайта не зависимо от территориального расположения и CMS!

    Добавление свойств в Инфоблок

    Что бы добавить ее к элементу, необходимо в первую очередь создать само свойство в инфоблоке, которое в дальнейшем нужно заполнить в карточке товара. Для этого переходим в настройки инфоблока «Продукция», в которую будем добавлять характеристику. Открываем вкладку « Свойства », и тут видим все характеристики, которыми обладает инфоблок.

    Ниже создаем новое свое свойство, в колонке название прописываем «Каркас», тип оставляем «Строка», сортировку можно сделать 900, и обязательно прописываем символьный код «CARCASS». Код может быть произвольным, обязательно пропишите его на латинице заглавными буквами и самое главное, чтобы он был уникальный, не повторялся с другими в этой колонке.

    Жмем сохранить, затем переходим в любой из элементов, и заполняем в нем новую характеристику, прописываем в ней «Деревянный».

    Переходим в визуальную часть, откроем страницу с данным элементом, но как видим свойство, которое добавляли в инфоблок, тут не отображается. И причина эта в том, что текущее свойство у нас, не попадает в массив $arResult , который является результатом работы компонента. Более детально как работать с массивом мы познакомимся в одном из уроков курса, а тут откроем настройки и посмотрим, установлено ли данное свойство внутри компонента.

    В режиме визуальной правки, наводим на область компонента, появляется его меню, жмем на шестеренку. Отображается форма с параметрами компонента. Так как мы настраиваем детальный просмотр элемента, то нас интересует пункт «Настройки детального просмотра», жмем на нее. Как видим, в этом пункте перечислены свойства, которыми обладает инфоблок.

    С зажатым CTRL выделяем то, которое ранее мы добавляли «Каркас». Если свойство тут не отображается, тогда вам нужно в поле снизу, вписать символьный код вручную. Обязательно вписываете в том регистре, в котором создавали его в инфоблоке и оно появится в массиве $arResult.

    Затем жмем сохранить настройки компонента.

    Обновилась страница, как видим, свойство отобразилось в карточке элемента, внутри блока характеристик.

    Таким образом, если вам необходимы новые свойства, можно добавлять их так к элементам.

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

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

    голоса
    Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector