• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
zend_form
#1
zend_form با اینکه حرفه ای عمل می کند ولی آیا کمی پیچیدگی و محدودیت به همراه ندارد؟
  1. چطور با zend form می شه database validate کرد؟
  2. آیا در قالب بندی فرم ها محدودیتی وجود نداره؟

چطوری می تونیم خطاهای zend form (البته zend_validate ) را ترجمه کنیم؟
منظورم ترجمه تمامی خطاها در یک فایل مثلا ini که zend_translator از آن استفاده کند و هنگام خطای validate به جای متن خطای پیشفرض از متن ترجمه شده در فایل بصورت خودکار استفاده کند؟؟
  پاسخ
تشکر شده توسط :
#2
(۱۳۸۸ بهمن ۲۸, ۱۲:۴۰ ق.ظ)nasserghiasi نوشته: zend_form با اینکه حرفه ای عمل می کند ولی آیا کمی پیچیدگی و محدودیت به همراه ندارد؟
  1. چطور با zend form می شه database validate کرد؟
  2. آیا در قالب بندی فرم ها محدودیتی وجود نداره؟

چطوری می تونیم خطاهای zend form (البته zend_validate ) را ترجمه کنیم؟
منظورم ترجمه تمامی خطاها در یک فایل مثلا ini که zend_translator از آن استفاده کند و هنگام خطای validate به جای متن خطای پیشفرض از متن ترجمه شده در فایل بصورت خودکار استفاده کند؟؟

هیچ محدودیتی نداره
در مورد اولی زند خلی validator داره و نوشتن یکی از اونا هم خیلی راحتره. البته واسه سوال شما ولیدیتورش رو زند نوشته Db_RecordExists و Db_NoRecordExists که داخیل داکیومنت هست
در مورد دومی هم هیچ محدودیت قالبی رو نداره. برای قالب بندی می تونید از Zend_Form_Decorator استفاده کنید
در مورد آخری هم توضیح دادم که باید از Zend_Traslator استفاده‌ کنین
متن ها اصلش هم داخل فایلهای ولیدیتورهاش می‌تونید ببینید
  پاسخ
تشکر شده توسط :
#3
یه مثال برای استفاده از translator می گید؟
در این مورد نمی تونم از translator استفاده کنم
ضمنا من قبل از اینکه تاپیکی ایجاد کنم منوال رو می خونم و اگر به مشکلی بر خوردم که منوال کمکم نکرد و یا انگلیسیم ته کشید میام اینجا و امیدوارم اساتیدی مثل شما کمکم کنند که در 99% موارد علم شما جوابگو هست ولی در این مورد کمی گنگ بود! منظورم اینه که با مثال توضیح بدید ممنون می شم!

ببخشید خلاصه ShyBig Grin
  پاسخ
تشکر شده توسط :
#4
این داخل bootstrap

کد پی‌اچ‌پی:
public function _initTrasnlation(){
        try {
            
$translate = new Zend_Translate('csv',
            
dirname(__FILE__).'/lang/fa.csv',
                                                            
'fa',
            array(
'delimiter' => ','));
        } catch (
Exception $e) {

            echo 
"Trasnlation error:".$e->getMessage();
            exit();
        }
        
$this->bootstrap("Log");
        
$log=Zend_Registry::get("log");
        
$translate->setOptions(array(
                                    
'log'             => $log,
                                    
'logUntranslated' => true)
        );
        
Zend_Registry::set("Zend_Translate",$translate);

    } 

این هم داخل boosstrap
کد پی‌اچ‌پی:
public function _initLog(){
        
$db=Zend_Registry::get("db");
        
$columnMapping = array('lvl' => 'priority''msg' => 'message');
        
$writer = new Zend_Log_Writer_Db($db'log'$columnMapping);

        
$logger = new Zend_Log($writer);
        
Zend_Registry::set("log",$logger);
    } 

