Intellect Board — cистема управления сайтом

Построение сайта на основе форума

Intellect Board — cистема управления сайтом »   Обсуждение Intellect Board 3.x »   О парсере в 3.x
RSS

О парсере в 3.x

Понемногу начинаю выкладывать документацию

Текущий рейтинг темы: Нет
Выводить сообщения

<<Назад  Вперед>>Модераторы: aerograf, wsxПечать
 
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3299
Рейтинг пользователя: 70


Ссылка


Дата регистрации на форуме:
29 сен. 2001
Общие принципы парсинга в Intellect Board 3 (он же IntCMS):

В версии 3.x данные и их представление в HTML разделены не только статически (т.е. разнесены в разные файлы), но и динамически (т.е. по времени с точки зрения выполнения скрипта). Т.е. работа скрипта организована следующим образом: сначала производится анализ URL и выполнение запрошенного действия, а уже потом, когда действие закончено полностью, вывод результатов.

При этом в процессе выполнения скрипта формируется так называемый массив выводимых элементов. (Он расположен в классе Application и называется output_buffer, занесение данных в него производится с помощью метода
Application::output). Элементы данного массива называются выводимыми элементами, и могут быть как простыми значениями, так и тоже массивами. При добавлении каждого выводимого элемента в массив вывода ему дается
уникальное имя, которое затем используется для обращения к этому элементу.

Использование такого подхода позволило не только лучше организовать работу скрипта, но и сделать возможным написание различных обработчиков этого массива (для краткости называемых просто парсерами), что дает возможность во-первых, использование одного и того же кода в различных ситуациях (например, для отображения в обычном режиме, версии для печати и в RSS), а во-вторых, в принципе становится возможным написание парсеров, которые будут использовать стили от других движков.

Управляющие конструкции стандартного парсера IntCMS (условно обозначаемого basic):

В конструкциях, применяемых в стандартном парсере, используется такое понятие, как путь к выводимым данным.
Принципы построения пути следующие: компоненты разделяются символом косой черты (/). Массив буфера выходных переменных считается корнем. Имя, присвоенное выводимому элементу при вызове $theapp::output считается первым уровнем. В том случае, если выводимый элемент сам является массивом, то вторым уровнем пути
считаются ключи массива, а третьим и далее — вложенные массивы, если таковые имеются. Ключи могут быть как строками, так и числовыми индексами массива.

Пути могут быть абсолютными (начинаются с /) и относительными (начинаются с имени элемента). Относительные пути дополняются до абсолютных путем приписывания текущего пути по умолчанию. В начале парсинга таким путем
является путь "/", но в дальнейшем он может быть изменен (на данный момент его меняют две конструкции: for each и do width).

Глобальные конструкции:

<!--##BEGIN#--> — все, что находится до этой конструкции, парсером игнорируется. Данная конструкция может использоваться для указания DOCTYPE, заголовочных тегов и ссылок на CSS.

<!--##END#--> — все, что находится после этой конструкции, парсером игнорируется. Данная конструкция предназначена для закрывающих тегов HTML.

<!--##COPYRIGHT#--> — указывает место, предназначенное для вывода сообщения об авторских правах. Если данный тег отсутствует, сообщение будет вставлено либо перед тегом </body>, либо перед тегом </html>, либо в конец результатов обработки скрипта.

<!--##CSS#--> — вставка CSS-файла в соответствии со стилем выводимой страницы.

<!--##DEBUG#--> — указывает место, предназначенное для вывода отладочной информации

Парные конструкции:

<!--if[путь]--> — если, значение, указанное в пути, не равно FALSE (сравнение производится с возможностью приведения типов, т.е. через оператор ==), то вложненный блок будет обработан, иначе — пропущен.

<!--for each[путь]--> — вставка вложенного блока для каждого элемента массива, указанного в пути. При этом на момент обработки вложенного блока текущем путем по умолчанию становится путь к обрабатываемому элементу массива. Если выводимым элементом является значение (т.е. обрабатываемы массив не содержит подмассивов),
то для обращения к нему следует использовать пустой путь. После обработки всех элементов массива путь по умолчанию будет возвраещен на тот, который был установлен до блока for each.

