Как создать Extension
В VQS Extension (Расширение, Модуль, иногда встречается слово Сервис) – основной способ расширить функциональность системы. Расширение может нести в себе библиотеки, экшены, handler-ы, не говоря о собственном классе и всех входящих в него функциях.
Большинство рассмотренных ниже элементов являются опциональными (строго говоря, все элементы опциональны) и могут не включаться в расширение. Более того, иногда есть несколько способов вызвать то или иное действие (например необходимые команды при инсталяции) – вы можете использовать любой способ.
Итак, начнём!
Обозначения
Здесь и далее:
- ExtensionName* – название расширения
- actionname – название произвольного экшена, включенного в расширение
- handlername – название произвольного хендлера, включенного в расширение
- templatename – имя файла произвольного шаблона, включенного в расширение
- apiname – имя файла произвольного набора функций (api или библиотек), включенного в расширение
- filename – имя произвольного файла
- так обозначаются каталоги
- так – файлы
* Обращаем внимание на то, что экшены, хендлеры, шаблоны и файлы библиотек (api) лучше называть строчными буквами. На названия самих расширений это правило не распространяется.
Общая структура
Максимально-полное дерево каталогов выглядит так:
- ExtensionName
- ExtensionName.php1
- actions
- actionname.php
- lang
- wakka.ru.php2
- wakka.en.php
- lib
- apiname.php3 – функции, который будут доступны везде. обращаться к этим функциям напрямую (без $this->), поэтому рекомендуется в названии добавлять префикс с именем расширения (напр. WPTRN_ИмяФункции)
- handlers
- smarty
- cache
- config
- templates
- templatename.txt6
- templates_c
- run
- makejs.php – автоматически-подключаемые js-скрипты
- smartyplugins.php – вроде почти не используется – по идее выполняется при создании нового Smarty-шаблона у расширений (и то при условии вызова $kernel->smartyServicesPlugins($sm)
- install.php – действия при установке этого сервиса
- uninstall.php – действия при удалении этого сервиса
- performance.php – действия по улучшению производительности (напр. очистить кеш)
- userinfo.php – выводится в экшене логина – можно показать дополнительную инфу о пользователе (напр. аватар), не меняя стандартный экшн
- init.php – действия, выполняемые при инициализации ядра (в конструкторе VQSkernel). Многое ещё не инициализировано (напр. проверка прав)
- stat.php – действия, выполняемые при запуске функции ядра Run – через неё выводятся страницы (из названия ясно, что рекомендуется использовать для отслеживания статистики)
- onrun.php – выполняется при запуске функции Run – к этому моменту всё, что нужно уже инициализировано
- removepage.php – действия при удалении страницы
- afterpagerender.php – действия после выполнения всех команд на странице
- beforepagerender.php – действия перед выполнением всех команд на странице
- infohandler.php – выводится в настройках страницы (напр. «Редактировать с помощью шаблонов»)
- onshow.php – выполняется в методе show (т.е. при обычном показе страниц) на страницах после вывода текста страницы
- themeheader.php – выполняется в themes/standartHeaderWithoutBody.php, т.е. в разделе head дизайна
Скачать пример
Sum
Мы специально сделали простое демо-расширение под названием Sum. Оно просто считает сумму двух чисел, однако придумать более сложный способ, чтобы посчитать её сложно=)
В расширении показаны основные возможности расширение – определение экшенов, библиотек и хендлеров. Так же показана работа со Smarty.
После установки расширения зайдите на страницу http://<адрес вашего сайта>/sum/100/500 – вы увидите тестовый хендлер. Вместе 100 и 500 можно написать любые числа – систему будет считать их сумму. На этой же странице есть несколько примеров по работе со Smarty. Надеемся, что данное расширение окажется вам полезным.
Внимание! Если вдруг зайдя по указанному адресу вы не обнаружили того, что должно там быть, то удалите все файлы в папке sites/<адрес вашего сайта>/cache_events
Скачать файл Sum.zip: Скачать
ContactBook
И ещё один пример – расширение ConactBook (телефонная книга). В нём показана довольно серьёзная работа в Smarty (виртуальные формы, AJAX, использование встроенных функций) и принципы, по которым нужно выстраивать архитектуру расширения. Так же на странице размещено живое демо с возможностью управления. Перейти!
Примеры содержимого файлов
1 ExtensionName.php
<?php
class Service_ExtensionName extends XcBase {
var $_kernel;
function Service_ExtensionName($kernelLink) {
$this->_localname = 'ExtensionName';
$this->XcBase($kernelLink);
$this->_kernel = $this->srvMainKernel();
}
function onInstall($params) {
return true;
}
function onUninstall($params) {
return true;
}
function Sum($param1, $param2) {
return ($param1 + $param2);
}
}
?>
2 lang/wakka.ru.php
<?php
$serviceResource = array(
"ExtensionName.short_desc" =>
"Сервис, позволяющий посчитать сумму двух чисел",
"ExtensionName.adminpage" =>
"==Страница администрирования ExtensionName=="
);
?>
3 lib/apiname.php
<?
function ExtensionName_Sum($a, $b){
return ($a+$b);
}
?>
4 handlers/handlername/show.php
<?
$tag = $this->GetPageTag();
list($a, $b) = explode("/", $tag);
echo $this->Format("{{sum a=$a b=$b}}");
?>
5 handlers/handlername.init.php
<?php
require(($wakkaConfig["common_path"]!=""?$wakkaConfig["common_path"].'/':'')."classes/cache.php");
$cache = &new Cache($wakkaConfig["cache_dir"], $wakkaConfig["cache_ttl"]);
$iscache = null;
if ($wakkaConfig["cache"] && $_SERVER["REQUEST_METHOD"]!="POST"
&& $method!="edit" && $method!="watch")
if (!$_COOKIE[$wakkaConfig["cookie_prefix"]."name"])
$iscache = $cache->CheckHttpRequest($page, $method);
if($_POST["PHPSESSID"])
session_id($_POST["PHPSESSID"]);
session_start();
$curdir = getcwd();
$wacko = $kernel;
$xcKernel = &$wacko;
$xcKernel->srvInitKernelServices();
$wacko->headerCount = 0;
$cache->wacko = &$wacko;
$wacko->cache = &$cache;
$cache->Log("Before Run wacko=");
if ($method && $method != "show")
unset($wacko->config["youarehere_text"]);
$wacko->srvAllRunFile('beforepagerender');
// Обратите внимание на этот фрагмент. Для того, чтобы хендлеры из расширений работали,
// необходимо написать именно так!
global $handlerpath;
$pg = $wacko->Run($handler, $page, $method, $handlerpath);
if ($iscache){
$data = ob_get_contents();
$cache->StoreToCache($data);
}
if ((strpos($method,".xml")===false)) {
echo "</body></html>";
}
$wacko->srvAllRunFile('afterpagerender');
?>
6 smarty/templates/templatename.txt
Нам передали числа: <b>a = {$a}</b> и <b>b = {$b}</b><br /> Мы посчитали a + b двумя способами - через функцию в классе расширения Sum и через функцию в api<br /><br /> Первая сумма: {$sum1}<br /> Вторая сумма: {$sum2}<br /><br />
Вам оказалась полезна эта статья? Если не трудно – дайте свою оценку тому, насколько предложенный здесь материал вам помог=)
Комментарии:
Нет комментариев, будьте первым!
Добавить комментарий: