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

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
2068

Загрузка...
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

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

Школа High Tech High – дети здесь самостоятельны так же, как и профессионалы в офисах

Школа High Tech High – дети здесь самостоятельны так же, как и профессионалы в офисах

Известный казахстанский бизнесмен становится первопроходцем и создает школу, о которой можно только мечтать. То, что мы, как взрослые, делаем в бизнесе, дети будут делать в этой школе.
Zhumanova
24 апр. 2017 / 16:29
  • 17916
  • 3
Как выбрать новостройку в Алматы: инсайты, критерии и личный опыт

Как выбрать новостройку в Алматы: инсайты, критерии и личный опыт

Я прекрасно понимаю тех, кто долго ищет подходящую квартиру - сама искала, потратила на поиск 1,5 года. Что, прежде всего, повлияло на мой выбор при покупке квартиры в новостройке Алматы?
Zhumanova
21 апр. 2017 / 10:04
  • 3652
  • 12
«Третья мировая война начнётся в мае 2017 года» – провидец из Португалии

«Третья мировая война начнётся в мае 2017 года» – провидец из Португалии

Провидец из Португалии по имени Горацио Вильегас считает, что новая мировая война состоится уже в текущем году. Считается, что португалец два года назад объявил, что Трамп станет президентом.
Seattle
21 апр. 2017 / 15:33
  • 3420
  • 12
«А ты покушала?» или Как завоевать сердце женщины простой заботой

«А ты покушала?» или Как завоевать сердце женщины простой заботой

Так как опыт хождения по свиданиям у меня немаленький, да и с интуицией давно дружу, я быстро отсеиваю тех, с кем будут проблемы. Как я это определяю? Очень просто.
Bonittta
22 апр. 2017 / 14:10
Кому в Казахстане жить хорошо? Почему мы остаёмся в топ-5 стран мира по числу самоубийств

Кому в Казахстане жить хорошо? Почему мы остаёмся в топ-5 стран мира по числу самоубийств

Всё ли так хорошо у жителей Казахстана? Почему-то наша страна сохраняет твёрдые позиции в первых строчках мировых рейтингов по числу самоубийств.
openqazaqstan
24 апр. 2017 / 16:54
  • 3055
  • 18
Депутат сената Айтимова: «Не нужно критиковать депутатов, так как вы сами их избирали»

Депутат сената Айтимова: «Не нужно критиковать депутатов, так как вы сами их избирали»

Наши депутаты известны не достижениями и работой, а своими высказываниями. Сегодня в СМИ вышла новость, где депутат сената Бырганым Айтимова ответила на критику народа.
tala03
20 апр. 2017 / 13:44
  • 2544
  • 20
Каждую ночь я жду его. Почти каждую ночь он оправдывает мои ожидания

Каждую ночь я жду его. Почти каждую ночь он оправдывает мои ожидания

Каждую ночь я жду его. Такая уж у него работа, он приходит поздно. Но почти каждую ночь он оправдывает мои ожидания. Когда его долго нет, признаюсь, я начинаю нервничать. Названивать и писать смс-ки...
DominaOmnium
21 апр. 2017 / 2:25
  • 2333
  • 11
Советы бывалого: выбираем надежную систему денежных переводов и хранения денег

Советы бывалого: выбираем надежную систему денежных переводов и хранения денег

Какую систему выбрать для денежных переводов внутри СНГ и как избежать потерь при девальвации. В общем, берегите свои кровно заработанные, помните...
Pablo13
20 апр. 2017 / 16:00
  • 2158
  • 19
Атбасарская дамба: кто так красиво сэкономил 137 миллионов?

Атбасарская дамба: кто так красиво сэкономил 137 миллионов?

История с разрушенной атбасарской плотиной получила интригующее продолжение. На официальном уровне говорят о 200 млн тенге, в то время как районный аким сообщил, что дамбу строили совсем за другие деньги.
openqazaqstan
20 апр. 2017 / 15:10
  • 2138
  • 14