اینم جدولت
کد:
CREATE TABLE IF NOT EXISTS `log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `lvl` tinyint(4) NOT NULL,
  `msg` text COLLATE utf8_persian_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci ;

حالا‌ وقتی که از فرمت استفاده می کنی و وقتی که یه اخطاری رخ میده می تونی داخل جدولت ببینید که چی ترجمه نشده و خودت هم می تونی متن ترجمه رو داخل ترجمت بزاری مثلا توی ولیدیتور Zend_Validate_Between فایل‌ Zend_Validate_Between.php رو‌ باز کن متنهای ترجمه داخل پروپرتی $_messageTemplates وجود دارن
  پاسخ
تشکر شده توسط : molana nasserghiasi
#5
برای مثال خطای زیر در فایل لاگ ذخیره شده:
کد:
2010-02-17T15:02:08+00:00 NOTICE (5): Untranslated message within 'fa': مرا به خاطر بسپار
ولی خطاهای validator در فایل log ذخیره نمی شن!
  پاسخ
تشکر شده توسط :
#6
شما باید اول باعث ایجاد خطا بشید تا اخطار در داخل لاگ بره.
مثلا اگر خطای وجود در دیتابیس هست باید اول باعث ایجاد خطا بشید تا نرم افزار بخواد ترجمه رو انجام بده و با شکست مواجه بشه. در ضمن سعی کنی کلا از ترجمه استفاده کنید. و مثلا توی برنامه ننویسید ‌مرا‌ به خاطر بسپار بنویسیدی remember me و بعد توی ترجمه برای فارسی بزن مرا به خاطر بسپار
  پاسخ
تشکر شده توسط :
#7
یه سوال دیگه اگر بخواهیم وسط فرم یه توضیحی بنویسیم، چیکار باید بکنیم؟
ضمنا اگر از زش zend captcha تو فرم استفاده کنیم و مقدار decorators را برابر با کد زیر قرار دهیم خروجی captcha درست در نمیاد!!
کد پی‌اچ‌پی:
array(
        
'ViewHelper',
        array(
'Errors', array('class' => 'err-msg clearfix')),
        array(array(
'data' => 'HtmlTag'), array('tag' => 'span''class' => 'element')),
        array(
'Label', array('tag' => 'span')),
        array(array(
'row' => 'HtmlTag'), array('tag' => 'div','class'=>'form-row clearfix')),
    ); 
  پاسخ
تشکر شده توسط :
#8
چه‌ جوری ‌ازش‌ استفاده می کنی
یه نمونه کد بزار
  پاسخ
تشکر شده توسط :
#9
یک فرم لاگین که نوشتم:
کد پی‌اچ‌پی:
class Default_Form_login extends Zend_Form
{
    public 
$translate;
    public 
$config;
    public 
$elementDecorators = array(
        
'ViewHelper',
        array(
'Errors', array('class' => 'err-msg clearfix')),
        array(array(
'data' => 'HtmlTag'), array('tag' => 'span''class' => 'element')),
        array(
'Label', array('tag' => 'span')),
        array(array(
'row' => 'HtmlTag'), array('tag' => 'div','class'=>'form-row clearfix')),
    );
    
    public 
$buttonDecorators = array(
        
'ViewHelper',
        array(array(
'data' => 'HtmlTag'), array('tag' => 'span''class' => 'element')),
        array(array(
'label' => 'HtmlTag'), array('tag' => 'span''placement' => 'prepend')),
        array(array(
'row' => 'HtmlTag'), array('tag' => 'div''class' => 'controls clearfix')),
    );
    
    public 
$captchaDecorators = array(
        
'ViewHelper',
        array(
'Errors', array('class' => 'err-msg clearfix')),
        array(
'Label', array('tag' => 'span')),
    );   
    
    public function 
init()
    {
        
$this->config Zend_Registry::get('config');
        
$this->translate Zend_Registry::get('translate');
        
$this->setDefaultTranslator($this->translate);
        
$this->setAction('')->setMethod('post');
        
$this->setName('loginForm');
        
$this->setAttrib('class''form');
        
$this->addElement('text','username', array(
                
'required'   => true,
                
'class'      => 'english',
                
'decorators' => $this->elementDecorators,
            
                
'label'      => $this->translate->_('login_username').':',
                
'value'      => $this->getValue('username'),
                
'validators' => array(
                    array(
'validator' => 'StringLength''options' => array(040)),
                    
'Alnum',
                    
                 )
                )
            );

        
$this->addElement('password','password', array(
                
'required'   => true,
                
'class'      => 'english',
                
'decorators' => $this->elementDecorators,
        
                
'label'      => $this->translate->_('login_password').':',
                
'validators' => array(
                    array(
'validator' => 'StringLength''options' => array(040))
                )
            ));

        
$this->addElement('checkbox','remember', array(
                
'required'   => false,
                
'class'      => '',
                
'decorators' => $this->elementDecorators,
                
'value'         => 1,
                
'label'      => $this->translate->_('login_remember_me'),
            ));
            
            
     if(isset(
$_COOKIE['site_login_captcha_status']))
     {
       if(
$_COOKIE['site_login_captcha_status'])
       {
        
$this->addElement('captcha''captcha', array(
            
'label'      => 'captcha:',
            
'required'   => true,
            
//'decorators' => $this->captchaDecorators,
            
'captcha'    => array('captcha' => 'Image'
                                  
'wordLen' => 4
                                  
'timeout' => 300
                                  
'Font'    => $this->config->captcha->font->path,
                                  
'ImgDir'  => $this->config->captcha->font->ImgDir,
                                  
'ImgUrl'  => $this->config->captcha->font->ImgUrl,
                                  
'Width'   => $this->config->captcha->Width,
                                  
'Height'  => $this->config->captcha->Height,
        
        
        )
        ));
       }
     }
     
             
        
$this->addElement('submit''submit'
        array(
'label' => $this->translate->_('login_submit') ,
        
'class' => 'btn' ,
        
'decorators' => $this->buttonDecorators,
        
'ignore' => true));
        
       
        
$this->setDecorators(array(
            
'FormElements',
            array(
'HtmlTag', array('tag' => 'div''class' => 'box')),
            
'Form',
        ));        
    }

  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان