|
Загрузка процессора: 114% |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
6. Динамические модулиВ главе описан принцип работы динамических модулей, их спутников - меню, разобраны основные настройки модуля в Config. Динамические модули – основная ценность конструктора. Если статические модули помогают в вёрстке сайта (разбиении на удобные HTML-фрагменты), то благодаря динамическим модулям, сайт приобретает функциональность, на программирование которой уходит бОльшая часть времени у web-мастеров. Начиная с гостевых книг и форм обратной связи, c которых начинаются уроки «Программирования на PHP», и, заканчивая сложными разделами сайта типа форума, - всё это реализуется на базе динамических модулей без единой строчки кода. Все базовые типы страниц заложены в наборе динамических модулей, необходимо лишь грамотно их использовать, программировать не придётся! Работа всех динамических модулей исходит из единой концепции и принципиально не различается друг от друга, все имеют схожий набор параметров и свойств. (Теоретически достаточно 1-2 динамических модулей ПЛАРСОНа для создания полного разнообразия Интернет-страниц). Несмотря на многообразие страниц, подобие динамических модулей обуславливается тем, что их можно подчинить одному правилу – закону. Если следовать ранее озвученной метафоре, этот закон – четвёртый кит, на котором стоит конструктор ПЛАРСОН. Выявленная закономерность позволяет создавать самые различные страницы на базе одного универсального модуля (динамического модуля). Это принципиальное отличие ПЛАРСОНа от других горе-конструкторов, в которых модули не знают о существовании такого закона, и для каждого варианта страниц существует свой блок управления. Для увеличения универсальности и гибкости в обычных (наивных) CMS разработчики плодят множество т.н. модулей (плагинов, расширений), с помощью которых пытаются охватить все мыслимые ситуации при создании сайта, тем самым загромождают систему управления, делая её нечитаемой. В ПЛАРСОНе один динамический модуль может служить «новостями», «статьями», «фотоальбомом» и даже каталогом товаров. Благодаря этому система ПЛАРСОН компакта и по настоящему универсальна. Вам достаточно понять принцип работы одного динамического модуля, что бы знать, как работает весь сайт. В чем же схожесть страниц? Рассмотрим на примере. На рис. 1 схематично изображен раздел новостей на сайте: слева мы видим список заголовков, если кликнуть на любой из заголовков открывается страница (справа) с развернутым текстом про новость. На рис. 2 мы видим типичный фотоальбом – мозаика миниатюр фотографий, при выборе любой из них открывается страница с полноразмерной фотографией. Фотоальбом и новости – два разных раздела на сайте имеют, если приглядеться, общие черты. 6.1 Линейные спискиИ там и там (рис.1 и рис. 2) присутствует список элементов с кратким содержанием (слева) или полное содержание одного выбранного элемента (справа). Для новостей такими элементами являются заголовки новостей, для фотографий миниатюры. Заголовки новостей и миниатюры это производные двух различных типов данных, - новостей и фотографий. Одна новость может обладать набором атрибутов, как то: заголовок, текст, дата, автор, ссылка на первоисточник, иллюстрация и пр. Одна фотография может обладать также набором атрибутов: собственно файл изображения, название фото, описание, категория, уменьшенная миниатюра, категория фото и пр. Набор фотографий или новостей образуют список данных соответствующего типа. Таким образом, на страницах сайта мы имеем дело с отображением данных различных линейных списков. Линейных списков, потому что элементы следуют друг за другом (список также может быть организован в виде дерева, например). Определение линейного списка можно прочитать в википедии.
Рис. 1. Список новостей и страница выбранной новости.
Рис. 2. Страница с миниатюрами фотографий (preview) и страница с полноразмерной фотографией. В рассмотренных двух примерах отображение линейных списков реализовано одинаково – в виде страницы списка элементов с «кратким содержанием» и страниц с развернутой информации об элементе. На развернутую страницу элемента списка (фото, новости) попадаем по ссылке с краткого содержания. Для реализации списка новостей потребуется по крайней мере три шаблона: шаблон страницы списка News.List, шаблон краткого содержания – элемента в списке News.Item и шаблон конечной страницы News.Page. Для фотоальбома соответственно: Photo.List, Photo.Item, Photo.Page. Разница между спиком новостей и миниатюр фотоальбома состоит лишь в том, что элементы News.Item располагаются на странице в одну колонку, а Photo.Item – в три колонки. Других различий – нет! Мы нашли общий знаменатель между страницей фотоальбома и страницей новостей, в обоих случаях выводится список неких линейных данных, вид страницы зависит лишь от дизайна (кол-во колонок) и типа данных. Теперь, имея за плечами небольшую теоретическую подготовку, мы можем взглянуть на сайты в Интернете другими глазами, и увидеть, что на страницах в той или иной мере реализуются отображения списков. Вопрос что мы выделим в список, как его назовём, и какие атрибуты будут присутствовать у элементов списка. Например, страница сайта знакомств. В данном случае список - это список персональных данных пользователей с атрибутами: имя, возраст, цвет глаз, пол и пр. 6.2 Вложенные спискиКонечно, не всё можно реализовать в виде простых линейных списков. Если вернуться к примеру с анкетами, и кликнуть на некоторую из списка, то в раскрывшемся окне мы увидим кроме подробного описания пользователя его несколько фото, возможно, отзывы других участников. Фотографии в анкете – не что иное, как тот же список, только прикрепленный к анкетным данным. Список фотографий является вложенным по отношению к списку анкет. С помощью комбинации вложенных списков можно реализовать самые широкие возможности: папки фотографий, каталог товаров, форум и пр. Любую сложную иерархию данных можно разложить на простые вложенные друг в друга списки, так же как все наши папки и файлы на компьютере хранятся внутри иерархии папок. В этом подходе есть одно важное ограничение, мы можем дойти до нижнего уровня, только последовательно пройдя через родительские списки. Например, у вас фильмотека, организованная по годам, и вы разложили свои фильмы по папкам 1998, 1999, 2000, и т.д. Вы легко находите все фильмы одного года открыв соответствующую директорию на диске, но вы не можете выбрать все фильмы одного режиссера. Для систематизации по режиссеру потребуется создать соответствующие папки с фильмами одного режиссера (независимо от года). В Интернете зачастую требуется поиск/выбор по перекрестным параметрам, и такое ограничение болезненно сказывается на удобстве страниц. В ПЛАРСОНе есть способы позволяющие обойти ограничение (ведется их доработка), но при организации вложенных списков важно помнить об этом принципе: вложенные списки доступны через родительские. 6.3 Связь динамических модулей с материаламиДинамические модули выводят на страницу сайта данные линейных списков, а где хранятся эти данные? Каждому типу модуля соответствует свой тип данных в материалах. Например, для модуля Photo это Фотографии. Для разделения вывода одинаковых модулей (фотографии сотрудников, фотографии лаборатории) для каждого типа существуют подшивки материалов. Модуль выводит данные одной указанной для него подшивки материалов. На рис. 3 показаны свойства динамического модуля и выбранная для него подшивка. Всегда можно переключить вывод модуля с одной подшивки материалов на другую. В таблице 1 приведено соответствие динамических модулей и типов материалов.
Рис. 3. Выбор подшивки материалов для динамических модулей.
Таблица 1. Соответствие динамических модулей и отображаемых ими типов данных в «Материалах». Почему динамических модулей так много, если все они работают по одному принципу? Набор различных модулей сделан для удобства, в зависимости от назначения они имеют свои «заточенные» под конкретное назначение свойства по умолчанию. Например, для Goods поле ##Name## - наименование, а для News – заголовок. Осмысленные названия модулей помогают в работе над сайтом, абстракция хороша, но до разумного предела. Тем не менее, вам ничего не мешает хранить товары в «новостях», а фотографии в «товарах». Обычно данные хранятся в соответствующих им по смыслу типу материалах, но нельзя забывать, что обозначенные в таблице 1 типы остаются абстракцией, и возможно ваши товары прячутся в «статьях». Кроме разумного разделения модулей по типам данных существуют ещё специфические задачи, которые слегка отличаются от простого вывода списка. Например, для «Гостевой» кроме вывода списка требуется ещё функция добавления комментария, поэтому для этих целей существует специальный модуль «Гостевая». Об особенностях различных модулей читайте в разделе Описание динамических модулей. 6.4 Шаблоны динамических модулейШаблоны динамических модулей имеют общие черты с шаблонами статических модулей, это разделы 1. Шаблон, 2. Layout, 3. Дизайн, 4. HTML. Поскольку для работы динамического модуля редко достаточного одного html-шаблона, добавляется раздел «Дополнительные модули». Модуль Photo включает шаблоны Photo.List, Photo.Item, Photo.Page и Config. Суффиксы List, Item и Page выбраны не случайно, это типовое обозначение для шаблонов списка данных (.List), элемента в списке (.Item) и подробной страницы элемента (.Page). Большинству динамических модулей требуются эти шаблоны. «Config» не отображается на странице редактирования модуля Photo, но его свойства можно посмотреть, перейдя по соответствующей ссылке в иерархии модуля Photo. В HTML-коде динамических модулей содержаться уже знакомые placeholder’ы – места подстановки свойств из раздела 3. Дизайн, а также специфические имена типа ##Items##, ##Pages##, ##Name## и др. Placeholder - «заполнитель» (текстовый или графический элемент электронного шаблона страницы, заменяемый реальным элементом). Общее правило для таких названий – первая заглавная буква. Набор доступных placeholder’ов варьируется от модуля к модулю, но есть общие имена. Placeholder’ы динамических модулей делятся на две группы –
Рассмотрим группу placeholder’ов для навигации и организации вывода:
Список основных placeholder’ов для вывода атрибутов данных:
Список доступных placeholder’ов для вывода данных каждого из динамических модулей читайте в подробном описании модуля. 6.5 Config«Config» – вспомогательный модуль/шаблон, в котором содержаться дополнительные настройки необходимые для работы динамического модуля. Эти настройки не связаны напрямую с дизайном, поэтому вынесены отдельно. Из стандартных настроек это – количество колонок при выводе списком, кол-во элементов в списке и др. Список параметров показан на рис. 4. В Config перечислены все атрибуты используемого для этого модуля списка данных. Атрибуты – это поля, которые отображаются в форме Материалов. Можно редактировать название полей, неиспользуемые поля оставьте пустыми, тогда они не отображаются в материалах (см. рис. 5). Название полей по умолчанию читайте слева от поля. Справа от поля написано имя как оно значится в БД MySQL. Это информация предназначена для внутреннего использования, в большинстве случаев не требуется для разработки сайта. Для названия полей в Config существует несколько правил. Для названий картинок можно использовать указание размеров в виде «Большая картинка 400x300» (x – латинская буква икс). Для цифровых значений полей типа цены можно указывать формат данных в стиле языка C – «Розница {%5d}». %5d – это формат для вывода целого числа без запятой от 1 до 5 знаков. Если данные содержат картинки, то можно загрузить картинки по умолчанию, они будут выводиться в случае, если запись не содержит картинки. Почти для каждого модуля в Config предусмотрена настройка сортировки, вы можете выбрать сортировку по любому из доступных полей ваших данных. По умолчанию сортировка производится в порядке добавления данных (последний - сверху).
Рис. 4. Редактирование модуля "Config".
Рис. 5. Форма добавление нового товара, поля называются в соответствие с Config данного модуля на рис. 3. 6.6 Меню списковПри создании раздела новостей или фотографий на сайте вы добавляете на страницу (/news или /photo) соответствующий динамический модуль. Для конструктора это одна страница работающая в двух ипостасях – состояние списка и состояние выбранного элемента. Но со стороны пользователя это выглядит как множество страниц, ведь переходя по клику со списка новостей, он попадает каждый раз на «новую» страницу новости/фотографии (мы знаем, что страница не новая, а та же самая, только отличается вывод). Разработчику следует помнить, что поскольку для ПЛАРСОНа это «одна страница», то она наследует все содержащиеся на ней модули, как на странице списка .List, так и на странице выбранного элемента .Page. Динамический модуль в зависимости от URL сайта отображает либо шаблон .List либо шаблон .Page и не более того. Иногда требуется, что бы перейдя по ссылке со страницы списка некоторых данных, мы попадали на совершенно другую по дизайну страницу. Например, на главной странице мы размещаем несколько блоков «Последние новости», «Разделы каталога», «Обсуждения на форуме» и т.п. При клике на список мы должны переходить с главной страницы на страницу, предназначенную этому разделу; ни новость, ни раздел, не должны раскрываться на самой главной странице. Для организации таких переходов приходят на помощь меню списков. Модули меню легко распознать по суффиксу .Menu, например, для модуля List меню будет List.Menu. Аналогично для других модулей. Модуль меню News.Menu отличается от своего старшего брата только отсутствием дополнительного шаблона .Page, просто потому, что он не нужен. Задача этого модуля только сгенерировать список со ссылками ##Href## на нужную страницу, где находится сам модуль News. Адрес этой страницы задается в специальном значении qs_Page раздела Config модуля меню (см. рис. 5). Рис. 5. Config модуля меню. Комбинируя динамические модули и их спутники – меню, можно достичь очень больших возможностей. Модули меню так же поддерживают вложенность, т.е. в один модуль меню можно вложить другой модуль меню. 6.7 Вывод в несколько колонокВ Config динамического модуля содержится важный параметр column-count, который отвечает за количество колонок при выводе списком. Самый простой вариант это column-count=1, тогда модуль формирует одну колонку и подставляет в заполнитель ##Items## шаблона .List простую последовательность шаблонов .Item. В случае нескольких колонок, программа обрамляет перед вставкой в ##Items## шаблоны .Item тегами таблицы <td></td> и генерирует строки. В итоге в случае двух колонок получаем:
Чтобы страница сформировалась корректно, нужно заполнитель ##Items## обрамить в теги <table>##Items##</table>. Когда мы возвращаемся к выводу списка одной колонкой, лишние теги вокруг ##Items## следует убрать. Важно! Теги <tr>, <td> - генерируются программой модуля и на их вывод нельзя повлиять. Если вы желаете задать им дополнительные свойства (выравнивание, размер) воспользуйтесь средствами CSS. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Copyright © PLARSON.RU, 2004-2012. Москва, 123007, 4-я Магистральная улица, дом 5, строение 1, 4 этаж. тел.: (495) 508-20-58, 51-888-22
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||