место в рейтинге
  • 219123
  • 2580
  • 151
Нравится блог?
Подписывайтесь!

FCKeditor и Zend Framework

Оживим сообщество Zend Framework. :)

Сегодня об интегрировании визуального редактора FCKeditor в ZF.

Существует множество способов это сделать. Расскажу о самом, на мой взгляд, простом.

 

 

 

 

 

Реализуем это сделав FCKeditor элементом Zend_Form.

 

 

 

 

 

Для этого создадим класс formwysiwyg.

Вариант 1. Некошерный.

Файл класса создаем в папке library/Zend/Form/Element. Можно для этого скопировать имеющийся там файл Textarea.php, переименовав его в FormWysiwyg.php и отредактировать следующим образом:

 

/**

 

 * Zend Framework

 

 *

 

 * LICENSE

 

 *

 

 * This source file is subject to the new BSD license that is bundled

 

 * with this package in the file LICENSE.txt.

 

 * It is also available through the world-wide-web at this URL:

 

 * http://framework.zend.com/license/new-bsd

 

 * If you did not receive a copy of the license and are unable to

 

 * obtain it through the world-wide-web, please send an email

 

 * to license@zend.com so we can send you a copy immediately.

 

 *

 

 * @category   Zend

 

 * @package    Zend_Form

 

 * @subpackage Element

 

 * @copyright  Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)

 

 * @license    http://framework.zend.com/license/new-bsd     New BSD License

 

 */

 

/** Zend_Form_Element_Xhtml */

 

require_once 'Zend/Form/Element/Xhtml.php';

 

/**

 

 * Textarea form element

 

 *

 

 * @category   Zend

 

 * @package    Zend_Form

 

 * @subpackage Element

 

 * @copyright  Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)

 

 * @license    http://framework.zend.com/license/new-bsd     New BSD License

 

 * @version    $Id: Textarea.php 16218 2009-06-21 19:44:04Z thomas $

 

 */

 

class Zend_Form_Element_FormWysiwyg extends Zend_Form_Element_Xhtml

 

{

 

    /**

 

     * Use formTextarea view helper by default

 

     * @var string

 

     */

 

    public $helper = 'formWysiwyg';

 

}

 

Вариант 2. Кошерный.

Создаем файл класса в папке для собственных плагинов. У меня этот папка App в папке library. Подключается она строчкой

 

autoloaderNamespaces[] = "App_"

 

в файле application.ini.
В этой папке создаем папку FormElement и в ней файл FormWysiwyg.php

 

require_once 'Zend/Form/Element/Xhtml.php';

class App_FormElement_FormWysiwyg extends Zend_Form_Element_Xhtml
{
public $helper = 'formWysiwyg';
}

 

Далее надо создать хэлпер FormWysiwyg.php в папке хэлперов. У меня это в папке application/views/helpers/.

 

/**  * Abstract class for extension
*/
require_once 'Zend/View/Helper/FormElement.php';

require_once 'js/fckeditor/fckeditor.php'; // папка где лежит редактор

/**
* Helper to generate a "textarea" element
*
* @category Zend
* @package Zend_View
* @subpackage Helper
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/

class Zend_View_Helper_FormWysiwyg extends Zend_View_Helper_FormElement
{
/**
* @access public
*
* @param string|array $name If a string, the element name. If an
* array, all other parameters are ignored, and the array elements
* are extracted in place of added parameters.
*
* @param mixed $value The element value.
*
* @param array $attribs Attributes for the element tag.
*
* @return string The element XHTML.
*/

public function formWysiwyg($name = null, $value = null, $attribs = null)
{
if(is_null($name) && is_null($value) && is_null($attribs)) {
return $this;
}
$info = $this->_getInfo($name, $value, $attribs);
extract($info); // name, value, attribs, options, listsep, disable
$editor = new FCKeditor($name);
// настройка параметров редактора
$editor->BasePath = '/js/fckeditor/' ;
$editor->ToolbarSet = empty($attribs['ToolbarSet']) ? 'Default' : $attribs['ToolbarSet'];
$editor->Width = empty($attribs['Width']) ? '70%' : $attribs['Width'];
$editor->Height = empty($attribs['Height']) ? 200 : $attribs['Height'];
$editor->Value = $value;
$editor->Config['BaseHref'] = $editor->BasePath;
$editor->Config['CustomConfigurationsPath'] = $editor->BasePath.'editor/fckconfig.js';
$editor->Config['SkinPath'] = $editor->BasePath.'editor/skins/office2003/';

return $editor->createHtml();
}
}

 

Всё. Теперь вы можете добавлять его как элемент Zend_Form. Например:

 

$content = new App_FormElement_FormWysiwyg('content');  //new Zend_Form_Element_FormWysiwyg('content'); для некошерного случая
$content->setLabel('Текст');
$content->setRequired(true);
$content->addFilter('StringTrim');
$this->addElement($content);

 

Данный пост не претендует на мегакрутость, просто один из способов. :)

30 августа 2009, 21:10
2083

Загрузка...
Loading...

Комментарии

xapon
0
0
хыхыыы, круто. уже видел подобное, правда не знаю таким ли способом делали.
не понимаю зачем класть formwysiwyg в папку с зендом, лучше в свою или вообще в другое место. какбэ зенд редактирует зенд, логично же.
tinymce я тупо прикручивал в лэйауте, получилось совсем не по правилам "расширямости и повторноиспольуемости", зато всего две строчки.
и да, наверняка у эдитора мильон настроек, помимо высоты-ширины-типа тулбара.
однако спасибо за пост=)
xlbo
0
0
> уже видел подобное, правда не знаю таким ли способом делали.
Давай ссылку. :)

> зачем класть formwysiwyg в папку с зендом
ОК. Сейчас подредактирую пост.

