整合了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就可以了解更多,当然也就能比较容易的做更多事情。
Zend Framework Form Element & FCKEditor
最新推荐文章于 2024-10-04 06:11:34 发布