Zend Framework Form Element & FCKEditor

来源:互联网 发布:cef js调用c 编辑:程序博客网 时间:2024/06/02 18:47

 整合了Zend框架和FCKEditor, 把FCKEditor变成Zend_Form_Element_FCKEditor。这样作的好处就是在form创建的时候很容易的可以把Zend加进来,最后的自己的Form类就成这样的了:
class MyEditForm extends Zend_Form{
    public function __construct($user_id, $options = null){
        parent::__construct($options);
        $this->setName('my_edit');
        $title = new Zend_Form_Element_Text('title');
        $title->setLabel('标题:')
                ->setRequired(true)
                ->addValidator('NotEmpty')
                ->addValidator('StringLength', false, array(3,128));
        $content = new My_Form_Element_FCKEditor('content');
        $content->addValidator('NotEmpty')
                    ->setLabel('内容:')
                    ->setToolbarSet('Basic');
        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setLabel('提交');
        $this->addElements(array($title, $content, $submit));
    }
}
?>
这个My_Form_Element_FCKEditor是自己对Zend_Form_Element_Xhtml的扩展:
class My_Form_Element_FCKEditor extends Zend_Form_Element_Xhtml{
    /**
     * Default form view helper to use for rendering
     * @var string
     */
    public $helper = 'fckEditor';
    public $toolbarSet;
    public function setToolbarSet($toolset){
        $this->toolbarSet = $toolset;
    }
}
这个类比较简单,Form_Element其实是对Validator接口的实现,所以FCKEditor的实现代码在fckEditor这View Helper里,详细的名字为Zend_From_View_Helper_fckEditor. 自己的这个类如下定义:
class Zend_View_Helper_FckEditor extends Zend_View_Helper_FormElement{
    public function fckEditor($name, $value='', $attribs = null){
        $oFCKeditor = new FCKeditor ( $name );
        $oFCKeditor->BasePath = '/../html/js/fckeditor/';
        $oFCKeditor->Value = $value;
        $toolbar = 'Default';
        if(array_key_exists('toolbarSet', $attribs)){
            $toolbar = $attribs['toolbarSet'];
        }
        $oFCKeditor->ToolbarSet = htmlspecialchars($toolbar);
        $xhtml = $oFCKeditor->CreateHtml();
        return $xhtml;
    }
}
当然这里还可以与My_Form_Element_FCKEditor配合,提供更多的可以选择的地方,比如FCKEditor的语言,skin等。
同时注意这个helper在用的时候要先注册:
$this->view->addHelperPath('../library/My/View/Helper','Zend_View_Helper_');
注册成于系统的helper前缀一样,这样系统就可以自动通过public $helper = 'fckEditor';查找到了。
然后在form中只要 :$content = new My_Form_Element_FCKEditor('content');
        $content->addValidator('NotEmpty')
                    ->setLabel('内容:')
                    ->setToolbarSet('Basic');
        这样一个可以编辑的输入框就显示出来了。还是比较好用的
有一点在调试过程中需要注意的就是最后返回量应该是:$oFCKeditor->CreateHtml();而不是$oFCKeditor->Create();在Create中有一个echo,直接把结果给显示到页面了,所以这个editor不会出现在适当的地方,而是出现在顶端。因为系统执行的时候先echo这个内容了,而在通过View来Render的时候就是空的了。所以用CreateHtml()来产生正确的字符串,由Zend框架来挨个render这些Element就不会出现次序上的混乱。
这两天看了些Zend框架里的东西,它还是能作好些事情,Form还不是很完善,但是Helper中的东西还是比较多的。好些说明文档中没有提到的看看源代码和API就可以了解更多,当然也就能比较容易的做更多事情。

原创粉丝点击