> tinymce я тупо прикручивал в лэйауте
И этот человек говорит про пёфект коуд. :)

> наверняка у эдитора мильон настроек
Эмм... Предлагаешь все перечислить? о_0
Это же просто пример, на основе его можно и другие параметры изменить.

> однако спасибо за пост=)
Да брось ты! :)
xapon
0
0
>И этот человек говорит про пёфект коуд. :)
повторяю в тысячный раз, название категории блога призвано лишь подчеркнуть разницу между ним (названием) и реальностью, ну ты понял хД
>Давай ссылку. :)
perevodik.net >Эмм... Предлагаешь все перечислить? о_0
нет, можно использовать что-то типа фабрики, и на основании массива опций, принятых в качестве аргумента, передавать их в сам едитор
> ну ты понял
Ну дык! Поэтому там смайлы стоят))

Спасиб за ссылку. Там кстати он как декоратор, а у меня как самостоятельный элемент.

можно использовать что-то типа фабрики
А кто же спорит. Я же говорю, что это не истина в последней инстанции. :)
мне кажется, у тебя даже лучше, точнее логичнее.
еще чего-нибудь будет, или моя очередь?))
Thnx))
Выходные закончились, чего-нибудь постить время срежется.
Так что думаю теперь твой ход. :)
Darmen
0
0
Зенд - мощная вещь =) Однако ресурсы хавает соответственно.
Как решаете проблему потребления памяти на виртуальных хостингах?
xlbo
0
0
Пока у меня лично этот вопрос остро не вставал.
Следуем этому кодексу. :)
способ, конечно, прикольный, если не складывать все в папку с зендом, да и про настройки ничего не сказано
xlbo
0
0
Могу ответить на все вопросы. Кстати я сейчас перешел на TinyMCE.
что побудило на переход?
да вроде с настройками разобрался, благо документации к нему очень много
Причины перехода: простота, легкая расширяемость (плагины не сложно писать), генерация валидного html.

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

Дорога Алматы – Хоргос. Впечатления от первой поездки

Дорога Алматы – Хоргос. Впечатления от первой поездки

Если раньше путь до Хоргоса занимал около 5 часов по Кульджинской трассе, то сейчас время до границы с Китаем сокращается до 2,5-3 часов. Уже сейчас можно ехать по 4-полосной дороге с цементобетонным покрытием.
theYakov
15 сент. 2017 / 9:35
  • 5470
  • 12
Работа в Mc Donald's. Советы и лайфхаки для гостей

Работа в Mc Donald's. Советы и лайфхаки для гостей

За три месяца я поработала в трёх разных сферах. И сегодня, хочу поведать вам о работе в одной из богатейших компаний мира. Звучит значительно лучше, чем «Я работаю в Mc Donald’s».
madiNAtty
15 сент. 2017 / 12:44
  • 3015
  • 16
Почему депутат Божко хочет ограничить приток сельской молодёжи в города?

Почему депутат Божко хочет ограничить приток сельской молодёжи в города?

Вице-спикер Мажилиса Владимир Божко остановился на некоторых деталях известного конфликта в Астане возле строящегося «Абу Даби Плаза», затронув проблему «многочисленной сельской молодёжи»...
openqazaqstan
19 сент. 2017 / 13:16
  • 2224
  • 54
«Моя депрессия длилась больше двух лет». История о том, как я была готова сдаться

«Моя депрессия длилась больше двух лет». История о том, как я была готова сдаться

По данным статистики 2017 года Казахстан занимает 4 место по самоубийствам. Говорить об этом - социальное табу. Мы игнорируем разговоры о депрессиях. Потому что нам страшно.
goribaldi
18 сент. 2017 / 15:45
  • 2154
  • 61
Фотопрогулка по Алматы. Иностранцам не интересны наши стеклянные здания и моллы

Фотопрогулка по Алматы. Иностранцам не интересны наши стеклянные здания и моллы

Алматы - самый лучший город для меня, так как родной и самый близкий. Так как я много лет прожил за рубежом, могу сказать свою точку зрения, что надо делать у нас.
Ispanec
15 сент. 2017 / 6:20
  • 2062
  • 21
«Папина принцесса» или «обезьяна с гранатой»? Случай в бассейне

«Папина принцесса» или «обезьяна с гранатой»? Случай в бассейне

Мужчины спокойно подчиняются логичным правилам, большинство женщин пытаются выторговать себе особые условия. Я убеждалась в этом много раз.
ValentinaVladimirska
18 сент. 2017 / 14:25
  • 1750
  • 30
Бой Головкина и Альвареса завершился ничьей

Бой Головкина и Альвареса завершился ничьей

Канело согласен на реванш, что неудивительно, Гена тоже "за". Все это было немного ожидаемо - эксперты отмечали, что промоутеры надавят на поединок, и захотят растянуть его на трилогию.
Trequartista
17 сент. 2017 / 0:15
  • 2061
  • 17
Лайфхаки для путешественников. Как я не заплатила ни цента за проживание в Испании

Лайфхаки для путешественников. Как я не заплатила ни цента за проживание в Испании

Бесплатное проживание и завтрак в Испании, как прокачать иностранный язык и где поймать бесплатные ништяки в Европе. Если вы backpacker, который пересекает границу разных стран каждую неделю -...
dianaobyrne
18 сент. 2017 / 12:16
  • 2254
  • 1
Путешественник был шокирован полицейским беспределом в Казахстане

Путешественник был шокирован полицейским беспределом в Казахстане

Полицейский беспредел в Казахстане осудил российский блогер и путешественник Евгений Золотухин. На своей странице он рассказал, как встретился с казахстанскими полицейскими, и как они оставили не...
tala03
18 сент. 2017 / 16:58
  • 1393
  • 13