Платформа Zend с библиотеками JavaScript
Я работаю с Zend Framework уже несколько месяцев. До сих пор я успешно использовал некоторые помощники по просмотру, помощники по действиям и частичные. Теперь я наткнулся на некоторые библиотеки javascript, которые я хочу использовать в своем проекте, такие как TinyMCE и другие.
Мой вопрос в том, как лучше всего реализовать их в проекте Zend? Предпочтительно я хотел бы иметь возможность добавлять или включать эти библиотеки javascript на уровне представления. Так, например, когда я захожу в свой addSomething.phtml который содержит форму zend_form, одна из моих текстовых областей становится полем редактора TinyMCE. Однако я не хочу, чтобы это было на всех моих формах или даже на всех элементах текстовой области.
Итак, каков наилучший способ реализации и последующего подхода к этим библиотекам в соответствии с ZF 1.11.11?
Заранее благодарю за любые советы:)
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
в обоих помощниках.
Для добавления файлов JS на уровне представления я обычно использую InlineScript() помощник по представлению.
Итак, чтобы добавить TinyMCE в заданное поле вашей формы в заданном представлении, вы можете написать что-то вроде следующего:
$this->inlineScript()->appendFile(
$this->baseUrl('js/yourTinyMCEScript.js'),
'text/javascript', array('charset' => 'UTF-8')
);
А затем, в конце представления (или в макете),
echo $this->inlineScript();
Таким образом, вы сможете активировать TinyMCE только для определенных полей определенных форм.
Надеюсь, это поможет,
Я предпочитаю редактор
Это мое решение:
Загрузите библиотеку 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 , читайте здесь
Я думаю, что лучший подход - расширить zend_form_textarea, а затем создать декаоратор и помощник по просмотру.
Вы также можете написать только декоратор и viewhelper, но для меня первый вариант чище, потому что вы избегаете вводить декоратор каждый раз, когда создаете элемент формы.