FCKeditor, на мой взгляд, один из лучших online редакторов. И в теории его можно подключить практически к любому сайту, независимо от того какой движок/фреймворк/CMS используется.
Но, естественно, всегда существует несколько нюансов, которые немного усложняют жизнь 🙂
В этой статье речь пойдет о том как подключить этот редактор к сайту использующему PHP фреймворк CodeIgniter. Вообще-то я нашел довольно много статей и рекомендаций на эту тему, но в большинстве из них предлагается скопировать файлы редактора в папки библиотек или плагинов, а, на мой взгляд, это не правильно.
Дело вот в чем. Плагины и библиотеки (пользовательские) обычно находятся в папке application
, которая не обязательно должна находиться внутри DOCUMENT_ROOT
. Точнее, с точки зрения безопасности, эту папку лучше убрать за пределы DOCUMENT_ROOT
чтобы исключить любую возможность прямого доступа к скриптам сайта (т.е. скрипты будут доступны только через index.php).
Но FCKeditor содержит файлы картинок, стилей и т.п., к которым нужно обеспечить прямой доступ. Т.е. его нужно разместить внутри DOCUMENT_ROOT
.
Как оказалось, обойти эту проблему совсем не сложно.
Прежде всего, рассмотрим структуру папок сайта.
index.php
system/
fckeditor/
images/
css/
libs/
Как видите, в корне сайта (DOCUMENT_ROOT
) находятся главный контроллер (index.php
), папки system
, fckeditor
(с редактором) и другие папки с картинками, CSS стилями, библиотеками и т.п.
Папка application
по-умолчанию находится внутри system
, но ее можно спокойно перенести.
Подключаем редактор
Прежде всего, создадим файл настроек (application/config/fckeditor.php
)
<?php //путь к FCKeditor относительно корня сайта (папки, в которой находится index.php) $config['fckeditor_path'] = 'fckeditor/'; //URL FCKeditor относительно корня сайта (параметра $config['base_url']) $config['fckeditor_url'] = 'fckeditor/'; //имя редактора $config['fckeditor_name'] = 'MyFCKeditor'; //высота редактора $config['fckeditor_height'] = 300; ?>
Объяснять тут в общем-то нечего. Главное правильно указать параметры fckeditor_path
и fckeditor_url
.
Теперь создадим файл библиотеки, который будет подключать редактор (/application/libraries/fcke.php
).
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * Эта библиотека подключает редактор FCKeditor * * @version 0.1 * @link https://www.simplecoding.org * @author Стаценко Владимир <vova_33@gala.net> */ class FCKe { private $editor = null; function FCKe() { $CI = &get_instance(); //читаем данные из конфига $CI->config->load('fckeditor'); $fcke_url = $CI->config->item('base_url').$CI->config->item('fckeditor_url'); $fcke_path = substr(FCPATH, 0, strrpos(FCPATH, DIRECTORY_SEPARATOR) + 1) .$CI->config->item('fckeditor_path'); include_once($fcke_path.'fckeditor.php'); $this->editor = new FCKeditor($CI->config->item('fckeditor_name')); $this->editor->BasePath = $fcke_url; $this->editor->Height = $CI->config->item('fckeditor_height'); } function __call($method, $arguments) { return call_user_func_array(array($this->editor, $method), $arguments); } } /* End of file fckeditor.php */ /* Location: ./system/application/libraries/fckeditor/fckeditor.php */
Разберем этот код подробнее.
В конструкторе мы читаем параметры из конфига, загружаем файл fckeditor.php и создаем объект редактора (FCKeditor
).
Параметр fckeditor_path
используется при загрузке файла fckeditor.php
(строка 21). А с помощью fckeditor_url
задаем URL папки редактора (строка 23).
Доступ к методам редактора обеспечивает метод __call
.
Проще говоря, мы написали оболочку, которая загружает редактор и обеспечивает доступ ко всем его методам.
Теперь использовать редактор не сложнее чем любую другую библиотеку CodeIgniter.
В контроллере загружаем библиотеку:
$this->load->library('fcke');
И сразу же можем создать редактор.
$this->fcke->Create();
Как видите, метод Create()
редактора вызывается через объект fcke
, т.е. нашу библиотеку.
Примечание. Редактор должен находится внутри формы. Атрибут action
указывает какому скрипту будет отправлен текст, введенный в редактор.
Небольшое дополнение. Метод Create()
сразу же отправляет код редактора браузеру, т.е. его нужно вызывать из представления. В общем-то, ничего страшного, но это нарушение MVC модели. Если хотите этого избежать используйте метод CreateHtml()
в контроллере. Он возвращает HTML код редактора, который затем можно передать представлению. Например:
в контроллере:
$this->load->library('fcke'); $pageData['editor'] = $this->fcke->CreateHtml(); $this->load->view('my_view', $pageData);
в представлении:
<?php echo $editor; ?>
В общем, подключить редактор не сложно.
Если у вас есть замечания или вопросы, буду рад на них ответить. Пишите, комментарии открыты!