NPJ next : Документация/ДействияActionsRazr

Документация Разработчика / Actions


Оглавление документа



Action — это относительно независимый фрагмент кода НПЖ, который может быть вызван из произвольного документа с помощью синтаксиса {{ActionName param1="value1" param2=value2 ...}}. Как можно заметить, у Action есть имя, которое соответствует файлу с фрагментом кода и ряд параметров.
Результат работы этого фрагмента кода вставляется вместо {{.....}} при выводе документа (а не при сохранении!). Типичными Actions являются: {{Feed}}, {{Changes}}, {{ClusterFacet}}, {{Search}}, {{TableOfContents}}.

Где расположен код Actions


Код каждого Action расположен в отдельном php-файле, а все эти файлы как правило находятся в каталоге npj/actions (это может быть изменено в конфигурации узла, но зачем бы?).

Например, код Action {{Search}} находится в файле npj/actions/search.php — обратите внимание на то, что имя файла записывается всегда в нижнем регистре.

Как сделать простой Action


Самый простой Action можно сделать, всего лишь создав файл в каталоге npj/actions, соответствующий имени вашего Action и написав в нём что-то вроде:

<?php // npj/actions/helloworld.php
return "Hello, Cruel World!";
?>


Если имя файла соответствует том, что указано в примере, то указав в документе {{HelloWorld}}, вы получите рамочку с надписью “Hello, Cruel World” внутри. Обратите внимание, что имя файла должно быть в нижнем регистре, а как уж вы запишете его вызов в вака-синтаксисе — безразницы. Хоть {{HeLlOwOrLd}}.

Как получить параметры и имя Action внутри него самого


Action может иметь произвольное число параметров, и, что весьма ценно, их можно заполучить в php-коде Action — все они лежат в массиве $params. В примере выводится сумма параметров “x” и “y” (все примеры представляют собой полноценный Action):
<?php
return "x + y = ". ($params["x"] + $params["y"];
?>


Кроме того, что параметры доступны по имени, можно также получить значение первого, второго и далее параметров по порядку (это используется, например, в Action {{Include}} )
<?php
return "первый параметр равен "$params[0];
?>


Имя Action, приведённое в нижний регистр можно получить из переменной $script_name. Чтобы получить имя Action, как оно было набрано в документе, придётся потрудиться — смотрите пример:
<?php
return "Вы вызвали действие -- "$tpl->GetValue("Action:Name");
?>

Как сделать Action доступным через URL


Некоторые действия очень удобно вызывать через URL, например, http://www.npj.ru/node/tree или http://www.npj.ru/kuso/facetfilter — более того, многие возможности сервиса именно так и работают =). Для того, чтобы сделать написанный вами Action (например, Unknown action "HelloWorld", рассмотренный ранее) через URL необходимо сделать следующие действия:

1. Отредактировать config_tunes.php или npj/config.php (в зависимости от того, будет ли входить написанный Вами action в поставку НПЖ 
добавляем в самый конец две строчки:
<?php
            $this
->NPJ_ACTIONS.="|helloworld";
            
$this->NPJ_FUNCTIONS.="|helloworld";
            
?>

<?php
            
// было
              
$this->NPJ_ACTIONS =     
                
'directory|users|communities|workgroups|accounts|'.
                
'tree|keywordstree|clustertree|'.
                
'changes|recentchanges|journalchanges|clusterchanges|nodechanges|'.
                
'index|clusterindex|journalindex|'.
                
'toc|tableofcontents|'.
                
'keywords|clusterfacet|backlinks|search|feed|modfeed|moderatefeed|'.
                
'facetfilter';
            
// стало
              
$this->NPJ_ACTIONS =     
                
'directory|users|communities|workgroups|accounts|'.
                
'tree|keywordstree|clustertree|'.
                
'changes|recentchanges|journalchanges|clusterchanges|nodechanges|'.
                
'index|clusterindex|journalindex|'.
                
'toc|tableofcontents|'.
                
'keywords|clusterfacet|backlinks|search|feed|modfeed|moderatefeed|'.
                
'facetfilter'.
                
'|helloworld'// добавилась вот эта строчка
            
?>

  1. Добавить русское (или другое человеческое) имя Action в messageset
Для этого не нужно понимать, что такое messageset?, а нужно лишь найти файл навроде npj/messagesets/std.php и в нём сделать нечто подобное следующему:
<?php
      
// было
           // Названия всех акшнов
           
"Actions" => array(
                  
"a"               => "Страничная ссылка (якорь)",
                  
"anchor"          => "Страничная ссылка (якорь)",
                  
"backlinks"       => "Ссылки на этот документ",
      
// стало
           // Названия всех акшнов
           
"Actions" => array(
                  
"helloworld" => "Привет, мир!"// добавилась вот эта строчка
                  
"a"               => "Страничная ссылка (якорь)",
                  
"anchor"          => "Страничная ссылка (якорь)",
                  
"backlinks"       => "Ссылки на этот документ",
      
?>

Как сделать синоним (алиас) для Action


Если вы хотите, например, сделать, чтобы написание {{HelloCruelWorld}} соответствовало вызову Action с определённым параметром — например: {{HelloWorld how="cruel"}}, то вам нужно посмотреть файл npj/actions/modfeed.php или npj/actions/users.php и сделать аналогичным образом.
Алиас делается доступным через URL абсолютно также как и сам Action (посмотрите чуть выше, как именно).

Как убрать рамочку вашего Action навсегда


Из документации пользователя мы знаем, что рамочки вокруг Action можно переключать и вообще отключать. Но если наш Action вообще не нуждается в рамочке, то её можно принудительно отключить с помощью php-кода:
<?php
  $tpl
->Assign("Action:NoWrap"1);
?>


Тогда сколько бы пользователи не пытались вернуть рамочку, у них этого не выйдет.

Как изменить стандартный заголовок Action


Если ваш Action занесён в messageset (см. выше об этом), то рамочка вокруг результатов его работы будет иметь заголовок, соответствующий тому имени, под которым он туда занесён. Конечно, это удобно. Конечно, нужно уметь это менять. Вот как полностью сменить заголовок Action:
<?php
  $tpl
->Assign("Action:TITLE""Специальный заголовок");
?>


Гораздо чаще нужно дописать что-то к стандартному заголовку. Хороший пример — действие {{RecentChanges}}. Тогда делаем как-нибудь так:
<?php
  $tpl
->Assign("Action:TITLE"$tpl->GetValue("Action:TITLE")." дописываем в конец");
?>

Как работать с шаблонами и другими объектами из Action


Во многих примерах выше мы пользовались $tpl->Assign, $tpl->GetValue — всё это часть стандартного окружения программного кода НПЖ. Более подробно о нём можно прочитать где-нибудь здесь?, когда я об этом напишу. Пока ограничимся наиболее важными моментами:

MVC или Page Listing Action — что это?


Часто в разговорах разработчики-аксакалы говорят “MVC-Action” или, возможно, “Page Listing Action”. Под это определение подходит некоторые Actions, результатом выполнения которых является выводимый в том или ином (но очень похожем друг на друга) формате список страниц. Это такие Actions, как:


Для таких Actions были написаны несколько специальных методов и «недо-Actions», благодаря чему достигнута довольно большая степень универсальности в выводе результатов. Более подробно о них стоит почитать по адресу ДокументацияРазработчика.Actions/PageListing.

Другие документы по теме