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; ?>
В общем, подключить редактор не сложно.
Если у вас есть замечания или вопросы, буду рад на них ответить. Пишите, комментарии открыты!


