AdvTableViewer

Расширение AdvTableViewer позволяет визуализировать таблицы AdvOntology с помощью шаблонов SMARTY.
Внутрь SMARTY-шаблона может быть встроен конфигурируемый редактор для редактирования записи таблицы «на месте».

AdvTableViewer похож на WikiPaterns, но отличается тем, что здесь не создаются отдельные вики-страницы для элементов таблицы AdvOntology.

Инсталляция

Шаг 1

В образовавшейся после инсталляции расширения директории sites/[mysite.ru]/data/AdvTableViewer/templates создайте smarty-шаблон MyType.txt для визуализации списка элементов. При необходимости, создайте шаблон MyType.one.txt для визуализации изолированного элемента.

Шаг 2

В директории sites/[mysite.ru]/actions/ создайте файл экшна tvMyType.php. В нем будет безопасно подключен визуализатор advtableview.php.

Шаг 3

Разместите экшен {{tvMyType}} на странице сайта, указав в параметрах критерии отбора и сортировки элементов.

MyType.txt

Простейший smarty-шаблон MyType.txt с возможностью просмотра подробной информации об элементе и панелью редактирования (по умолчанию в формате HTML):
{foreach from=$list item=elem} 
    {$elem.id}: {$elem.data} <small>{$elem.id|tableviewone}</small> {$elem.id|tableviewedit}<br/>
{/foreach}
{$elem.id|tableviewadd}

В нем доступны smarty-переменные:
  • {$list} – массив отфильтрованных и отсортированных элементов MyType;
  • модификаторы:
    • {$elem.id|tableviewone:'подробнее'} – ссылка для перехода к подробной информации о текущем элементе;
    • {$elem.id|tableviewedit} – кнопки удаления и редактирования текущего элемента;
    • {$elem.id|tableviewadd} – кнопка добавления нового элемента.

В MyType.one.txt передается {$elem} – массив значений полей текущего элемента MyType:
ID: {$elem.id}<br />
ИМЯ: {$elem.data}<br />

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

tvmytype.php

Экшн tvmytype.php необходимо разместить в директории sites/[mysite.ru]/actions. Его функции:
  • безопасно подключить {{advtableview}} для типа MyType;
  • передать в переменной $fieldar список полей для редактора элемента таблицы MyType. Возможные типы полей см. на странице расширения WikiPatterns.
<?php
/* @var $this Wacko */
$srvUniViewer $this->srvFactory "AdvTableViewer" ); /* @var $srvUniViewer Service_AdvTableViewer */
$srvUniViewer->secViewerEnabled true;

if(
$this->IsAdmin()) {
    
$srvUniViewer->secEditorEnabled true;
    
$notparse '1';
    
$fieldar = array ( array ('ФИО','data','text'''),
            array (
'Адрес','address','text'''),
            array (
'Город','city','tselect table="advontotypes_DemoCity" field="data" key="id"'''),
            array (
'Статус','status','selectint from="1" to="5"'''),
              );
}

$type "DemoPerson";
$sortby "dateindex";
$sortorder "ASC";
include(
"extensions/AdvTableViewer/actions/advtableview.php");

$srvUniViewer->secViewerEnabled false;
$srvUniViewer->secEditorEnabled false;

?>

{{tvMyType}} – визуализация таблицы MyType

Экшн tvMyType позволяет определять в параметрах условия фильтрации, сортировки, паджинации и другие.
{{tvMyType type="DemoPerson" [sortby="data"] [sortorder="ASC"] [max="10"] [modifier="small"]}}
Name default Description
typeИмя таблицы
sortby_updateTimeПо какому полю сортировать
sortorderDESCПорядок сортировки ASC/DESC
maxМаксимальное количество элементов на странице
modifierИспользовать другой файл smarty-шаблона для визуализации вида MyType.[modifier].txt, например MyType.small.txt
hidepagenumbers0Скрывать ли ссылки на следующие N элементов 0/1
filterвида IsHot1:1: :Approved:2
pagenumstyleprevnextСтиль отображения номеров страниц: prevnext|list
showpagerbottomГде показывать номера страниц: bottom|top|topbottom
saverequestпример: "view:tag"Сохранять параметры из строки запроса
templatestylewackoИспользуемый анализатор шаблона: html|wacko

Модификаторы AdvTableViewer

modifier.tableviewedit.php

<?php
function smarty_modifier_tvedit($id) {
    global 
$wacko;
    if (
$wacko->isAdmin())
    return 
'&nbsp;&nbsp;<a href="'.$wacko->href("""""editid=$id"  ).'"><img src="'.$wacko->GetConfigValue("root_url").'/images/additional/edit.png" alt="Править" style="border: 0;"></a>&nbsp;'.
        
'&nbsp;&nbsp;<a href="'.$wacko->href("""""deleteid=$id").'"><img src="'.$wacko->GetConfigValue("root_url").'/images/additional/drop.png" alt="Удалить" style="border: 0;" onclick="return delTableItem();"></a>';
}
?>

modifier.tablevieweadd.php

<?php
function smarty_modifier_tvadd($id) {
    global 
$wacko;
    if (
$wacko->isAdmin())
    return 
'<a href="'.$wacko->href("""""addelem=1").'" class="btn btn-mini">Добавить элемент</a>
        <script language="JavaScript" type="text/javascript">
            function delTableItem() {
                if(confirm("Вы действительно хотите удалить элемент?")) {
                    return true;
                }
                return false;
            }
        </script>'
;
}
?>