html код в блоги

#16 5 июня 2013 в 13:59
Версия инстант у вас какая?
#17 5 июня 2013 в 14:03
последняя 1.10.1
#18 5 июня 2013 в 14:44


последняя 1.10.1

Potapych

открывайте файл /templates/_default_/components/com_blog_edit_post.tpl
находите строка примерно 72
  1.  
  2. <td colspan="2">
  3. <div class="usr_msg_bbcodebox">{$bb_toolbar}</div>
  4. {$smilies}
  5. {$autogrow}
  6.  
заменяете чтобы стало так:
  1.  
  2. <td colspan="2">
  3. {if !$is_admin}
  4. <div class="usr_msg_bbcodebox">{$bb_toolbar}</div>
  5. {$smilies}
  6. {/if}
  7. {$autogrow}
  8.  
сохраняет файл
и открываете другой /core/classes/blog.class.php

в нем находите две одноименные функции и заменяете на те что приводятся ниже:
  1.  
  2. public function addPost($item){
  3.  
  4. $item = cmsCore::callEvent('ADD_POST', $item);
  5. $inUser = cmsUser::getInstance();
  6.  
  7. //парсим bb-код перед записью в базу
  8. // Парсим по отдельности части текста, если есть тег [cut
  9.  
  10. $parse_bb = $inUser->is_admin ? false : true;
  11.  
  12. if (mb_strstr($item['content'], '[cut')){
  13. $msg_to = $this->getPostShort($item['content']);
  14. $msg_to = cmsCore::parseSmiles($msg_to, $parse_bb);
  15. $msg_after = $this->getPostShort($item['content'], false, true);
  16. $msg_after = cmsCore::parseSmiles($msg_after, $parse_bb);
  17. $cut = $this->getPostCut($item['content']);
  18. $item['content_html'] = $msg_to . $cut . $msg_after;
  19. } else {
  20. $item['content_html'] = cmsCore::parseSmiles($item['content'], $parse_bb);
  21. }
  22. // Экранируем специальные символы
  23. if ( $parse_bb ) {
  24. $item['content'] = cmsDatabase::escape_string($item['content']);
  25. $item['content_html'] = cmsDatabase::escape_string($item['content_html']);
  26. }
  27.  
  28. $post_id = $this->inDB->insert('cms_blog_posts', $item);
  29.  
  30. if(!$post_id) { return false; }
  31.  
  32. cmsInsertTags($item['tags'], $this->getTarget('tags'), $post_id);
  33.  
  34. $item['id'] = $post_id;
  35. $item['seolink'] = $this->generatePostSeoLink($item);
  36.  
  37. $this->inDB->query("UPDATE cms_blog_posts SET seolink='{$item['seolink']}' WHERE id = '{$post_id}'");
  38.  
  39. if ($item['published']){
  40. cmsUser::checkAwards($item['user_id']);
  41. cmsCore::callEvent('ADD_POST_DONE', $item);
  42. }
  43.  
  44. cmsCore::setIdUploadImage('post', $post_id);
  45.  
  46. return array('id'=>$post_id, 'seolink'=>$item['seolink']);
  47.  
  48. }
  49.  
  1.  
  2. public function updatePost($post_id, $item, $update_seo_link = false){
  3.  
  4. $item['id'] = $post_id;
  5.  
  6. $item = cmsCore::callEvent('UPDATE_POST', $item);
  7. $inUser = cmsUser::getInstance();
  8.  
  9. $parse_bb = $inUser->is_admin ? false : true;
  10.  
  11. if ($update_seo_link){
  12. $item['seolink'] = $this->generatePostSeoLink($item);
  13. }
  14.  
  15. if (mb_strstr($item['content'], '[cut')){
  16. $msg_to = $this->getPostShort($item['content']);
  17. $msg_to = cmsCore::parseSmiles($msg_to, $parse_bb);
  18. $msg_after = $this->getPostShort($item['content'], false, true);
  19. $msg_after = cmsCore::parseSmiles($msg_after, $parse_bb);
  20. $cut = $this->getPostCut($item['content']);
  21. $item['content_html'] = $msg_to . $cut . $msg_after;
  22. } else {
  23. $item['content_html'] = cmsCore::parseSmiles($item['content'], $parse_bb);
  24. }
  25.  
  26. if ( $parse_bb ) {
  27. $item['content'] = cmsDatabase::escape_string($item['content']);
  28. $item['content_html'] = cmsDatabase::escape_string($item['content_html'] . 'парсер сработал');
  29. }
  30.  
  31. $this->inDB->update('cms_blog_posts', $item, $post_id);
  32.  
  33. cmsInsertTags($item['tags'], $this->getTarget('tags'), $post_id);
  34.  
  35. return isset($item['seolink']) ? $item['seolink'] : true;
  36.  
  37. }
  38.  
