WikiPatterns

Расширение WikiPatterns позволяет создавать коллекции однотипных страниц, имеющих одинаковую структуру данных и визуальный дизайн. Данные со всех страниц, построенных по одному шаблону, могут быть агрегированы в списки.
Для разработки дизайна как отдельной страницы, так и элементов списка используются шаблоны SMARTY.

Примером страниц, использующих WikiPatterns, является список персоналий. На личной странице каждой персоналии в едином оформлении указаны: ФИО, фото, краткая биография, список трудов и т.п. Одновременно с этим на любой странице сайта можно разместить список, содержащий одни только фамилии – ссылки на личные страницы с полной информацией.

Инсталляция

Шаг 1

В образовавшейся после инсталляции расширения директории sites/[mysite.ru]/data/WikiPatterns/templates, создайте папку файлов шаблона, содержащую следующие файлы:

  • [Person] имя шаблона
    • lang для мультиязычных сайтов
      • en.php
      • ru.php
    • install.xml структура данных
    • one.txt SMARTY-шаблон для отдельной страницы
    • sum.txt SMARTY-шаблон для элементов списка

Шаг 2

Опишите структуру данных в файле install.xml. обязательно!!!
Опишите дизайн элементов в SMARTY-шаблонах one.txt и sum.txt это можно сделать позднее Подробнее см. ниже.

Шаг 3

Проинсталлируйте шаблон Person на странице административной зоны сайта /Администрирование/Сервисы/WikiPatterns.
РИС

Шаг 4

Разместите на сайте экшены:

  • templatesum для агрегирования страниц в списки
  • createpage для создания новых страниц с использованием шаблона

{{templatesum name="Person" for="/Персоналии" sortby="name" sortorder="ASC" max="10" collectall=1}}
{{createpage pattern="Person"}}

Новые страницы, построенные по шаблону, будут добавляться в кластер страницы, на которой размещен экшн {{createpage}}, т.е. она станет для них родительской. Экшн {{templatesum}} можно размещать на любой странице, в том числе в PageBlocks, однако, если нет особых возражений, рекомендуется прописывать оба экшена на одной странице.


Структура данных считывается из файла install.xml один раз в момент инсталляции шаблона. Если впоследствии потребуется внести изменения в структуру данных, придется переинсталлировать шаблон. При этом введенные данные будут утеряны.

install.xml

Образец файла install.xml
<template>
<name>Person</name>
<field>
<name>name</name>
<description>ФИО</description>
<type>text</type>
</field>
<field>
<name>birthdate</name>
<description>Дата рожд.</description>
<type>date</type>
<default>2000–12–31</default>
</field>
<field>
<name>biо</name>
<description>Биография</description>
<type>wikieditor rows="10"</type>
</field>
</template>

Имя шаблона <name>Person</name> должно соответствовать имени папки шаблона.
Возможные типы данных
<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>

NB для tselect и tmultselect отображается field, возвращается key 
NB imagehttploader - текстовое поле – если ввести адрес удаленной картинки, закачивает её на сервер и сохраняет как файл, заменяя результат.

one.txt и sum.txt

Простейший one.txt

==={$data.name}==
<#<img src="{$rooturl}sites/socmodel.com/files/person_foto/{$data.img}"/>#>
{$data.desc}

Простейший sum.txt агрегатор
{foreach from=$pages item=page}
  * ((/{$page.supertag} {$page.data.name})) - {$page.data.desc}
{/foreach}

SMARTY-переменные, доступные из шаблонов:
  • {$data.[имя_поля]} – данные страницы в one.txt
  • {$page.data.[имя_поля]} – данные страницы в sum.txt
  • {$page.id} – id страницы
  • {$page.tag} – адрес страницы от корня
  • {$page.supertag} – адрес страницы транслитом
  • {$page.pretag} – адрес родительской страницы от корня
  • {$page.prename} – имя родительской страницы
  • {$page.time} – время сохранения страницы Y-m-d h:i:s

  • {$themeurl} – адрес темы
  • {$rooturl} – адрес корня инсталляции QS 
  • {$today} – сегодняшний день, в формате Y-m-d
  • {$yesterday} – вчерашний день, в формате Y-m-d
  • {$isadmin} – является ли пользователь администратором
  • {$curUserId} – если установлен сервис AdvOntology ID пользователя в базе AdvOntology, для незарегистрированного пользователя curUserId = 0.

NB Обработка картинок производится QS автоматически, и перед картинками не надо ставить адрес темы {$themeurl} , но в других случаях это может быть востребовано.

{{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 – показывать все страницы (в том числе скрытые)