Подключаем FCKeditor к CodeIgniter

Владимир | | CodeIgniter, PHP, Web разработка.

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;
?>

В общем, подключить редактор не сложно.

Если у вас есть замечания или вопросы, буду рад на них ответить. Пишите, комментарии открыты!