Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 |
|
Вернуться к началу |
|
|
|