Cистема управления сайтом

Связи и как ими пользоваться

Каждый документ DJEM содержит произвольный набор пользовательских полей. Большая часть этих полей определяется контент-шаблоном документа. Документ DJEM может ссылаться на один или несколько других документов — если в каком-либо поле документа А содержится идентификатор документа B (содержимое системного поля _id документа B), то мы говорим, что документ А ссылается на документ B. Можно также уточнить поле, посредством которого один документ ссылается на другой — например, если идентификатор документа B содержится в поле film документа А, то можно сказать, что документ А ссылается на документ B через поле film.

Ссылаться на другие документы можно через любое пользовательское поле документа. При этом каждый документ DJEM содержит три специализированных системных поля, которые вы можете использовать для ссылок на другие документы DJEM — это _link1, _link2, _link3. Каждое из этих полей может содержать одно числовое значение. На каждом из этих полей стоит индексация средствами базы данных, что делает выборки по этим полям наиболее эффективными. Ссылаться на другие документы можно и через другие поля, не обязательно использовать именно эти, но использование для связей данных системных полей даст вам наибольший выигрыш по скорости. Другим способом будет ссылка через одно из «быстрых» полей («быстрыми» полями в DJEMе называются пользовательские поля, на которые наложен DJEM-индекс).

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

Для описания механизма связи воспользуемся конкретным примером. Например, мы делаем сайт любителей кино. У нас есть папка с фильмами и папка с актерами. Мы хотим создать сущность «роль», которая описывала бы, какой актер в каком фильме играл какую роль. Документ типа «Роль» таким образом содержит две ссылки (мы в джеме обычно называем их «лапками») на другие документы — на конкретный фильм и на конкретного актера. В документе «Роль» могут содержаться и другие поля — например, гонорар актера за участие в этом фильме, имя персонажа в фильме и так далее, но главное — это лапки, ссылки на две разные сущности.

Наша задача — дать возможность быстро создавать и отслеживать связи между актерами и фильмами. В DJEMе для этого создано специальное интерфейсное решение под названием «Связи». Связанные документы показываются списком присоединенных документов под основным окном со списком документов в текущей папке. Например, на приведенном ниже скриншоте мы находимся в папке «Фильмы», а внизу, в интерфейсе связей, показаны все документы типа «Картинки», которые присоединены к выделенному курсором документу — фильму «Матрица»

Давайте попробуем создать связь — подразумевается, что у нас уже есть две папки, «Фильмы» и «Актеры», в которых лежат какие-нибудь документы. Для начала создадим папку, которая будет содержать документы типа «Роль». Создавать ее можно где угодно в DJEM. Если создать папку в подразделе с путем settings.links («Настройки» → «Связи»), то ее будет проще выбрать в интерфейсе добавления связей, но это не обязательно.

Для примера создадим папку «Роли» на одном уровне с нашими папками «Фильмы» и «Актеры». Создадим контент-шаблон для документа типа «Роль». Содержать он будет два поля для выбора документов, на которые наш документ ссылается — лучше всего для этой роли подходят селект-боксы, выпадающие списки. Например, выпадающий список со всеми фильмами с кодом _link1, и выпадающий список со всеми актерами с кодом _link2. Таким образом наш документ «Роль» ссылается на фильм посредством поля _link1, а на актера — посредством поля _link2

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

Поскольку раздел «Роли» мы создавали не в специальном разделе DJEM («Настройки» → «Связи»), то выбираем «Прямая связь», а не «Библиотека». Появится другой набор полей — «Номер раздела», «Имя связи» и «Код поля». В поле «Номер раздела» вы можете вбить идентификатор раздела, в котором содержатся наши документы-роли, или же выбрать нужный раздел в дереве DJEM, нажав кнопку «Выбрать». Поле «Имя связи» только для чтения, заполняется автоматически после выбора раздела с документами типа «Роль» и содержит название этого раздела. Имя связи будет потом отображаться в названии закладки со связями — на первом скриншоте имя связи — «Картинки». В поле «Код поля» вы вписываете код поля, через которые документы-роли связаны с документами из раздела, свойства которого мы сейчас редактируем («Фильмы»). Роли связаны с фильмами посредством поля _link1, поэтому в поле «Код поля» мы вписываем «_link1».

Заполнив два поля и описав таким образом связь, нажимаем кнопку «Добавить». Описанная связь добавляется в список связей для этого раздела.