<!--if def[путь]--> — если значение, указанное в пути, определено (т.е. в массиве вывода и его подмассивах в соответствии с указанным путем определены индексы), то вложненный блок будет обработан, иначе — пропущен.

<!--if ndef[путь]--> — если значение, указанное в пути, НЕ определено, то вложненный блок будет обработан, иначе — пропущен (обратное действие по отношению к if def).

<!--do with[путь]--> — изменяет путь по умолчанию на указанный в пределах вложенного блока.

<!--no parse[]--> — часть кода, помещенная в эту конструкцию, не будет обработана парсером.

Формат закрывающих конструкции: <!--end if-->, <!--end foreach-->, <!--end ifdef-->, <!--end ifndef-->, <!--end dowith-->, <!--end noparse-->.

ВАЖНО: конструкции являются регистрозависимыми, так же не допускается добавления лишних пробелов!

Одиночные конструкции:

##value[путь]# — вывод значения по указанному пути

##msg[имя_константы]# — вывод содержимого языковой константы

##include[имя_файла]# — включение файла с укзаанным именем. Файл должен находиться либо в каталоге стиля, либо в подкаталоге template парсера. Допускается указание относительного пути к подкаталогам.

##include_main[]# — включение файла, отвечающего за вывод результатов запрошенного действия. Имя этого файла возвращается процедурой process модуля-обработчика действия. (По умолчанию модуль-обработчик вызывает процедуру, имя которой совпадает с именем запрошенного действия.) Если модуль-обработчик не вернул ничего (пустую строку или значение false), то по умолчанию в качестве имени файла берется следующее: имя_модуля/название_действия.htm
Файл должен находиться либо в каталоге стиля, либо в подкаталоге template парсера.

##links[путь]# — вывод списка ссылок, отформатированного с помощью тегов ul и li. Путь должен вести к массиву, содержащему подмассивы из двух элементов: элемент 0 содержит текст ссылки, элемент 1 — URL ссылки. URL может быть относительным или абсолютным, относительные URLы обрабатываются как человекочитаемые (приписывается index.php, если не используется mod_rewrite)

##textedit[путь]# — визуальный текстовый редактор (конкретный тип задается в настройках пользователя). В пути указывается выводимый элемент, из которого следует взять текст, отображаемый в редакторе. Название поля редактора будет соответствовать последнему элементу пути.

##redirect[путь]# — META-тег, обеспечивающий переход на другую страницу. Адресом страницы является значение элемента, указанного в пути.

##input[путь]# — поле ввода типа input text. В пути указывается выводимый элемент, из которого следует взять текст, отображаемый в поле ввода. Название поля будет соответствовать последнему элементу пути.

##textarea[путь]# — поле textarea. В пути указывается выводимый элемент, из которого следует взять текст, отображаемый в поле ввода. Название поля будет соответствовать последнему элементу пути.

##submit[константа,имя,всплывающая подсказка]# — вывод кнопки button с типом submit. Константа — название языковой константы, содержащей текст, отображаемый на кнопке, имя — имя кнопки (не обязательно), всплывающая подсказка — содержимое аттрибута title, который всплывает при наведении мыши.

##file[имя]# — поле ввода пути к загружаемому файлу (input file). Имя — имя поля файла.

##password[путь]# — поле ввода типа input password. В пути указывается выводимый элемент, из которого следует взять текст, отображаемый в поле ввода. Название поля будет соответствовать последнему элементу пути.

##radio[путь,значение1,значение2,...]# — переключаемые значения (radiobuttons). В пути указывается выводимый элемент, значение которого будет соответствовать значению выбранной кнопки. Название поля будет соответствовать последнему элементу пути. Значения могут быть числами или строками, не содержащими символов , и []. Для их подписи используются константы вида MSG_имя_значение1, где имя — последний элемент пути.

##select[путь,значение1,значение2,...]# — выпадающее меню (select). В пути указывается выводимый элемент, значение которого будет соответствовать выбранному значению выпадающего меню. Название поля будет соответствовать последнему элементу пути. Значения могут быть числами или строками, не содержащими символов , и []. Для подписей значений используются константы вида MSG_имя_значение1, где имя — последний элемент пути.

