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

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

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

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

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

Структура файлов источника данных для модуля Универсальные свойства привязки                

  • Файл .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/links/api/#component-links-edit).

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


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

Страница модуля: http://g-rain-design.ru/components/links/
Описание api: http://g-rain-design.ru/components/links/api/

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

http://ваш-сайт/bitrix/admin/update_system_partner.php?addmodule=grain.links

Чтобы оставить сообщение, авторизуйтесь, или войдите с помощью: