CMS на базе Zend Framework

iceman

говнокодер
CMS на базе Zend Framework

CMS разбил на 2 приложения, пользовательскую (сайт) и админку

Оба приложения имеют общие базовые контроллеры

Иерархия такая:
- BaseController extends Zend_Controller_Action
- - CmsController extends BaseController
- - - PublicController extends CmsController (для сайта)
- - - AdminController extends CmsController (для админки)

в CmsController засуну авторизацию, проверку доступа к странице и т.д.

это правильно? в смысле нужно ли так разбивать?

так же хочу добавить базовый контроллер BlocksController - например lastNewsAction() - будет выводить список последних новостей, в шаблоне Layout - вызов будут вставки
PHP:
<?php echo $this->action('lastNews', 'blocks');?>
я правильной дорогой иду товарищи?
 

tf

крылья рулят
а фиг его знает, неправильных путей небывает
 

Духовность™

Продвинутый новичок
это правильно? в смысле нужно ли так разбивать?
тоже интересует этот вопрос. я думаю, что ничего страшного в этом нет.

так же хочу добавить базовый контроллер BlocksController - например lastNewsAction() - будет выводить список последних новостей, в шаблоне Layout - вызов будут вставки <?php echo $this->action('lastNews', 'blocks');?>
в шаблоне вызов будет? привет МВС.
 

iceman

говнокодер
в шаблоне вызов будет? привет МВС.
[шёпотом]
тссссссс... а ту щас начнуться дискуссии мимо темы +)
http://upload.wikimedia.org/wikipedia/commons/2/2e/ModelViewControllerDiagram.svg
[/шёпотом]

-~{}~ 10.08.09 21:18:

triumvirat
где у тебя находиться блоки (ну типа последние новости на сайте)?

и как ты в шаблон их суешь?
 

Духовность™

Продвинутый новичок
ModelViewControllerDiagram
Я видел эту картинку 100 раз. Не надо мне ссылочки кидать, я всё это прекрасно знаю.

Дело в том, что (если я правильно понял) вызов
PHP:
<?php echo $this->action('lastNews', 'blocks');?>
в шаблоне - это плохо. Плохо тем, что результат работы этой конструкции должен быть в шаблоне в виде явных значений. А делать вызов PHP-логики в шаблоне - это условная попытка реализации компонентного подхода.

где у тебя находиться блоки (ну типа последние новости на сайте)?

и как ты в шаблон их суешь?
а нигде не находятся. я не знаю, как это правильно сделать. Думал насчет компонентного подхода - http://phpclub.ru/talk/showthread.php?s=&threadid=113913
 

iceman

говнокодер
так же хочу добавить базовый контроллер BlocksController - например lastNewsAction() - будет выводить список последних новостей, в шаблоне Layout - вызов будут вставки <?php echo $this->action('lastNews', 'blocks');?>
PHP:
<?=$this->doctype(Zend_View_Helper_Doctype::XHTML1_TRANSITIONAL); ?>
<html>
<head>
<?=$this->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8'); ?>
<?=$this->headTitle('I LOVE ZEND FRAMEWORK!'); ?>
<?=$this->headLink()->appendStylesheet($this->baseUrl.'/css/style.css'); ?>
</head>
<body>
<div id="wrap">
  <div id="subwrap">
    <div id=header>
        @header@
    </div>
    <table border="1" width="100%">
    <tr>
        <td><?php echo $this->action('block-news', $this->config->view->blocks->controllerName);?></td>
        <td><?php echo $this->layout()->content;?></td>
        <td><?php echo $this->action('block-articles', $this->config->view->blocks->controllerName);?></td>
    </tr>
    </table>
    <div id="footer">
        @footer@
    </div>
  </div>
</div>
</body>
</html>
Проблема в том, что BlocksController тоже наследует CmsController

и все проверки в CmsController действуют и на него...

т.е. я пишу код проверки доступа - не авторизован - $this->render(шаблон_показа_данной_ошибки)
и этот шаблон показывается в этих блоках и в <?php echo $this->layout()->content;?>
 

Духовность™

Продвинутый новичок
меня терзают смутные сомнения насчет правильности идеи выполнения логики в шаблоне:
PHP:
    <tr>
        <td><?php echo $this->action('block-news', $this->config->view->blocks->controllerName);?></td>
        <td><?php echo $this->layout()->content;?></td>
        <td><?php echo $this->action('block-articles', $this->config->view->blocks->controllerName);?></td>
    </tr>
я считаю, что этот код на деле должен быть псевдо-кодом:
PHP:
    <tr>
        <td>{action('block-news', '...')}</td>
        <td>...</td>
        <td>{action('block-articles', '...')}</td>
    </tr>
который будет перехватываться каким-то супер-контроллером, который будет строить массив вызовов различных блоков:

PHP:
foreach (array('block-news', 'block-articles') AS $block)
{
    $this->view[$block] = $this->action($block, '...');
}
-~{}~ 10.08.09 21:59:

и все проверки в CmsController действуют и на него...
ах какая трагедия! а отключить не судьба проверку прав для BlocksController?
 

findnext

Новичок
iceman
формируй данные не в шаблоне а до него, т.е раздели логику ещё на 2 части как минимум (бизнес + отображение). Сейчас у тебя всё в куче.

-~{}~ 10.08.09 22:04:

я считаю, что этот код на деле должен быть псевдо-кодом:

<tr>
<td>{action('block-news', '...')}</td>
<td>...</td>
<td>{action('block-articles', '...')}</td>
</tr>
я согласен с этим.
 

tf

крылья рулят
<?=$this->headLink()->appendStylesheet($this->baseUrl.'/css/style.css'); ?>
а еще было бы круто чтобы из модели можно былобы сюда добавить стили и js файлы, аля
PHP:
$header->addScript($url);
<?=$this->headLinkView() ?>
и вот это $this->baseUrl вообще для чего? может какуюнибуть self или private фукнцию придумаете?
 

Ярослав

Новичок
Re: CMS на базе Zend Framework

Автор оригинала: iceman

в CmsController засуну авторизацию, проверку доступа к странице и т.д.

это правильно? в смысле нужно ли так разбивать?
Думаю правильнее было бы использование плагинов для авторизации и проверки доступа
И подключать плагин в бутстрапе
 

AmdY

Пью пиво
Команда форума
Ярослав
+1
вы уж определитесь либо полноценные компоненты, либо избавьтесь даже от костылей типо layout. я когда-то приводил пример для tf, как можно добавлять пункты меню специфические для модуля.
 

tf

крылья рулят
я когда-то приводил пример для tf, как можно добавлять пункты меню специфические для модуля.
может поможет
http://phpclub.ru/talk/showthread.php?postid=854666#post854666

ps/ правдо я забил в конец концов на такое меню, подменю сделал на чтении xml, никакой динамики
но основную идею применил на все 100
 
Сверху