плагин | Кирилл Павлюков
Авг 29

На сайте разработчиков Zend Framework еще в конце июня появилась статья об интеграции Zend_Acl и парадигмы MVC. Несмотря на полезность и актуальность информации, до сих пор я не встречал перевода этой статьи на русский язык. Ниже приведена моя попытка исправить это. Кроме того, я уже заканчиваю перевод продолжения этого материала, поэтому к понедельнику выложу и его.

Так что же не правильного в компоненте Zend_Acl и текущей реализации MVC в Zend Framework? Нет ничего неправильного, просто для разработчиков не вполне очевидно, как достичь оптимальной интеграции этих двух важнейших частей фреймворка.

Стоит отметить, что данная статья основана на текущих Предложениях к Zend Framework (ссылка), но в данный момент эти рекомендации находятся на утверждении. Окей! Как это работает? Для реализации этого в Предложениях существует два ключевых компонента:

  1. Плагин фронт-контроллера (Front Controller Plugin). Этот компонент проверяет, имеет ли текущий пользователь доступ к запрашиваемой странице.
  2. Помощник действий (Action Helper). Этот компонент позволяет делать проверку прав доступа пользователя внутри контроллера действий.

Давайте возьмем за основу эти два компонента, и попробуем воспользоваться ими на примере. В дальнейшем мы будем вести разговор о сайте на подобии DevZone. Нам будут необходимы один контроллер, который управляет администрированием пользователей, и второй – для управления статьями. Также нам нужны 3 типа пользователей (ролей): один для гостей, второй – для авторов, и еще один, с помощью которого мы будем утверждать статьи. Вот все что нам нужно:

Ресурсы:

  • Контроллер user.
  • Контроллер article.

Роли:

Share

Автор: Кирилл Павлюков \\ Метки: , , , , ,

Мар 17

В ноябре прошлого года я разрабатывал проект, использующий Zend Framework и Smarty.
Как я уже недавно писал, мой любимый визуальній редактор – Spaw Editor от компании Solmetra.
А вот пример того, как можно написать плагин для Smarty для быстрой вставки редактора в тело страницы. Думаю, что комментировать код нет необходимости – тут и так все понятно. Кроме того, модифицировав всего пару строк, можно исключить Zend Framework, если ваш проект не использует его.
И еще: этот плагин писался под конкретный проект, поэтому в нем реализовано лишь то, что было необходимо мне. Вполне вероятно, что вам окажется недостаточно такой функциональности.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/

/**
* Smarty {spaw} function plugin
*
* Type: function
* Name: spaw
* Date: Nov 11, 2007
* Purpose: automate creation Spaw Editor
* Input:
*     - name = name of textarea, default - 'Text'
*     - value = default value
*     - lang =
*     - toolbarset
*     - theme
*     - width
*     - height
*     - stylesheet
*     - page_caption
* Examples:
*     <pre>
*     {spaw}
*     {spaw name='Description' lang='en'}
*    
* @version 1.0
* @author Kirill Pavliukov <kirill></kirill>
* @param array
* @param Smarty
* @return string
* @todo Spaw Pages
*/

function smarty_function_spaw($params, &amp;$smarty)
{
    if (!defined('WWW_DIR')) define('WWW_DIR',$_SERVER['DOCUMENT_ROOT']);
    $name = ((isset($params['name'])) ? $params['name'] : null);
    $value = ((isset($params['name'])) ? $params['value'] : '');
    $lang = ((isset($params['lang'])) ? $params['lang'] : null);
    $toolbarset = ((isset($params['toolbarset'])) ? $params['toolbarset'] : '');
    $theme = ((isset($params['theme'])) ? $params['theme'] : '');
    $width = ((isset($params['width'])) ? $params['width'] : '');
    $height = ((isset($params['height'])) ? $params['height'] : '');
    $stylesheet = ((isset($params['stylesheet'])) ? $params['stylesheet'] : '');
    $page_caption= ((isset($params['page_caption'])) ? $params['page_caption'] : '');
    if ($name == null) $smarty-&gt;trigger_error('(SPAW) Parameter `Name` must be specified');
    if ($lang == null) {
        $front = Zend_Controller_Front::getInstance();
        $lang = $front->getRequest()->getParam('language');
    }

    $pages = ((isset($params['pages'])) ? $params['pages'] : null);
    if ($name == '') $name = 'Text';

    require_once(WWW_DIR . 'spaw2/spaw.inc.php');
    $spaw = new SpawEditor($name, $value, $lang, $toolbarset, $theme, $width, $height, $stylesheet, $page_caption);

    if ($pages) {
        $pages = split(';',$pages);
        foreach ($pages as &amp;$page) {
            $page = split('::',$page);
            if (!isset($page[0]) or empty($page[0])) $smarty->trigger_error('(SPAW) Page name myst be specified!');
            if (!isset($page[1]) or empty($page[1])) $smarty->trigger_error('(SPAW) Page caption myst be specified!');
            if (!isset($page[2])) $page[2] = '';
            if (!isset($page[3])) $page[3] = 'ltr';
            $spawPage = new SpawEditorPage($page[0],$page[1],$page[2],$page[3]);
            $spaw->addPage($spawPage);
        }
    }
    $spaw->show();
}

?>
Share

Автор: Кирилл Павлюков \\ Метки: , , , ,