+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Универсальные свойства привязки (свойства привязки к чему угодно)

Коллеги программисты! Этот модуль разрабатывался 3 года, много раз переделывался и переосмысливался. За время разработки различные его версии были опробованы на множестве проектов, и сегодня я хочу представить вам финальную версию.

Итак, модуль называется "Универсальные свойства привязки", и позволяет создавать свойства привязки не только к разделам, элементам инфоблоков, блогам, форумам, опросам, валютам, а вообще к чему угодно. Как - я поясню далее.

property_link_to_iblock.png

Создание связей между различными сущностями, будь то элементы и разделы инфоблоков, посты на форуме, пользователи и т.д. давно является неотъемлемой частью разработки любого интернет-проекта. Для многих сайтов достаточно стандартных средств организации таких связей, т.е. например, свойств привязки элементов инфоблоков к другим элементам, или пользователей к элементам, но очень часто возникает необходимость как привязки к нестандартным сущностям (например, веб-формам или валютам), так и просто небольшой модификации стандартных средств (например, нужна привязка только к элементам из определенного раздела инфоблока). Такая задача обычно решается либо разработкой собственных типов свойств, что является достаточно трудоемкой задачей, либо упрощением интерфейса, когда, например, пользователь сам должен заполнять идентификаторы каких-либо сущностей в стандартных свойствах типа "Строка", что является неудобным для пользователя и увеличивает количество ошибок заполнения контента. Данный модуль позволяет максимально упростить создание таких привязок, не требуя от программиста владения  навыками создания и отладки собственных типов свойств, ему достаточно лишь создать источник данных, используя описание api модуля (если необходимого ему источника нет в стандартной поставке модуля).

Источники данных

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

data_source_folder_structure.jpg
  • Файл .description.php - содержит название источника
  • Файл .parameters.php - содержит параметры источника, его структура повторяет аналогичный файл для компонентов битрикс, и эти параметры будут выводится в настройках свойств (необязательный)
  • Файл list.php - основной файл источника, содержит непосредственно код формирования списка элементов, запросы к базе данных при помощи api (при необходимости) и т.д.
Стандартные источники данных лежат в папке /bitrix/modules/grain.links/lists
(вы можете быстро скопировать любой источник и доработать его по желанию)

Пользовательские источники нужно размещать в папке /bitrix/php_interface/grain.links

Полное описание api модуля находится по адресу http://g-rain-design.ru/components/links/api/ , здесь я лишь объясню на примере как сделать простой собственный источник.

<?
if(CModule::IncludeModule("subscribe")) {

   // источник данных - выпуски рассылок

   // подразумевается, что параметры сортировки описаны в файле .parameters.php
   $arSort = array(
      $arParams["SORT_BY1"]=>$arParams["SORT_ORDER1"],
      $arParams["SORT_BY2"]=>$arParams["SORT_ORDER2"],
   );
   
   $arFilter = Array();

   // при аякс запросе добавляем фильтр по теме рассылки
   if($arResult["AJAX_RETURN"]) $arFilter["SUBJECT"] = $arResult["AJAX_SEARCH_QUERY"];
   
   // при запросе выбранных элементов - по ID 
   // (вместо ID можно использовать и что-то другое, если это удобнее)
   if($arResult["SELECTED_VALUE"]) $arFilter["ID"] = $arResult["SELECTED_VALUE"];

   // делаем запрос через api модуля рассылок
   $cPosting = new CPosting;
   $rsPosting = $cPosting->GetList($arSort,$arFilter);
   
   while($arPosting=$rsPosting->GetNext()) {

      // у каждого элемента списка один обязательный параметр NAME,
      // используем в его качестве тему выпуска
      // (также есть необязательный параметр URL)
      $arItem = Array(
         "NAME" => $arPosting["SUBJECT"],
      );
      
      // сохраняем элемент списка в массиве $arResult["DATA"]
      $arResult["DATA"][$arPosting["ID"]] = $arItem;
      
   }
   
}
?>

Стандартные источники данных

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

Возможны 4 типа логики выбора из списка: "аякс" (динамическая подгрузка элементов списка при наборе подстроки), "простой выбор из списка" (имитирует стандартное поле типа <select> ), "выбор из списка с возможностью поиска" (имитирует стандартное поле <select>, но с возможностью динамического поиска по подстроке, при отсутствии подстроки выводятся все элементы), и "только поиск" (динамический поиск по подстроке без возможности увидеть все элементы). Вы можете выбирать любой интерфейс в зависимости от прогнозируемого количества элементов в списке и других условий.

Тип интерфейса можно выбрать в настройках свойств.

Компонент "Выбор из списка"

Этот компонент составляет основу модуля, но одним только использованием в свойствах его применение не ограничено. По сути, он является аналогом стандартного тега <select>, но с возможностью включения поиска или режима аякс, и с успехом может использоваться в качестве замены этого тега в публичной части сайта, например в фильтрах с большим количеством параметров, и при кастомизации различных форм. Шаблон компонента легко стилизуется под при помощи правки файла style.css внутри шаблона, а изменение логики его работы, недоступное через параметры компонента, осуществляется с помощью изменения javascript-кода, который также находится внутри шаблона. Кстати, если необходимо изменение логики интерфейса в свойствах привязки, или даже осуществление взаимосвязи между разными свойствами, то копирование и изменение шаблона компонента скорее всего поможет вам в этом. Источниками элементов списка для компонента, помимо источников данных, которые были описаны выше, могут также служить как массивы разной структуры, так и уже готовый сформированный html код тега <select> (подробнее об этом здесь: http://g-rain-design.ru/components/li...links-edit).

Интеграция с другими модулями

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

Пробный период работы модуля составляет 30 дней.

Страница модуля: на сайтев маркетплейсе

Оригинал статьи

Назад в раздел

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












CAPTCHA