Нажимаем кнопку OK, сохраняя настройки связей для данного раздела. Сразу после изменения свойств раздела новые связи не появятся, чтобы их увидеть — щелкните в любой другой раздел, потом снова вернитесь на папку «Фильмы». Вуаля! Мы видим, что панель с документами разделилась на две половины. Сверху отображаются документы из папки «Фильмы», снизу — документы-связи, документы типа «Роль», которые присоединены к тому документы из папки «Фильмы», на котором стоит курсор.

Со документами-связями работать можно точно так же, как и с обычными документами DJEM. Если мы встанем на фильм «Матрица» из верхней панели документов, после чего щелкнем мышкой на нижней панели и выберем «Добавить документ», то откроется стандартный диалог добавления документа DJEM. Единственное важное отличие — поле, через которое документ-связь ссылается на документы из нашей папки, будет уже заполнено идентификатором документа, на который мы установили курсор. То есть, если мы стоим на документе «Матрица» с кодом 22, и добавляем документ «Роль» (который ссылается на фильмы через поле _link1), то поле _link1 нашего создаваемого документа уже будет содержать 22. То есть, в выпадающем списке с фильмами уже будет выбран нужный фильм.

Если мы повторим ту же процедуру для раздела «Актеры» — добавим отображение связи «Роль», изменив лишь код поля на _link2 (поскольку «Роль» ссылается на актера через поле _link2), то получим отображение тех же ролей, но уже отфильтрованных по актеру. И точно так же можем добавить роль для актрисы Керри-Энн Мосс — добавляем документ в связях, выбираем фильм «Матрица». Таким образом роли можно просматривать как со стороны фильмов, так и со стороны актеров — это одни и те же документы, изменяется только выборка.

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

Отправимся в раздел «Связи» — он находится в папке «Настройки». Щелкнем правой кнопкой на списке документов справа и выберем «Добавить документ». Появится диалог создания связи.

Поле «Имя связи» задает название для раздела, который будет создан в разделе «Связи» и который будет содержать наши документы-связи. Введем «Фотографии». Большое окно-список ниже описывает все поля, посредством которых документы в нашем разделе ссылаются на другие документы.

Нажмем кнопку «Добавить», будет добавлено новое поле. Выделим его курсором. Справа от окна списка находятся три свойства для каждого из полей связывания. «Название» — это описание тех документов, на которые мы ссылаемся. В нашем случае «Галерея» — наши фотографии будут ссылаться на фотогалерею, к которой принадлежат. Далее идет «Код поля для связывания» — это код поля, посредством которого мы будем связаны с другими документами. Введем здесь _link1. Заполненный вариант диалога создания связи показан на скриншоте.

Нажимаем на кнопку ОК. Мы видим, что система создала в разделе «Связи» новый раздел «Фотографии». Вы можете редактировать его свойства точно так же, как и свойства любого раздела в DJEM — можете присваивать контент-щаблон для создаваемых документов, их путь, дизайн-шаблон и так далее. ВАЖНО: Если вы щелкнете правой кнопкой мышки на разделе и выберете «Свойства», то получите обычные свойства раздела. Если же вы выберете в дереве раздел «Связи», и справа в окне документов дважды щелкнете на нашем разделе, то откроется диалог редактирования свойств связи — тот, который мы только что заполняли.

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

Теперь мы можем присоединять созданный нами раздел-связь к другим разделам. Например, создадим раздел «Фотогалереи». В его свойствах заходим в закладку «Связи». В выпадающем списке «Имя связи» будет содержаться наш раздел — «Фотографии». Выбираем его. В выпадающем списке «Точка привязывания» появляется список полей, посредством которых документы из раздела «Фотографии» привязываются к другим документам. Выбираем «Галерея». Нажимаем «Добавить». Нажимаем «ОК».

Все! Мы привязали раздел «Фотографии» к разделу «Фотогалереи». Теперь, установив курсор на фотогалерею, мы получаем список всех фотографий, которые к данной фотогалерее присоединены. Можем добавить фотографию, щелкнув правой кнопкой на списке фотографий и выбрав «Добавить документ». Можем удалять документы.

С точки зрения DJEM-скрипта выборка присоединенных документов тривиальна — foreach, где в поле path указывается раздел с документами-связями, а условие where содержит выборку по полю связывания. Например, чтобы в дизайн-шаблоне галереи вывести фотографии, которые лежат в разделе settings.links.photos, мы можем написать <foreach path=«settings.links.photos.$» where="_link1=1335">.

Посмотрите видео-ролик

Поиск по документации

© 2005 — 2024 DJEM Solutions, все права защищены. | Дизайн — Студия Fractalla