Автор Тема: Блоки на странице сайта  (Прочитано 3278 раз)

0 Пользователей и 1 Гость смотрят эту тему.

Оффлайн Zh0rzh

  • Team
  • Герой
  • ***
  • Сообщений: 1089
  • Карма: 71
Re: Блоки на странице сайта
« Ответ #30 : Ноября 09, 2009, 17:10:20 »
Кстати, а почему используется код
$request = clone $this->getRequest();
            
$request->setModuleName('user')
                ->
setControllerName('block')
                ->
setActionName('block-self')
                ->
setParams(array('asdfad' => 'dfdf'));
            
$this->_helper->actionStack($request);

вместо такого

$this
->_helper->actionStack('block-self''block''user', array('asdfad' => 'dfdf'));


?
Оставляем и читаем отзывы о ZFConf 2010 Подробнее >>

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2224
  • Карма: 112
    • •LCF•
Re: Блоки на странице сайта
« Ответ #31 : Ноября 09, 2009, 17:24:54 »
Думаю зависит от конкретного случая и роли блока. Если каждый такой блок является по сути контентной частью страницы в той или иной степени стремящейся по значению к значению основного контента (если он есть), то экшн стек видиться хорошим решением.
В то время как и вью хелперы и рендеринг каких то данных в определенный сегмент в плагине видяться мне вполне применимыми и более удачными решениями в других возможных ситуациях.

Оффлайн atukai

  • Team
  • Опытный
  • ***
  • Сообщений: 194
  • Карма: 12
    • Web Development with Soul
Re: Блоки на странице сайта
« Ответ #32 : Ноября 09, 2009, 17:25:47 »

// no self
        
if ($this->_helper->user()->getUserId() != $this->_getParam('user_id')) {
            
$request = clone $this->getRequest();
            
$request->setModuleName('user')
                ->
setControllerName('block')
                ->
setActionName('block-another');
            
$this->_helper->actionStack($request);
        } else {
            
$request = clone $this->getRequest();
            
$request->setModuleName('user')
                ->
setControllerName('block')
                ->
setActionName('block-self');
            
$this->_helper->actionStack($request);
        }

        
$request = clone $this->getRequest();
        
$request->setModuleName('profile')
            ->
setControllerName('menu')
            ->
setActionName('block-menu');
        
$this->_helper->actionStack($request);

        
$request = clone $this->getRequest();
        
$request->setModuleName('profile')
            ->
setControllerName('wall')
            ->
setActionName('list');
        
$this->_helper->actionStack($request);

        
$request = clone $this->getRequest();
        
$request->setActionName('friends-block')
            ->
setParams(compact('current_user'));
        
$this->_helper->actionStack($request);

        
// here
        
$request = clone $this->getRequest();
        
$request->setActionName('product-favorites-block')
            ->
setParams(compact('current_user'));
        
$this->_helper->actionStack($request);

        
$request = clone $this->getRequest();
        
$request->setActionName('cosmetic-favorites-block')
            ->
setParams(compact('current_user'));
        
$this->_helper->actionStack($request);

        
$request = clone $this->getRequest();
        
$request->setActionName('video-block')
            ->
setParams(compact('current_user'));
        
$this->_helper->actionStack($request);

        if(
$this->_helper->acl()->isItMe($current_user->getUserId())
            || 
$current_user->findParentRow('User_Stat')->is_activity_visible) {
            
$request = clone $this->getRequest();
            
$request->setActionName('activity-block')
                ->
setParams(compact('current_user'));
            
$this->_helper->actionStack($request);
        }

        
$request = clone $this->getRequest();
        
$request->setActionName('photos-block')
            ->
setParams(compact('current_user'));
        
$this->_helper->actionStack($request);

        
$request = clone $this->getRequest();
        
$request->setActionName('sets-block')
            ->
setParams(compact('current_user'));
        
$this->_helper->actionStack($request);



И что Вы хотите сказать, что у Вас это счастье летает? Вот он - пример толстого контроллера. Логика отображения должна быть в шаблонах. ИМХО
ZFied

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2224
  • Карма: 112
    • •LCF•
Re: Блоки на странице сайта
« Ответ #33 : Ноября 09, 2009, 17:33:59 »
И что Вы хотите сказать, что у Вас это счастье летает? Вот он - пример толстого контроллера. Логика отображения должна быть в шаблонах. ИМХО
Вопрос производительности это отдельный вопрос.
Толстый контроллер это контроллер который содержит логику из моделей, в какую модель вы бы предположили бы поместить эту? (в смысле мне правда интересно, а не в том смысле что ей больше нигде места нет, может быть и правда ее стоит куда нить двинуть).
Там не только "логика отображения", в том то и дело.

Оффлайн toxic-mt

  • Team
  • Опытный
  • ***
  • Сообщений: 201
  • Карма: 22
    • developers, developers, developers
Re: Блоки на странице сайта
« Ответ #34 : Ноября 09, 2009, 17:51:05 »
Цитировать
И что Вы хотите сказать, что у Вас это счастье летает? Вот он - пример толстого контроллера. Логика отображения должна быть в шаблонах. ИМХО

Да, работает абсолютно без проблем при неплохой посещаемости, причем никакой оптимизацией никто еще не занимался.

По поводу толстого контроллера и логики отображения Вы совсем не в кассу. Понятие "Толстый контроллер" говорит нам о том что бизнес логика которая должна быть в модели, распологается в контроллере. Управление  потоком выполнения программы есть суть контроллеров и экшен стек здесь применяется в том контексте для которого он и был создан.
Мой блог о разработке http://www.wddx.ru

