Это старая версия Справка/Разработчик/Дизайн/WikiPatterns за 2012-11-22 23:20:11..
WikiPatterns
Расширение WikiPatterns позволяет создавать коллекции однотипных страниц, имеющих одинаковую структуру данных и визуальный дизайн. Данные со всех страниц, построенных по одному шаблону, могут быть агрегированы в списки.
Для разработки дизайна как отдельной страницы, так и элементов списка используются шаблоны SMARTY.
Для разработки дизайна как отдельной страницы, так и элементов списка используются шаблоны SMARTY.
Примером страниц, использующих WikiPatterns, является список персоналий. На личной странице каждой персоналии в едином оформлении указаны: ФИО, фото, краткая биография, список трудов и т.п. Одновременно с этим на любой странице сайта можно разместить список, содержащий одни только фамилии – ссылки на личные страницы с полной информацией.
Инсталляция
В качестве примера рассмотрим список персоналий Person.Шаг 1
Проинсталлируйте расширение WikiPatterns.Шаг 2
В образовавшейся после инсталляции расширения директории sites/[mysite.ru]/data/WikiPatterns/templates, создайте папку файлов шаблона, содержащую следующие файлы:- [Person] имя шаблона
- lang для мультиязычных сайтов
- en.php
- ru.php
- install.xml структура данных
- one.txt SMARTY-шаблон для отдельной страницы
- sum.txt SMARTY-шаблон для элементов списка
- lang для мультиязычных сайтов
Шаг 3
Опишите структуру данных в файле install.xml. обязательно!!!Опишите дизайн элементов в SMARTY-шаблонах one.txt и sum.txt это можно сделать позднее Подробнее см. ниже.
Шаг 4
Проинсталлируйте шаблон Person на странице административной зоны сайта /Администрирование/Сервисы/WikiPatterns.РИС
Шаг 5
Разместите на сайте экшены- для агрегирования страниц в списки
- для создания новых страниц с использованием шаблона
{{templatesum name="Person" for="/Персоналии" sortby="name" sortorder="ASC" max="10" collectall=1}}
{{createpage pattern="Person"}}
{{createpage pattern="Person"}}
Новые страницы, построенные по шаблону, будут добавляться в кластер страницы, на которой размещен экшн {{createpage}}, т.е. она станет для них родительской. Экшн {{templatesum}} можно размещать на любой странице, в том числе в PageBlocks, однако, если нет особых возражений, рекомендуется прописывать оба экшена на одной странице.
Структура данных считывается из файла install.xml один раз в момент инсталляции шаблона. Если впоследствии потребуется внести изменения в структуру данных, придется переинсталлировать шаблон. При этом введенные данные будут утеряны.
install.xml
Образец файла install.xml
Имя шаблона <name>Person</name> должно соответствовать имени папки шаблона.
<template>
<name>Person</name>
<field>
<field>
<field>
</template><field>
<name>name</name>
<description>ФИО</description>
<type>text</type>
</field><description>ФИО</description>
<type>text</type>
<field>
<name>birthdate</name>
<description>Дата рожд.</description>
<type>date</type>
<default>2000–12–31</default>
</field><description>Дата рожд.</description>
<type>date</type>
<default>2000–12–31</default>
<field>
<name>biо</name>
<description>Биография</description>
<type>wikieditor rows="10"</type>
</field><description>Биография</description>
<type>wikieditor rows="10"</type>
Имя шаблона <name>Person</name> должно соответствовать имени папки шаблона.
Возможные типы данных
NB для tselect и tmultselect отображается field, возвращается key
NB imagehttploader - текстовое поле – если ввести адрес удаленной картинки, закачивает её на сервер и сохраняет как файл, заменяя результат.
<type>text</type>
<type>textarea rows="6"</type>
<type>wikieditor rows="6"</type>
<type>date</type>
<type>datetime</type>
<type>int low="1" high="5"</type>
<type>select list="статья:монография:тезисы"</type>
<type>selectint from="1" to="5"</type>
<type>tselect table="advontotypes_wpPerson" field="name" key="id"</type>
<type>tmultselect table="advontotypes_wpPerson" field="name" key="id"</type>
<type>checkbox</type> // [0|1]
<type>selectradio list="Мск:СПб:регионы [layout = horizontal]</type>
???<type>imagehttploader</type>
<type>textarea rows="6"</type>
<type>wikieditor rows="6"</type>
<type>date</type>
<type>datetime</type>
<type>int low="1" high="5"</type>
<type>select list="статья:монография:тезисы"</type>
<type>selectint from="1" to="5"</type>
<type>tselect table="advontotypes_wpPerson" field="name" key="id"</type>
<type>tmultselect table="advontotypes_wpPerson" field="name" key="id"</type>
<type>checkbox</type> // [0|1]
<type>selectradio list="Мск:СПб:регионы [layout = horizontal]</type>
???<type>imagehttploader</type>
NB для tselect и tmultselect отображается field, возвращается key
NB imagehttploader - текстовое поле – если ввести адрес удаленной картинки, закачивает её на сервер и сохраняет как файл, заменяя результат.
one.txt
==={$data.name}==
<#<img src="{$system.rooturl}sites/socmodel.com/files/person_foto/{$data.img}"/>#>
{$data.desc}
- {$data.[имя_поля]} – данные страницы
- {$system.rooturl} – адрес корня инсталляции QS.
- {$system.today} – сегодняшний день, в формате Y-m-d
- {$system.yesterday} – вчерашний день, в формате Y-m-d
- {$system.isadmin} – является ли пользователь администратором
- {$system.curUserId} – если установлен сервис AdvOntology ID пользователя в базе AdvOntology, для незарегистрированного пользователя curUserId = 0.
sum.txt агрегатор
{foreach from=$pages item=page}
* **<#<a href="{$system.rooturl}{$page.tag}">{$page.data.name}</a>#>** ---{$page.data.docdesc}
{/foreach}
- {$page.data.[имя_поля]} – данные страницы
{{templatesum}}
{{templatesum name="Person" for="/Главная/Персоналии" sortby="name" sortorder="ASC" max="10" modifier="small"}}
- первый параметр – имя шаблона (все равно, как называется)
- for – для какой страницы
- sortby – по какому полю сортировать [tag|_updateTime|поле из шаблона]
- sortorder – ASC/DESC (DESC по умолчанию)
- max – максимальное кол-во результатов на странице
- modifier – использовать другой файл для при агрегировании, вида sum.[modifier].txt, например sum.small.txt
- collectall – 0/1 (0 по умолчанию) использовать только прямые подстраницы (0) или все подстраницы (1)
- hidepagenumbers – 0/1 (0 по умолчанию) показывать ссылки на следующие N элементов, или нет
- filter – типа IsHot1:1::Approved:2
- pagenumstyle – prevnext | list (cтиль отображения номеров страниц)
- saverequest – сохранять параметры из строки запроса (пример: "view:tag")
- showpager – bottom|top|topbottom
- viewall – показывать все страницы (в том числе скрытые)