3

我已经使用 Zend Framework 工作了几个月了。到目前为止,我已经成功地使用了一些视图助手、动作助手和局部函数。现在我遇到了一些我想在我的项目中使用的 javascript 库,例如 TinyMCE 等。

我的问题是,在 Zend 项目中实现这些的最佳方式是什么?最好我希望能够在视图级别添加或启用这些 javascript 库。因此,例如,当我转到包含 zend_form 的 addSomething.phtml 时,我的文本区域之一变成了 TinyMCE 编辑器字段。但是,我不希望在我的所有表单甚至所有文本区域元素上都使用它。

那么在 ZF 1.11.11 下实现和处理这些库的最佳方法是什么?

提前感谢您提供的任何建议:)

4

4 回答 4

4

您可以使用视图助手在每个控制器/视图的基础上加载 javascript 和 css 文件。这是我已经尝试过的东西,我发现它很有帮助,虽然我还没有把它放到一个实际的项目中,但我仍在评估它。

这是我从中得到想法的 devzone 文章。所有功劳归于 Andy Baird 发布该技术。

基本上你设置了两个视图助手,一个用于 javascript:-

class Zend_View_Helper_JavascriptHelper extends Zend_View_Helper_Abstract
{   
    function javascriptHelper() {
        $request = Zend_Controller_Front::getInstance()->getRequest();
        $file_uri = 'media/js/' . $request->getControllerName() . '/' . $request->getActionName() . '.js';

        if (file_exists($file_uri)) {
            $this->view->headScript()->appendFile('/' . $file_uri);
        }
    }
}

一个用于css:-

class Zend_View_Helper_CssHelper extends Zend_View_Helper_Abstract 
{ 
    function cssHelper() { 
        $request = Zend_Controller_Front::getInstance()->getRequest(); 
        $file_uri = 'media/css/' . $request->getControllerName() . '/' . $request->getActionName() . '.css'; 

        if (file_exists($file_uri)) { 
            $this->view->headLink()->appendStylesheet('/' . $file_uri); 
        } 

        return $this->view->headLink(); 

    } 
}

然后你从你的布局脚本中调用它们: -

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    <title>My app title</title> 
    <? $this->headLink()->appendStylesheet('/media/css/global.css') ?> 
    <? $this->headLink()->appendStylesheet('/media/css/iefix.css','screen','lt IE 7') ?>     
    <?= $this->cssHelper() ?>    
    <? $this->headScript()->appendFile('/media/js/jquery-1.3.2.min.js') ?> 
    <? $this->headScript()->appendFile('/media/js/global.js') ?> 

    <? $this->javascriptHelper() ?> 
    <?= $this->headScript() ?> 
</head>

然后,您将 javascript 和 css 文件存储在反映它们所使用的操作名称的文件夹中,例如:-

媒体
/js/index/index.js 媒体/css/index/index.css

为您的索引操作加载 css 和 javascript。

在实践中,我发现最好将 javascript 和 css 放在同一个文件夹中,所以我错过了上面路径的js&css部分,并相应地调整了$file_url两个助手中的变量。

于 2012-06-20T15:17:13.197 回答
2

要在视图级别添加 JS 文件,我通常使用inlineScript()视图助手。

因此,要将 TinyMCE 添加到给定视图中表单的给定字段,您可以编写如下内容:

$this->inlineScript()->appendFile(
    $this->baseUrl('js/yourTinyMCEScript.js'),
    'text/javascript', array('charset' => 'UTF-8')
);

然后,在视图的末尾(或在布局中),

echo $this->inlineScript();

像这样,您将只能为某些表单的某些字段激活 TinyMCE。

希望有帮助,

于 2012-06-20T12:30:36.740 回答
0

我认为最好的方法是扩展 zend_form_textarea 然后创建装饰器和视图助手。

你也可以只写装饰器和视图助手,但对我来说,第一个选择更干净,因为你每次创建表单元素时都避免注入装饰器。

于 2012-06-20T17:58:33.233 回答
0

我更喜欢ckeditor

这是我的解决方案:

下载ckeditor库并将文件复制到/public/scripts/ckeditor/

应用程序.ini

; load jquery from google cdn with jquery ui
resources.jquery.version    = 1.7
resources.jquery.ui_enable  = true
resources.jquery.ui_version = 1.8
resources.jquery.stylesheets[] = "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/ui-lightness/jquery-ui.css"

表单.php

/** @var $jq ZendX_JQuery_View_Helper_JQuery_Container */
$jq = $this->getView()->jQuery();

// Add Library CKEditor
$jq->addJavascriptFile('/scripts/ckeditor/ckeditor.js');
$jq->addJavascriptFile('/scripts/ckeditor/adapters/jquery.js');
$jq->addOnload("$('#text').ckeditor();");

//textarea
$this->addElement('textarea', 'text', array('label' => 'Testo', 'required' => true));

在文件 /public/scripts/ckeditor/config.js 中,您可以在所见即所得中设置您喜欢的工具。

如果您必须使用 tinymce ,请阅读此处

于 2012-06-20T10:15:17.693 回答