Как стать автором
Обновить

Комментарии 28

я обычно делаю так:

class Form_Base extends Zend_Form {

function init() {
parent::init();

$this->setDecorators(array(
'FormElements',
array('HtmlTag', array('tag' => 'dl')),
'Form'
));
include 'errors.php';
$translator = new Zend_Translate('array', $errors);
$this->setTranslator($translator);

$this->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
$this->setMethod(Zend_Form::METHOD_POST);

$url = new Zend_View_Helper_Url();
$this->setAction($url->url(array(), 'default'));
}

}

Ну а «настоящие» формы уже наследую от этого класса.
Тоже сначала думала сделать в init(), но мне этот вариант не понравился тем, что теперь в любой наследуемой от этой форме обязательно нужно будет в init() вызывать родительский init. Поэтому решила, что удобнее в конструкторе все это сделать.
ну можно и так. Но мне лично не в лом делать parent::init();
Zend_Form::setDefaultTranslator($translator);
Спасибо. Думаю, так будет удобнее всего.
Пусть меня заминусуют и т.п. за то, что я тут упомяну голосование или карму.
Но я уже вообще не понимаю зачем люди голосуют. Вот зачем? Хоть бы отписывали что плохого в статье. А то — минус просто и все.
Неужели вредную информацию какую-то выложила?
Ну спасибо, скоро просто вообще не смогу ничего публиковать.
постваил плюсы где только смог.
Спасибо :)
Эх… непонятен мне Хабр в последнее время…
>Но эта ссылка нерабочая.

А почему нерабочая? Я по ней и делал недавно и сейчас зашёл туда.
Хм. У меня не открывается. Причем натыкаюсь на нее уже с неделю и с разных компов — не открывается и все — просто страница пытается грузиться.

Только что проверила — оказывается это у меня Опера почему-то не хочет ее читать. ИЕ нормально открыл. Действительно, ссылка рабочая…
я могу ошибатся но этот кривой метод перевода уже кажется поправили несколько релизов назад.
А какой прямой метод?
да. по-моему с 1.6 — deprecated. Надо юзать не константы, а а сами текстовки
Не понимаю как какой-то метод решения задачи может быть deprecated, честно скажу… особенно с такой документацией как у Зенда. Ниче ж не поймешь и примеры им лень было писать :(

Насчет текстовок — как по мне то ненадежный абсолютно метод. А если разработчикам захочется переписать текст? Или у них на все 100% гарантия? :)

А где можно найти, что именно этот метод решения данной проблемы правильный?

з.ы.: против Вашего совета ничего не имею :) Спасибо. Просто интересно как правильнее будет сделать и хочу разобраться.
можно ставить свои сообщения и переводить уже их. или можно еще ключи задавать, например

not_logged = «Вы не авторизовались». Метки удобны для больших кусков текста
У зф помоему лучшая, очень полная документация насыщенная примерами на все случаи жизни.
Да, я это уже слышала.
Но у меня такое чувство, что либо я не там смотрю, либо это говорят люди, которые уже и так разбираются в ЗФ.

Вот явный пример:
API Zend_Form_Element

bool $_ignore = false (line 110)

Ignore flag (used when retrieving values at form level)
access: protected

Как понимать «Ignore flag (used when retrieving values at form level)»?? Как используется? Зачем используется?
Побегала я по АПИ туда-сюда и, честно скажу, толку никакого — что есть там описание АПИ, что его нет.

С документацией та же картина. Какой-то пример есть, какого-то нет. Я уже молчу о верстке их сайта — таблицы перекрываются менюшуой — прочитать ничего не возможно.

В общем не знаю… может я где-то не там смотрю, но без 100 грамм там не разобраться…

Может я не умею читать… не знаю… но буквально полдня мне хватило, чтобы разобраться в Doctrine, чтоб она меня заинтересовала, чтоб все было понятно и все работало. Значит какую-то документацию я всетаки читать умею.

Еще вот пример. Может просто чего-то не понимаю.

Zend_Loader::registerAutoload();

Пример оказывается уже нерабочий. Точнее — мне выбрасывается сообщение о том, что такой метод уже depricated с какой-то там версии. Так почему это в документации есть? И не сказано как сделать по-другому. Ну понятно — найти то найду, если надо будет. Но быстро не получилось.

