Платформа Zend с библиотеками JavaScript


Я работаю с Zend Framework уже несколько месяцев. До сих пор я успешно использовал некоторые помощники по просмотру, помощники по действиям и частичные. Теперь я наткнулся на некоторые библиотеки javascript, которые я хочу использовать в своем проекте, такие как TinyMCE и другие.

Мой вопрос в том, как лучше всего реализовать их в проекте Zend? Предпочтительно я хотел бы иметь возможность добавлять или включать эти библиотеки javascript на уровне представления. Так, например, когда я захожу в свой addSomething.phtml который содержит форму zend_form, одна из моих текстовых областей становится полем редактора TinyMCE. Однако я не хочу, чтобы это было на всех моих формах или даже на всех элементах текстовой области.

Итак, каков наилучший способ реализации и последующего подхода к этим библиотекам в соответствии с ZF 1.11.11?

Заранее благодарю за любые советы:)

Author: JellyBelly, 2012-06-20

4 answers

Вы можете использовать помощник представления для загрузки файлов javascript и css для каждого контроллера/представления. Это то, с чем я экспериментировал, и я нахожу это весьма полезным, хотя я еще не сделал шага, чтобы воплотить это в живой проект, я все еще оцениваю его.

Вот статья devzone, из которой я почерпнул идею. Вся заслуга Энди Бэрда в том, что он опубликовал эту технику.

В основном вы настраиваете два помощника просмотра, один для 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 в папках, которые отражают название действия, с которым они используются, например: -

Media/js/index/index.js
медиа/css/индекс/index.css

Для загрузки css и javascript для действия индексирования.

На практике я счел предпочтительным помещать javascript и css в одну папку, поэтому я пропускаю js & css части пути выше и соответствующим образом отрегулируйте переменную $file_url в обоих помощниках.

 4
Author: vascowhite, 2012-06-20 15:17:13

Для добавления файлов JS на уровне представления я обычно использую InlineScript() помощник по представлению.

Итак, чтобы добавить TinyMCE в заданное поле вашей формы в заданном представлении, вы можете написать что-то вроде следующего:

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

А затем, в конце представления (или в макете),

echo $this->inlineScript();

Таким образом, вы сможете активировать TinyMCE только для определенных полей определенных форм.

Надеюсь, это поможет,

 2
Author: dinopmi, 2012-06-20 12:30:36

Я предпочитаю редактор

Это мое решение:

Загрузите библиотеку ckeditor и скопируйте файлы в /общедоступный/скрипты/ckeditor/

application.ini приложение.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"

form.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 вы можете настроить свои любимые инструменты в WYSIWYG.

Если вам необходимо использовать tinymce , читайте здесь

 0
Author: JellyBelly, 2012-06-20 12:25:04

Я думаю, что лучший подход - расширить zend_form_textarea, а затем создать декаоратор и помощник по просмотру.

Вы также можете написать только декоратор и viewhelper, но для меня первый вариант чище, потому что вы избегаете вводить декоратор каждый раз, когда создаете элемент формы.

 0
Author: Artur Michalak, 2012-06-20 17:58:33