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

Расширение существующего хелпера

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

цитировать



Зарегистрирован: 13 Фев 2008 11:52:56
Сообщения: 4

СообщениеДобавлено: 16 Мар 2008 21:44:44    Заголовок сообщения: Расширение существующего хелпера Ответить с цитатой

Волнует один вопрос, незнание решения которого вызывает реальный дискомфорт -- каким образом можно безболезненно расширить существующий хелпер.
Например хочу по другому вывести пейджиг во всем проекте, чтобы ссылки выводились не в span (например), а в таблице. Вариант -- сделать свой хелпер Xpaginator наследующий Paginator, но как тогда вывести его в View под переменной $paginator, т.е. чтобы его функции вызывались вместо функций родительского класса?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
KPOTOB

цитировать



Зарегистрирован: 09 Дек 2007 14:46:20
Сообщения: 127

СообщениеДобавлено: 16 Мар 2008 22:13:37    Заголовок сообщения: Ответить с цитатой

скопируй его к себе в app\views\helpers и там поправь. тогда даже имя останется - только вот бэкпорты с новых версий самому придется делать
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alexeis

цитировать



Зарегистрирован: 13 Фев 2008 11:52:56
Сообщения: 4

СообщениеДобавлено: 17 Мар 2008 09:00:08    Заголовок сообщения: Ответить с цитатой

KPOTOB писал(а):
скопируй его к себе в app\views\helpers и там поправь. тогда даже имя останется - только вот бэкпорты с новых версий самому придется делать

Как-то не по DRY получается.
Похоже самым оптимальным остается создание своих хелперов-наследников и замена ими существующих в файлах view, типа
Код:

$paginator = clone($xpaginator);

Еще можно поковыряться в классе View libs\view\view.php, в функции _loadHelpers, вопрос снова как этот класс расширить, логичное расширение через AppView разработчиками опять не предусмотрено.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DeeperMD

цитировать



Зарегистрирован: 08 Фев 2008 15:04:11
Сообщения: 144
Откуда: $Молдова->Кишинёв->Буюканы()

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

Зачем городить огород..

Создаете класс на основе класса хелпера который хотите проапгрэйдить и усё.. и в чём проблема..

Но если совсем красиво по правилам пирожкка, то просто создаете свой хелпер который юзает класс родитель и усё..

что-то типа этого:
Код:
<?
class LinkHelper extends Helper
{

    var $helpers = array('Html');

    function makeEdit($title, $url)
    {
        // Используем HTML Хелпер для извлечения
        // форматированных данных:

        $link = $this->Html->link($title, $url, array('class' => 'edit'));

        return $this->output("<div class=\"editOuter\">$link</div>");
    }
}
?>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alexeis

цитировать



Зарегистрирован: 13 Фев 2008 11:52:56
Сообщения: 4

СообщениеДобавлено: 18 Мар 2008 08:41:23    Заголовок сообщения: Ответить с цитатой

Вот конкретная проблема: везде для вывода времени используется $time->nice($date), а затем вдруг понимаешь что нужно то выводить название месяца полностью и по русски, и дату в другом виде. И как это правильно разрулить, не создавая новую копию TimeHelper в проекте?

Вообще такое ощущение что с точки зрения возможности легкого расширения правильным (хотя опять не оптимальным) путем будет с самого начала в проекте использовать любые сторонние хелперы только как родителей для собственных, т.е. всюду во View использовать только $xhtml, $xtime и т.д.

А вот красивым способом легко расширять функциональность хелперов и при этом не раздувать код было бы такое объявление хелперов
Код:

var $helpers = array('html'=> 'Html', 'time' => 'Xtime')

Но увы, без хакания ядра такое реализовать пока не получается.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
KPOTOB

цитировать



Зарегистрирован: 09 Дек 2007 14:46:20
Сообщения: 127

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

alexeis
Тикет заведи если нет еще такого

А вообще - cake и родителя не умеет автоматом загружать Wink

Да и nate у себя на уме канкретно Laughing
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alexeis

цитировать



Зарегистрирован: 13 Фев 2008 11:52:56
Сообщения: 4

СообщениеДобавлено: 26 Мар 2008 14:10:14    Заголовок сообщения: Ответить с цитатой

хм, поглядел, кажись в branch 1.2.x.x. реализовано как я хочу Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Имя
Сообщение

Смайлики
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