Визуальный редактор в Блогах

Опубликовано:
Редактировалось: 3 раза — последний сегодня в 10:12
Просмотров: 3589
Настроение: Хорошее
Играет: Уже давно ничего не играет :(
+6
Голосов: 6
Буквально вчера видел на сайте фрилансеров проект по внедрению визуального редактора в посты в блогах и вот относительно легкая реализация этого.

Для решения поставленной цели мы будем править: /components/blogs/frontend.php, /templates/_default_/components/com_blog_edit_post.tpl, /templates/_default_/components/com_blog_view.tpl и /templates/_default_/components/com_blog_view_posts.tpl (для своих файлов шаблонов делайте по аналогии).

Правка файла /components/blogs/frontend.php:

находим код (где то с 515 по 520 строчки):
Код PHP:
  1.  
  2. //получаем код панелей bbcode и смайлов
  3. $bb_toolbar = cmsPage::getBBCodeToolbar('message',$model->config['img_on'], 'blogs', 'post', $post_id);
  4. $smilies = cmsPage::getSmilesPanel('message');
  5.  
  6. $inCore->initAutoGrowText('#message');
  7.  
  8.  
и удаляем его.

чуть ниже находим код:
Код PHP:
  1.  
  2. $smarty->assign('bb_toolbar', $bb_toolbar);
  3. $smarty->assign('smilies', $smilies);
  4.  
и тоже удаляем.

еще чуть ниже находим код:
Код PHP:
  1.  
  2. $mod['content'] = cmsCore::request('content', 'html');
  3.  
и заменяем его на код:
Код PHP:
  1.  
  2. $mod['content_html'] = cmsCore::request('content_html', 'html', '');
  3.  
еще чуть ниже находим код:
Код PHP:
  1.  
  2. if (mb_strlen($mod['content'])<5) { cmsCore::addSessionMessage($_LANG['POST_ERR_TEXT'], 'error'); $errors=true; }
  3.  
и заменяем его на код:
Код PHP:
  1.  
  2. if (mb_strlen(strip_tags($mod['content_html']))<5) { cmsCore::addSessionMessage($_LANG['POST_ERR_TEXT'],'error'); $errors = true; }
  3.  
еще чуть ниже находим код:
Код PHP:
  1.  
  2. $added = $inBlog->addPost($mod);
  3.  
и заменяем его на код:
Код PHP:
  1.  
  2. //А вот тут хак для работы визуального редактора------------
  3. $mod = cmsCore::callEvent('ADD_POST', $mod);
  4. // Экранируем специальные символы
  5. $mod['content_html'] = cmsDatabase::escape_string($mod['content_html']);
  6. $mod['id'] = cmsDatabase::getInstance()->insert('cms_blog_posts', $mod);
  7. cmsInsertTags($mod['tags'], 'blogpost', $mod['id']);
  8. $mod['seolink'] = $inBlog->generatePostSeoLink($mod);
  9. cmsDatabase::getInstance()->query("UPDATE cms_blog_posts SET seolink='". $mod['seolink'] ."' WHERE id = '". $added['id'] ."'");
  10. if ($mod['published']){
  11. cmsUser::checkAwards($mod['user_id']);
  12. cmsCore::callEvent('ADD_POST_DONE', $mod);
  13. }
  14. cmsCore::setIdUploadImage('post', $mod['id']);
  15. //----------------------------------------------------------
  16.  
еще чуть ниже находим код:
Код PHP:
  1.  
  2. 'object_url' => $model->getPostURL($blog['seolink'], $added['seolink']),
  3. 'object_id' => $added['id'],
  4.  
и заменяем его на код:
Код PHP:
  1.  
  2. 'object_url' => $model->getPostURL($blog['seolink'], $mod['seolink']),
  3. 'object_id' => $mod['id'],
  4.  
еще чуть ниже находим код:
Код PHP:
  1.  
  2. cmsCore::redirect($model->getPostURL($blog['seolink'], $added['seolink']));
  3.  
и заменяем его на код:
Код PHP:
  1.  
  2. cmsCore::redirect($model->getPostURL($blog['seolink'], $mod['seolink']));
  3.  
еще чуть ниже находим код:
Код PHP:
  1.  
  2. $message = str_replace('%post%', '<a href="'.$model->getPostURL($blog['seolink'], $added['seolink']).'">'.$mod['title'].'</a>', $message);
  3.  
и заменяем его на код:
Код PHP:
  1.  
  2. $message = str_replace('%post%', '<a href="'.$model->getPostURL($blog['seolink'], $mod['seolink']).'">'.$mod['title'].'</a>', $message);
  3.  
еще чуть ниже находим код:
Код PHP:
  1.  
  2. $new_post_seolink = $inBlog->updatePost($post['id'], $mod, $model->config['update_seo_link']);
  3.  
  4. $post['seolink'] = is_string($new_post_seolink) ? $new_post_seolink : $post['seolink'];
  5.  
и заменяем его на код:
Код PHP:
  1.  
  2. //А вот тут хак для работы визуального редактора------------
  3. $mod['id'] = $post['id'];
  4. $mod = cmsCore::callEvent('UPDATE_POST', $mod);
  5. if ($model->config['update_seo_link']){
  6. $mod['seolink'] = $inBlog->generatePostSeoLink($mod);
  7. }
  8. $mod['content_html'] = cmsDatabase::escape_string($mod['content_html']);
  9. cmsDatabase::getInstance()->update('cms_blog_posts', $mod, $mod['id']);
  10. cmsInsertTags($mod['tags'], 'blogpost', $mod['id']);
  11. //----------------------------------------------------------
  12.  
На этом редактирование файла /components/blogs/frontend.php закончено переходим к редактированию файлов шаблона, начнем со страницы редактирования поста /templates/_default_/components/com_blog_edit_post.tpl

находим код:
Код PHP:
  1.  
  2. <div class="usr_msg_bbcodebox">{$bb_toolbar}</div>
  3. {$smilies}
  4. {$autogrow}
  5. <div class="cm_editor"><textarea class="ajax_autogrowarea" name="content" id="message">{$mod.content|escape:'html'}</textarea></div>
  6. <div style="margin-top:12px;margin-bottom:15px;" class="hinttext">
  7. <strong>{$LANG.IMPORTANT}:</strong> {$LANG.CUT_TEXT},<br/>
  8. <a href="javascript:addTagCut('message');" class="ajaxlink">{$LANG.ADD_CUT_TAG}</a> {$LANG.BETWEEN}.
  9. </div>
  10.  
и заменяем его на код:
Код PHP:
  1.  
  2. {wysiwyg name='content_html' value=$mod.content_html height=400 width='100%'}
  3.  
на этом и с этим файлом все.

Теперь остается одна проблема в визуальных редакторах нету кнопки вставить разделитель для указания границ анонса, можно конечно вручную писать [ cut = Читать далее... ] но это как то надо и пользователям объяснить, я же в этой инструкции расмотрю просто как обрезать полный текст в шаблоне до нужной длины для анонса, в файле /templates/_default_/components/com_blog_view.tpl
находим код
Код PHP:
  1. {$post.content_html}
и заменяем его на
Код PHP:
  1. {$post.content_html|strip_tags:false|truncate:250:'...'}
тоесть сперва очищаем от тегов а потом обрезаем до 250 символов
так же делаем и в файле /templates/_default_/components/com_blog_view_posts.tpl, у себя на сайте я буду делать более глобальное изменение и добавлю поле анонса для заполнения при добавлении поста эту инструкцию выложу позднее.

Для спонсоров )))
ВНИМАНИЕ!!! Сперва делайте все правки на локальном сайте и только потом на рабочем.
Комментарии (5)
Letsgo #
: +1
Переносим html редактор в блоги таким образом?
Grivit #
: 0
На 1.10.3 не знаете, будет работать? А еще будет ли работать плагин ливэдитора? Не понимаю смысла бб-кода, нормально запись не оформишь, предпросмотра нету.
RA #
: +1
Спасибо все работает на ура
Виталий #
: 0
Как в том анекдоте "Ну где ж ты был, когда я женился" smile

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

2
RA #
: 0
Сори сам редактор появляется в 1.10.1 но после добавления блога появляется ошибка
Страница не найдена — 404
Возможно, она была удалена или перемещена.
Очень жалко что не доработанный хак а тк полезная тема былабы

Голосуем

Самый нужный компонент