Коллеги программисты! Этот модуль разрабатывался 3 года, много раз переделывался и переосмысливался. За время разработки различные его версии были опробованы на множестве проектов, и сегодня я хочу представить вам финальную версию.
Итак, модуль называется "Универсальные свойства привязки", и позволяет создавать свойства привязки не только к разделам, элементам инфоблоков, блогам, форумам, опросам, валютам, а вообще к чему угодно. Как - я поясню далее.
Создание связей между различными сущностями, будь то элементы и разделы инфоблоков, посты на форуме, пользователи и т.д. давно является неотъемлемой частью разработки любого интернет-проекта. Для многих сайтов достаточно стандартных средств организации таких связей, т.е. например, свойств привязки элементов инфоблоков к другим элементам, или пользователей к элементам, но очень часто возникает необходимость как привязки к нестандартным сущностям (например, веб-формам или валютам), так и просто небольшой модификации стандартных средств (например, нужна привязка только к элементам из определенного раздела инфоблока). Такая задача обычно решается либо разработкой собственных типов свойств, что является достаточно трудоемкой задачей, либо упрощением интерфейса, когда, например, пользователь сам должен заполнять идентификаторы каких-либо сущностей в стандартных свойствах типа "Строка", что является неудобным для пользователя и увеличивает количество ошибок заполнения контента. Данный модуль позволяет максимально упростить создание таких привязок, не требуя от программиста владения навыками создания и отладки собственных типов свойств, ему достаточно лишь создать источник данных, используя описание api модуля (если необходимого ему источника нет в стандартной поставке модуля).
Источники данных
Чтобы максимально упростить понимание процесса создания источников данных для модуля, структура файлов источника почти повторяет структуру файлов компонентов, которая известна даже начинающим битрикс-программистам (только гораздо проще):
Файл .description.php - содержит название источника
Файл .parameters.php - содержит параметры источника, его структура повторяет аналогичный файл для компонентов битрикс, и эти параметры будут выводится в настройках свойств (необязательный)
Файл list.php - основной файл источника, содержит непосредственно код формирования списка элементов, запросы к базе данных при помощи api (при необходимости) и т.д.
Стандартные источники данных лежат в папке /bitrix/modules/grain.links/lists (вы можете быстро скопировать любой источник и доработать его по желанию)
Пользовательские источники нужно размещать в папке /bitrix/php_interface/grain.links
<?
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).
Интеграция с другими модулями
Вскоре поддержка модуля будет внедрена в модуль Свойства-таблицы, что позволит сделать в нем тип колонки "Привязка", в т.ч. к элементам инфоблоков, что особенно просили реализовать пользователи этого модуля, а также в модуль Дополнительные настройки, который скорее всего скоро станет бесплатным. Если вы хотите использовать функционал модуля в вашем модуле или типовом сайте, обращайтесь в личку, или через сайт, думаю, мы обязательно договоримся.
Добрый день. Такой вопрос, установил себе на сайт тестовый пока. Сделал в свойствах универсальную привязку указал тип код и раздел инфоблока. А вот в админке при редактировании элемента после этого поле не показывается(показывается что модуль триальный), а при добавлении элемента через публичку там просто текстовое поле, без списков. Это из за того что модуль в тестовом режиме?
Беседин Дмитрий, нет, так не должно быть, если предоставите доступ, я посмотрю в чем дело. А в публичке вы какой компонент используете, не "Добавление элементов инфоблока" случайно?
Беседин Дмитрий, этот компонент и стандартных типов свойств большинство не поддерживает, не говоря уже о пользовательских. Впрочем, не так уж и сложно доработать его шаблон, чтобы он поддерживал. Используйте вызов компонента "grain:links.edit" вместо поля в нужном месте (в описании api есть примеры).
А можно ли с помощью вашего модуля сделать привязку к свойству элемента инфоблока? Т.е. есть инфоблок1, так есть множественное свойство1. У инфоблока2 должно быть свойство в котором будет привязка к к.-либо значению множественного свойства элемента инфоблока1
Хан Эрли, да, это возможно, только нужно будет написать свой источник данных в соответствии с описанием api: http://g-rain-design.ru/components/li...evelopment (там все просто, и можете скопировать стандартный какой-нибудь источник и исправить его). Для получения значений свойства инфоблока1 используйте api модуля инфоблоков. Если у вас свойство типа "Список", то вот эти функции http://dev.1c-bitrix.ru/api_help/iblo.../index.php
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».