Оффлайн toxic-mt

  • Team
  • Опытный
  • ***
  • Сообщений: 201
  • Карма: 22
    • developers, developers, developers
Re: Блоки на странице сайта
« Ответ #35 : Ноября 09, 2009, 17:54:26 »
Кстати, а почему используется код
$request = clone $this->getRequest();
            
$request->setModuleName('user')
                ->
setControllerName('block')
                ->
setActionName('block-self')
                ->
setParams(array('asdfad' => 'dfdf'));
            
$this->_helper->actionStack($request);

вместо такого

$this
->_helper->actionStack('block-self''block''user', array('asdfad' => 'dfdf'));


?

Действительно можно и так.
Мой блог о разработке http://www.wddx.ru

Оффлайн stfalcon

  • Team
  • Герой
  • ***
  • Сообщений: 897
  • Карма: 44
  • Добрый сокольничий ^_~
    • My name is Tanasiychuk Stepan і це мій блог
Re: Блоки на странице сайта
« Ответ #36 : Ноября 09, 2009, 18:03:48 »
Цитировать
И что Вы хотите сказать, что у Вас это счастье летает? Вот он - пример толстого контроллера. Логика отображения должна быть в шаблонах. ИМХО

Да, работает абсолютно без проблем при неплохой посещаемости, причем никакой оптимизацией никто еще не занимался.
можно уточнить посещаемость сайта и конфиг сервера на котором это все летает. потому что зф по определению не может летать... а без оптимизации так и подавно. разве что на хорошем дедике с нагрузкой 100-200К страниц в сутки.

Оффлайн toxic-mt

  • Team
  • Опытный
  • ***
  • Сообщений: 201
  • Карма: 22
    • developers, developers, developers
Re: Блоки на странице сайта
« Ответ #37 : Ноября 09, 2009, 18:15:40 »
Цитировать
И что Вы хотите сказать, что у Вас это счастье летает? Вот он - пример толстого контроллера. Логика отображения должна быть в шаблонах. ИМХО

Да, работает абсолютно без проблем при неплохой посещаемости, причем никакой оптимизацией никто еще не занимался.
можно уточнить посещаемость сайта и конфиг сервера на котором это все летает. потому что зф по определению не может летать... а без оптимизации так и подавно. разве что на хорошем дедике с нагрузкой 100-200К страниц в сутки.

Ответ в личке
Мой блог о разработке http://www.wddx.ru

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2224
  • Карма: 112
    • •LCF•
Re: Блоки на странице сайта
« Ответ #38 : Ноября 09, 2009, 19:12:08 »
потому что зф по определению не может летать...
Он не говорил что у него летает. А вообще все в мире относительно и еще сильно зависит от настроек и набора того что работает на вдс/хостинга/сервере.

Оффлайн DrAw

  • Мастер
  • ****
  • Сообщений: 282
  • Карма: 9
    • BASdesignstudio
Re: Блоки на странице сайта
« Ответ #39 : Ноября 09, 2009, 19:32:49 »
насколько я понимаю из ссылки, приведенной выше о скорости работы action(), actionStack и View_Helper работают примерно одинаково.

Оффлайн Zh0rzh

  • Team
  • Герой
  • ***
  • Сообщений: 1089
  • Карма: 71
Re: Блоки на странице сайта
« Ответ #40 : Ноября 09, 2009, 19:38:43 »
насколько я понимаю из ссылки, приведенной выше о скорости работы action(), actionStack и View_Helper работают примерно одинаково.

Из какой это ссылки?
action() - по полной запускается весь цикл диспетчеризации с сопуствующим клонированием объектов
actionStack() - дополнительная итерация в существующем цикле диспетчеризации
а View_Helper это всего лишь, по сути, просто вызов метода у объекта

Оставляем и читаем отзывы о ZFConf 2010 Подробнее >>

Оффлайн DrAw

  • Мастер
  • ****
  • Сообщений: 282
  • Карма: 9
    • BASdesignstudio
Re: Блоки на странице сайта
« Ответ #41 : Ноября 09, 2009, 21:47:57 »
Вот, нашел статья про ресурсоемкость.

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2224
  • Карма: 112
    • •LCF•
Re: Блоки на странице сайта
« Ответ #42 : Ноября 09, 2009, 22:40:02 »
Вот, нашел статья про ресурсоемкость.
Там кстати и сказано о применимости способов - используйте Экшн Стек когда возможно и вью хелперы когда
Цитировать
In most cases, using action() is simply overkill. If you have most business logic nested in your models and are simply querying the model and passing the results to a view script, it will typically be faster and cleaner to simply write a view helper that pulls the model, queries it, and does something with that information.

Оффлайн ZendManiac

  • Team
  • Герой
  • ***
  • Сообщений: 813
  • Карма: 22
  • ZF Maniac
    • Zend Framework Maniacs
Re: Блоки на странице сайта
« Ответ #43 : Июля 29, 2010, 17:25:22 »
Производительность при использовании ActionStack падает только при большом количестве подключенных Action хелперов (конечно в сравнении с релизации блоков на другом методе), кому интересно прошу в код ZF.
Но решать использовать его или нет решать вам, мы уже решили если обязательно использовать в следующем проекте, особенно после текущего проекта в котором попытались реализовать все с помощью плэйсхолдеров, пришлось все так усложнять что производительность упала из-за такого рода костылей.
Тем более что кэширование еще никто не отменял.

Ждем Zend_Controller 2 может там решат проблему хелперов при использовании ActionStack.