Список форумов Cake-PHP.ru Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
 
 Watched TopicsWatched Topics   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Подключить Helper к элементу

 
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
nws

цитировать



Зарегистрирован: 25 Фев 2008 15:42:23
Сообщения: 96

СообщениеДобавлено: 18 Мар 2009 18:58:27    Заголовок сообщения: Подключить Helper к элементу Ответить с цитатой

Всем привет!

Как подключить хелпер к элементу?

API говорит:
Цитата:
element( $name, $params = array ( ), $loadHelpers = false )


Пишу в шаблоне
Код:
<? echo $this->element('newsLeft',array(), true); ?>


Выводит ошибку:
Цитата:
Fatal error: Call to a member function format() on a non-object in /var/www/lan/app/views/elements/newsLeft.ctp on line 6


Код:

news_controller.php
Код:
class NewsController extends AppController {

    var $name = 'News';
    var $helpers = array('Html', 'Form', 'Time');

function newsLeft()
    {
       $order = 'News.id DESC';
       $news = $this->News->findAll(null,null,$order, NEWS_LEFT_COUNT);
   
       if(isset($this->params['requested']))
       {
           return $news;
       }
 
       $this->set('news', $news);
       
    }
}


newsLeft.ctp
Код:
<?php $a = $this->requestAction('/news/newsLeft'); ?>
<div id="box-1">
        <h1 class="heading">Новости</h1>
        <ul>
        <?php foreach ($a as $key => $val): ?>
          <li> <span class="date"><?echo $time->format('d.m.Y',$news['News']['created']);?></span>
            <p>
                <?echo $val['News']['short'];?>
            </p>
            <p> <? echo $html->link('Далее...','/news/preview/'.$val['News']['id'],array('style'=>'padding-left:220px;'));?></p>
          </li>
        <?php endforeach;?>
        </ul>
</div>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
evilbloodydemon

цитировать



Зарегистрирован: 11 Окт 2007 20:32:19
Сообщения: 125

СообщениеДобавлено: 18 Мар 2009 19:04:01    Заголовок сообщения: Ответить с цитатой

а в контроллере, который отрисовывает элемент, подключен ли тайм хелпер?
_________________
поздняк метаться - ракеты в воздухе
jabber-конференция по CakePHP - xmpp:cakephp@conference.jabber.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
nws

цитировать



Зарегистрирован: 25 Фев 2008 15:42:23
Сообщения: 96

СообщениеДобавлено: 18 Мар 2009 19:11:05    Заголовок сообщения: Ответить с цитатой

evilbloodydemon писал(а):
а в контроллере, который отрисовывает элемент, подключен ли тайм хелпер?


Код:
class NewsController extends AppController {

    var $name = 'News';
    var $helpers = array('Html', 'Form', 'Time');
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
evilbloodydemon

цитировать



Зарегистрирован: 11 Окт 2007 20:32:19
Сообщения: 125

СообщениеДобавлено: 18 Мар 2009 19:21:56    Заголовок сообщения: Ответить с цитатой

не. news контроллер в данном случае только возвращает значение через реквест экшн, а лэйаут (и соответственно элемент) у тебя отрисовывается в контексте какого-то другого контроллера. подключи-ка тамй хелпер в апп_контроллер и посмотрим, что будет.
_________________
поздняк метаться - ракеты в воздухе
jabber-конференция по CakePHP - xmpp:cakephp@conference.jabber.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
michas

цитировать



Зарегистрирован: 28 Янв 2008 11:28:31
Сообщения: 123

СообщениеДобавлено: 18 Мар 2009 19:37:54    Заголовок сообщения: Ответить с цитатой

еще можно сделать так:
Код:

$time = ClassRegistry::init('Time', 'helper');

прописать в начале элемента
_________________
Все самое интересное в реальном времени - xmpp:cakephp@conference.jabber.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
nws

цитировать



Зарегистрирован: 25 Фев 2008 15:42:23
Сообщения: 96

СообщениеДобавлено: 18 Мар 2009 19:44:17    Заголовок сообщения: Ответить с цитатой

Добавил var $helpers = array('Html', 'Form', 'Time'); в ./cake/libs/controller/app_controller.php - запаботало, но это не очень красивое решение...

После создал новый шаблон и изменил немного контроллер

Код:
function newsLeft()
    {
       $this->layout = 'template2';


       $order = 'News.id DESC';
       $news = $this->News->findAll(null,null,$order, NEWS_LEFT_COUNT);
   
       if(isset($this->params['requested']))
       {
           return $news;
       }
 
       $this->set('news', $news);
       
    }


Теперь, как я понимаю, лайот отрисовывается в NewsController, но все равно не видит хелпер, почему ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
evilbloodydemon

цитировать



Зарегистрирован: 11 Окт 2007 20:32:19
Сообщения: 125

СообщениеДобавлено: 18 Мар 2009 20:37:06    Заголовок сообщения: Ответить с цитатой

апп_контроллер нужно скопировать из кэйк/либс в апп и там его править - это во-первых. во-вторых это самое раскрасивое решение. и в-третьих ты неправильно понимаешь, потому что лэйаут рисуется тем контроллером, который вызывается ээ.. ну скажем так, из браузера. то есть /items/view - ItemsController, /categories/index - CategoriesController, в общем суть ясна. и поэтому, тк хелперы грузятся контроллерами, тайм хелпер должен присутсвовать в каждом из них.
что касается NewsControllera - то при requestAction он всего лишь возвращает данные, до рендера он дойти не успевает.

п.с. вариант с ClassRegistry тоже неплох.
_________________
поздняк метаться - ракеты в воздухе
jabber-конференция по CakePHP - xmpp:cakephp@conference.jabber.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Имя
Сообщение

Смайлики
Very Happy Smile Sad Surprised
Shocked Confused Cool Laughing
Mad Razz Embarassed Crying or Very sad
Evil or Very Mad Twisted Evil Rolling Eyes Wink
Exclamation Question Idea Arrow
Дополнительные смайлики

 
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы можете редактировать свои сообщения
Вы можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Рейтинг@Mail.ru