Интегрируем FCKeditor

Небольшая инструкция по интеграции FCKeditor (популярный WYSIWYG-редактор). ДЕМО

1) Качаем FCKeditor разархивируем архив и кладем его в папку js вашей темы например .../templates/skin/new/js/fckeditor/

2) Настраиваем интерфейс, темы FCKeditor и прочие функции по желанию пользуясь документацией. Настоятельно рекомендую убрать большую часть лишних кнопок %) их там сшиком много… и поставить тему аля МСОфис 2003. Вся настройка осуществляется в файлах fckconfig.js и fckeditor.js так же не забудьте настроить filemanager /fckeditor/editor/filemanager/connectors/php/config.php

3) Редактируем файл темы .../templates/skin/new/actions/ActionTopic/add.tpl заменяя весь код внутри {if $BLOG_USE_TINYMCE}...{/if} на:

{if $BLOG_USE_TINYMCE}
<script type="text/javascript" src="{$DIR_STATIC_SKIN}/js/fckeditor/fckeditor.js"></script> //  // Указываем путь до fckeditor
{literal}
<script type="text/javascript">
window.onload = function()
{
var oFCKeditor = new FCKeditor( 'topic_text' ) ;
oFCKeditor.BasePath = "/templates/skin/new/js/fckeditor/" ; // Указываем точный путь до fckeditor, для его внутренних нужд.
oFCKeditor.ReplaceTextarea() ;
}
</script>
{/literal}
{/if}


Аналогично редактируем файл /templates/skin/new/actions/ActionPage/add.tpl только не забываем указать в строчке
var oFCKeditor = new FCKeditor( 'topic_text' ) ;
правильное имя textarea к которой прикручивается редактор в данном случае это будет 'page_text'. В коде этих двух страниц я удалил весь текст касающийся остальных редкторов, но как понимаю делать это не обязательно.

4) Теперь при включении TINYMCE в конфиге будет работать FCKeditor.

Косяки на данный момент:
1) Чтобы результат работы редактора полноценно отражался на сайте придется обойти внутренний парсер, для этго в файле .../templates/skin/new/topic строчку
{$oTopic->getText()}
придется заменить на
{$oTopic->getTextSource()}

2) Не работает тег , я решил эту проблему с помощью статьи Авто Анонс, что даже удобнее на мой взгляд.
3) Не работает предпросмотр, самый простой выход удалить эту кнопку :)

6 комментариев

avatar
Кстати может кто подскажет почему "$sTextShort = substr ($sText, 0, 200 — strlen (strrchr (substr ($sText, 0, 500), ' ')));" в ActionTopic.class.php какую бы цифру не сатвил вместо 200 размер текста не меняется.
avatar
Или эти цифры обрабатываются только при первичном дополнении топика?
avatar
Да
avatar
Делаю немного по другому (Лс, не ЛС — пофиг).
В прошлом году написал мини плагин для smarty и везде его использую:

<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */


/**
 * Smarty {fckeditor} function plugin
 *
 * Type:     function
 * Name:     fckeditor
 * Date:     May 5, 2008
 * Purpose:  fckeditor
 * @version  1.0
 * @param array
 * @param Smarty
 * @return string
 */
function smarty_function_fckeditor($params, &$smarty)
{
 if (!isset($params['name'])) {
     $smarty->trigger_error("fckeditor: missing 'name' parameter");
    return;
 }
 if($params['name'] == '')
 	return;

 if (!isset($params['BasePath'])) {
     $smarty->trigger_error("fckeditor: missing 'BasePath' parameter");
    return;
 }
 if($params['BasePath'] == '')
 	return;

 $params['BasePath'] = trim($params['BasePath']);

 if($params['BasePath']{0} == '/' || $params['BasePath']{0} == '\\')
 $params['BasePath'] = substr($params['BasePath'],1);

  if(!file_exists($params['BasePath'].'fckeditor.php')){
  	 $smarty->trigger_error("fckeditor: false 'BasePath' parameter");
    return;
    }
  else require_once(str_replace('\\','/',$params['BasePath']).'fckeditor.php');

  if(isset($params['value'])) $value = $params['value'];
  else $value = '';

  ob_start();

  $oFCKeditor = new FCKeditor($params['name']) ;
  $oFCKeditor->BasePath = '/'.$params['BasePath'];
  $oFCKeditor->Value = $value;
  if(isset($params['ToolbarSet'])) $oFCKeditor->ToolbarSet = $params['ToolbarSet'];
  if(isset($params['SkinPath']))   $oFCKeditor->Config['SkinPath']  = $params['SkinPath'];
  if(isset($params['Width'])) $oFCKeditor->Width = $params['Width'];
  if(isset($params['Height'])) $oFCKeditor->Height = $params['Height']; 

  $oFCKeditor->Create();
  $fckeditor = ob_get_contents();
  ob_end_clean();

  return $fckeditor;
}
/* vim: set expandtab: */

?>


закидывается в smarty\plugins\function.fckeditor.php

И потом в шаблоне просто:


{fckeditor name=aricle_text BasePath="/scripts/fckeditor/" value=$text}

Также есть параметры ToolbarSet=«Имя тулбара», Width и Height. Можно было сделать больше, но мне этого хватало.

В нашем случае для ЛС вместо

<textarea name="page_text" id="page_text" rows="20">{$_aRequest.page_text}</textarea></p>


Можно было бы вставить

{fckeditor name=page_text BasePath="$DIR_STATIC_SKIN/js/fckeditor/" value=$_aRequest.page_text}


И все:)
  • Hrom
  • +3
avatar
А нельзя как-нибудь заставить работать ? Автокат, конечно, хорошо, но он иногда не в тех местах, где нужно встает. Например, при использовании списков
    и т.п.
avatar
упс, видимо здесь в комментариях нельзя теги писать…

А нельзя как-нибудь cut заставить работать? Автокат, конечно, хорошо, но он иногда не в тех местах, где нужно встает. Например, при использовании списков ul и т.п.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.