Реализация простого плагина

Материал из GLENN CMS WIKI
Перейти к: навигация, поиск

Создание плагина

Основные понятия

создадим к примеру плагин job

создадим для него папку /site/plugins/job

создадим контроллер IndexController для отображения чего нибудь помещаем его в /site/plugins/job/controllers/IndexController.php

Класс IndexController должен быть объявлен как

class Job_IndexController extends SiteBaseController {
}


создадим в нём также экшн indexAction


class Job_IndexController extends SiteBaseController {
         function indexAction() {
         }
}


Вывод содержимого на экран

Для вывода переменных на экран(в область Smarty) в контроллере есть объект $this->smarty, который является прокладкой между зендом и смарти Он поддерживает все методы Smarty и реализует некоторые свои

в indexAction делаем все необходимые манипуляции


class Job_IndexController extends SiteBaseController {
         function indexAction() {
             $x = 2;
             $y = 2;
             $this->view->z = $x*$y;     /////// передаём переменную Z в область smarty
         }
}


у текущего скина в области контента вызывается функция site::getContent()

которая автоматом подгружает TPL

с контентом

т.е. в нашем случае это будет /site/plugins/job/views/content/index/index.tpl
job в пути это имя плагина
index - имя контроллера 
index - имя экшна

создаём файл /site/plugins/job/views/content/index/index.tpl

и пишем в нём: {$z}

Вуаля! при входе на страницу /job/index/index мы увидим "4" в области контента


Работа с БД

Работа с БД в плагинах осуществляется через классы моделей

для инициализации модели используется метод initModel()


class Job_IndexController extends SiteBaseController {
         function initModel() {
             $this->model = new jobModel();
         }
         function indexAction() {
             $this->view->z = $this->model->getZ();     /////// передаём переменную Z в область smarty
         }
}


сами модели хранятся в папке models, плагина

в нашем случае это /site/plugins/job/models/jobModel.php


класс модели обязательно должен быть наследован от DbModel


 class jobModel extends DbModel {
        function getZ(){
             return $this->s_fetchOne('select Z from X');
        }
 }