#19 5 июня 2013 в 15:02
• Mike •, огромное спасибо за помощь! буду пробовать
у меня шаблон не дефолтный, все равно менять в /templates/_default_/ ?

и еще вы писали:
Добавьте проверку на админа перед вставкой панели редактора в шаблоне блога
И во frontend.php блогов при записи и обновлении поста для админа в функции parseSmiles() вторым параметром укажите false

вот с этим бы еще поподробнее, потому что эти изменения мне дадут текстовую область без обработки BB во всех блогах?
#20 5 июня 2013 в 15:09

у меня шаблон не дефолтный, все равно менять в /templates/_default_/ ?

Potapych

— нет меняйте в своем шаблоне…

И во frontend.php блогов при записи и обновлении поста для админа в функции parseSmiles() вторым параметром укажите false

Potapych

— в 1.10.1 функции вынесены в класс…

Всё что вам нужно сделать я описал в посте №18.
#21 5 июня 2013 в 16:57
• Mike •, работает но с небольшим багом...
создаю пост — вставляю исходный код — сохраняю — в результате на странице исходный код так и показывается с html тегами
если еще раз редактировать запсиь (пересохранить) — то теперь отображается нормально как и должно быть

как это можно поправить?
#22 5 июня 2013 в 17:46
и еще… он получается и BB коды понимать будет после изменений?
покрайне мере [cut=Читать далее...] — это работает!
Если да — то это еще лучше! Только бы тогда можно вернуть панельку с кнопками? как это сделать?
#23 5 июня 2013 в 18:02

и еще… он получается и BB коды понимать будет после изменений?
покрайне мере [cut=Читать далее...] — это работает!

Potapych

— кроме этого тега больше ничего не будет обрабатываться


создаю пост — вставляю исходный код — сохраняю

Potapych

— проверьте правильно ли вы изменили функцию addPost()
#24 5 июня 2013 в 18:13
еще раз скопировал ваш код и вставил — заработало!
еще раз вам огромное спасибо за помощь! кармы прибавил сколько мог и удачи вам!
#25 5 июня 2013 в 18:30
да, не за что, пользуйтесь если пригодилось… )
#26 5 июня 2013 в 20:00
• Mike •, а можно ли сделать как-то визуальный редактор для блога? Вы не могли бы, пожалуйста, подсказать где стоит копать? Есть решение под 1.7 (?), но к сожалению оно слишком устарелое, теперь уже и кода такого нету…
#27 5 июня 2013 в 20:13
Дело в том что готовых WYSIWYG редакторов (бесплатных) с аналогичным функционалом как у стандартного бб-редактора нет в природе… (+ при этом бы не пострадали старые посты, в блогах форумах и комментариях)
В 1.10.1 есть все эвенты чтобы реализовать это плагином, но см. 1 пункт…
Ну и довольно много где придётся править чтобы это правильно реализовать.
У меня есть в планах разработка WYSIWYG редактора под 1.10.2 но релиз будет скорее всего после лета на основе SCEditor 1.4.x…
#28 6 июня 2013 в 13:28
для отключения обработки ссылок:
заменяем функцию в core/cms.php
  1.  
  2. public static function parseSmiles($text, $parse_bbcode=false){
  3.  
  4. $inUser = cmsUser::getInstance();
  5.  
  6. $_parse_text = self::callEvent('GET_PARSER', array('return'=>'','text'=>$text,'parse_bbcode'=>$parse_bbcode));
  7. if($_parse_text['return']){ return $_parse_text['return']; }
  8.  
  9. self::includeFile('includes/bbcode/bbcode.lib.php');
  10.  
  11. if (!$parse_bbcode){
  12. $text = $inUser->is_admin ? $text : bbcode::autoLink($text);
  13. } else {
  14. //parse bbcode
  15. $bb = new bbcode($text);
  16. $text = $bb->get_html();
  17. // конвертируем в смайлы в изображения
  18. $text = $bb->replaceEmotionToSmile($text);
  19. }
  20.  
  21. return $text;
  22.  
  23. }
  24.  
#29 6 июня 2013 в 13:56
вставил несколько раз ваш последний код… Но что то странное...
Вставляю целиком весь код статьи — ничего не сохраняется
пробую частями по чуть чуть добавлять код и сохранять — сохраняется! как будто какое то ограничение стоит?
#30 6 июня 2013 в 14:07
сейчас постепенно вставлял по частям и вот эту часть кода он не хочет сохранять
  1.  
  2. <p>текст, текст&hellip; <span style="line-height: 115%; font-family: 'Calibri','sans-serif'; color: red; font-size: 12pt; font-weight: bold">А теперь не очень &ldquo;вкусная&rdquo; правда, текст!</span></p>
  3.  
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.