##radio_list[путь1,путь2]# — переключаемые значения (radiobuttons). В пути1 указывается выводимый элемент, значение которого будет соответствовать значению выбранной кнопки. Название поля будет соответствовать последнему элементу пути. Список значений и подписей находится в выводимом элементе, указанном в пути2 и должен представлять собой хеш-массив, где ключами хеша являются возможные значения переключателей, а значениями
хеша — подписи к переключателям.

##select_list[]# — выпадающее меню (select). В пути1 указывается выводимый элемент, значение которого будет соответствовать значению выбранного элемента выпадающего меню. Название поля будет соответствовать последнему элементу пути. Список значений и подписей находится в выводимом элементе, указанном в пути2 и должен представлять собой хеш-массив, где ключами хеша являются возможные значения переключателей, а значениями
хеша — подписи к переключателям.

##url[частичный_URL]# — преобразует указанный частичный URL в URL относительно корня сайта (т.е. добавляет в начало путь от корня до директории сайта, включая / в конце). Данная функция должна использоваться только при обращении к ресурсам, не обрабатываемым скриптами IntCMS (Java-скриптам, CSS, графическим файлам и т.п.),
при генерации адресов для материалов, генерируемых скриптом IntCMS, следует использовать конструкцию ##hurl[]#.

##hurl[частичный_URL]# — преобразует указанный частичный URL в человекочитаемый URL относительно корня сайта. Если используется mod_rewrite, то действие этой конструкции полностью аналогично ##url[]#, если mod_rewrite вылкючен, то еще добавляется в начало добавляется /index.php/.

##file[путь_к_данным_о_файле]# — генерирует URL для скачки файла, хранящегося в IntCMS (например, прикрепленный к сообщению файл). Путь к данным о файле должен указывать на массив со следующими ключами:
file_name — имя файла
file_key — ключ доступа для скачки файла
file_id — порядковый номер файла.
Оффтопик: На данный момент функция еще не реализована

---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно!
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3299
Рейтинг пользователя: 70


Ссылка


Дата регистрации на форуме:
29 сен. 2001
Вот так выглядит файл шаблона, определяющий вид IntCMS в целом: (это шаблон для АЦ).

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html><head>
<title>Центр администрирования сайта на основе Intellect CMS!</title>
<!--no parse[]-->
<link href="admin.css" type="text/css" rel="stylesheet"/>
<!--end noparse-->
<!--##CSS#-->
</head><body>
<div id="title">Система управления сайтом Intellect CMS</div>
<div id="menu"></div>
<div id="content">
##include_main[]#
</div>
<div id="bline"></div>
<div id="bottom"><address>Powered by IntCMS (IntB 3.x)</address></div>
</body></html>

---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно!
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3299
Рейтинг пользователя: 70


Ссылка


Дата регистрации на форуме:
29 сен. 2001
А вот так — файл шаблона, определяющего отображение результатов конкретного действия (в данном случае, вывода меню в АдминЦентре):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><link href="admin.css" type="text/css" rel="stylesheet" /></head>
<body><!--##BEGIN#-->
<h2>Выберите желаемое действие</h2>
<!--for each[ADMIN_MENU]-->
<div class="admin_item">
<!--if[2]-->
<a href="##value[1]#"><img alt="##value[0]#" src="##value[2]#"/></a>

<!--end if-->
<a href="##value[1]#">##value[0]#</a>
</div>
<!--end for-->
<!--##END#-->
</body></html>

---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно!
<<Назад  Вперед>>Модераторы: aerograf, wsxПечать
Intellect Board — cистема управления сайтом »   Обсуждение Intellect Board 3.x »   О парсере в 3.x
RSS

1 посетитель просмотрел эту тему за последние 10 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
Ограничение доступа
не отображаются разделы
Архив версий
Установка стиля на Intellect Board 2.22
Завершилась работа над новой версией 3.00

Самые активные 5 тем RSS


Время выполнения скрипта: 0.0325. Количество выполненных запросов: 17, время выполнения запросов 0.0000
Creative Commons License Rambler's Top100 Rambler's Top100 Рейтинг@Mail.ru Valid HTML 4.01 Transitional Valid CSS!