И всяких таких непоняток куча.
Возможно сказывается что с зф я уже работаю около года и все нововведения понимаются на раз, так как четко соблюдаются конвенции кодирования. Начало насколько я помню было сложное и очень помогла распечатка книги Роба Аллена (копейки стоит, купи)

А сейчас такой документации мне хватает за глаза, если честно апидоку не смотрю соовсем (как то не срослось, люблю побегать по сорцам)
zendframework.com/manual/en/zend.loader.autoloader.html
Буду признателен за пример кода с использованием текстовок. Что-то в мане не нашел ничего внятного.
В разделе валидаторов примеры локализации даются с константами :/
isEmpty
Element is empty error
Field should not be empty
    <message>
        <source>isEmpty</source>
        <comment>Element is empty error</comment>
        <translation>Field should not be empty</translation>
    </message>	
Я все сообщения держу в отдельных файлах, для каждого из языков. Вся локализация в одном месте. Язык определяется по поддомену. Формы подхватывают локализацию сообщений, если поместить обьект класса Zend_Translate в реестр
Zend_Registry::set('Zend_Translate', $translate);

Зачем локализованные строки держать в конструкторах? А если завтра придется перевести ресурс еще на несколько языков?
Поняла.
В общем-то искала какой-то метод попроще, чтоб не нужно было разбираться в Zend_Translate особо. Потому что пока что сайт собирается быть только на одном языке. А это вообще мой первый проект на Зенде… И мне и так с головой проблем хватает.

Спасибо за подсказку. Сразу же переделаю так, чтоб было меньше проблем на будущее.

Еще тогда вопрос по организации… «Я все сообщения держу в отдельных файлах, для каждого из языков.» — что из себя представляют файлы? И откуда берете «все сообщения»?

Извиняюсь, если вопрос совсем ламерский. Просто мне что-то с Зендом сложновато по-началу, а сидеть тупить или изобретать велосипед в елементарном не хочется. Пользуюсь моментом, пока нашла знающего человека :)
При бутстраппинге определяется необходимый язык ($lang) и Zend_Translate инициализируется и помещается в реестр вот так
$translate = new Zend_Translate(«array», APPLICATION_PATH."/languages", $lang, array('scan' => Zend_Translate::LOCALE_FILENAME));
Zend_Registry::set('Zend_Translate', $translate); //здесь имя ключа реестра должно быть именно Zend_Translate

В директории APPLICATION_PATH/languages лежат файлы вида lang.php
en.php
ru.php


В самих файлах локализации просто возвращаю массив
return array(
'hello_world' => 'Привет мир'
);

П.С. локализацию использовал первый раз, поэтому на идеальное решение не претендую, просто поделился своим решением :)
Большое спасибо за разъясния. Наверно, так сразу же и сделаю. Чтоб на будущее привыкать к организации кода в нормальном стиле.
Поняла.
В общем-то искала какой-то метод попроще, чтоб не нужно было разбираться в Zend_Translate особо. Потому что пока что сайт собирается быть только на одном языке. А это вообще мой первый проект на Зенде… И мне и так с головой проблем хватает.

Спасибо за подсказку. Сразу же переделаю так, чтоб было меньше проблем на будущее.

Еще тогда вопрос по организации… «Я все сообщения держу в отдельных файлах, для каждого из языков.» — что из себя представляют файлы? И откуда берете «все сообщения»?

Извиняюсь, если вопрос совсем ламерский. Просто мне что-то с Зендом сложновато по-началу, а сидеть тупить или изобретать велосипед в елементарном не хочется. Пользуюсь моментом, пока нашла знающего человека :)
проблему с головой это плохо :)

Файлы могут быть самые разные, я использую xml (QT) как найболее удобный, немного извратившись можно переводить тексты через гуи тулз от одноименной компании, платные инструменты тоже существуют, но были отброшены.

Делайте как угодно, в старых версиях фреймворка у меня работало все через плагин контроллера, сейчас вероятно делал бы более правильно и бутстрапил.
> проблему с головой это плохо :)

:)) нет, с головой у меня врод особо проблем нет. А вот с Зендом — да. Просто много их…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации