редактор в Каталог статей.

#61 20 февраля 2012 в 17:12


имхо, выход один — уйти от ббкодов вовсе и сделать мини редактор html с допустимыми тегами и, например, с использованием библиотеки Jevix.

Fuze
да, тоже думал об этом, про Jevix не слышал, поищу, хотел HTML Purifier на правила приспособить…

Помогите! Только один редактор везде. Не встречал ещё CMS с 2 редакторами одновременно. (((

есть и 4 только специализированных для разных задач… )
#62 20 февраля 2012 в 17:40

в блогах при редактировании он открывается с бб-кодами которые хранятся в БД в специально выделенном поле а показывает уже конвертированный контент который хранится в другом поле
а, тут запись хранится сразу с html и без бб-кодов

• Mike •

хм. а можно сделать обратную конвертацию? в дле например он вот так прогоняет перед тем как отдать в редактор
в визивинг

  1. $txt = str_replace( "<b>", "[b]", str_replace( "</b>", "[/b]", $txt ) );
  2. $txt = str_replace( "<i>", "[i]", str_replace( "</i>", "[/i]", $txt ) );
  3. $txt = str_replace( "<u>", "[u]", str_replace( "</u>", "[/u]", $txt ) );
  4. $txt = str_replace( "<s>", "[s]", str_replace( "</s>", "[/s]", $txt ) );
а вот так в ббкод
  1. $source = str_ireplace( "[b]", "<b>", str_ireplace( "[/b]", "</b>", $source ) );
  2. $source = str_ireplace( "[i]", "<i>", str_ireplace( "[/i]", "</i>", $source ) );
  3. $source = str_ireplace( "[u]", "<u>", str_ireplace( "[/u]", "</u>", $source ) );
  4. $source = str_ireplace( "[s]", "<s>", str_ireplace( "[/s]", "</s>", $source ) );
причем это древнее решение которое еще c cutenews в дле висит.
Группе, к которой вы принадлежите, запрещено просматривать этот скрытый текст
#63 20 февраля 2012 в 20:13
это только часть тегов, а для тех кто пользовался вставкой таблиц, списков и т.д., в смысле с существующим материалом им то как поступать?
Jevix посмотрел, php реализация требует UTF-8, так что если только в 1.9.1 (UTF)…
#64 20 февраля 2012 в 20:33
А там все это тоже разбирается, я кусок просто выдернул
#65 21 февраля 2012 в 12:17
да, я не написал — в админке, пока не работает…
#66 21 февраля 2012 в 13:31

хм. а можно сделать обратную конвертацию?

picaboo
посмотрел библиотеку, ну они вешают кучу маркеров в виде html комментов и обратный парсинг происходит через них, т.е. в БД еще будет хранится кучка мусора вместе с нужным текстом, не берусь судить насколько это правильно, но на мой взгляд — как-то не очень…
а потом, в iCMS есть смарти, вывод через него идёт по-любому можно просто написать префильтр, хотя с админкой по-другому как-то придётся…
#67 21 февраля 2012 в 13:43

БД еще будет хранится кучка мусора вместе с нужным текстом

• Mike •

а сейчас просто хранится дубль контента который увеличивает базу ровно в два раз :)
#68 21 февраля 2012 в 13:46
БД работает шустрее любых парсеров так что смысла в этом больше… )
#69 21 февраля 2012 в 13:50
а смарти же умеет bbcode обрабатывать. это не поможет? хотя будет дольше, это получится что будет парсится каждый раз шаблон перед выводом

  1. Преобразует bb-теги в тексте в html форматирование
  2. {$commentText|bbcode}
все идет к тому, что проще сделать визивинг
#70 21 февраля 2012 в 13:59
это где такое? самописный модификатор?
#71 21 февраля 2012 в 14:05
хм. на оффсайте не нашел, но это есть в мануале к другой cms на smarty 3
wiki.a-cms.ru/smarty/smarty3
#72 21 февраля 2012 в 14:09
значит они сами для своей cms писали, надо будет посмотреть. спасибо за ссылку…
#73 21 февраля 2012 в 14:15
нет, у них к сожалению просто обёртка к функции движка
#74 21 февраля 2012 в 14:19
нашел. это сторонний модификатор
  1. <?php
  2. /*
  3.  * Smarty plugin
  4.  * ------------------------------------------------------------
  5.  * Type: modifier
  6.  * Name: bbcode
  7.  * Purpose: Converts BBCode tags to HTML tags.
  8.  * Version: 1.4.5
  9.  * Date: 31.08.2006
  10.  *
  11.  * Install: Drop into the plugins directory.
  12.  * Author: Sam
  13.  * Homepage: http://rmcreative.ru/
  14.  *
  15.  * Based on Andre Rabold's bbcode modifier.
  16.  * Added: some new tags
  17.  * php code highlighting
  18.  * new line to <br> converter
  19.  * antispam mail protection
  20.  * rss compatibility
  21.  *
  22.  * Changes
  23.  * 1.3:
  24.  * [+] [h2],[h3],[h4],[h5],[h6] added
  25.  * [*] [strike] tag changed to [s]
  26.  * [*] More tags added & removed
  27.  *
  28.  * 1.4
  29.  * [+] "@" replacement to ".sobaka." in email tag
  30.  * [*] HTML entities displaying in [php] tags fixed
  31.  * [-] HTML stripping removed
  32.  *
  33.  * 1.4.1
  34.  * [*] <img/> tag changed to <img>
  35.  *
  36.  * 1.4.2
  37.  * [*] All external CSS built in
  38.  * [+] RSS Feeds Compatible
  39.  *
  40.  * 1.4.3
  41.  * [*] HTML tags displaying fixed
  42.  *
  43.  * 1.4.4
  44.  * [-] Some unncessary code cleaned ;)
  45.  * [*] HTML displaying fixed once again
  46.  *
  47.  * 1.4.5
  48.  * [+] Valid e-mail indexing prevention
  49.  *
  50.  * ------------------------------------------------------------
  51.  */
  52.  
  53. function smarty_modifier_bbcode($message) {
  54. $preg = array(
  55. '~<([^<]+)>~' => '&lt;$1&gt;',
  56. // Macromedia flash object (commented for security reasons)
  57. //'~(?<!\\\\)\[flash(?::\w+)?=(.*?)x(.*?)\](.*?)\[/flash(?::\w+)?\]~si' => '<object width="\1" height="\2"><param name="movie" value="\3" /><embed src="\3" width="\1" height="\2"></embed></object>',
  58. // Text arrtibutes
  59. '~(?<!\\\\)\[s(?::\w+)?\](.*?)\[/s(?::\w+)?\]~si' => '<span style="text-decoration:line-through;">\1</span>',
  60. '/(?<!\\\\)\[b(?::\w+)?\](.*?)\[\/b(?::\w+)?\]/si' => "<span style=\"font-weight:bold\">\\1</span>",
  61. '/(?<!\\\\)\[i(?::\w+)?\](.*?)\[\/i(?::\w+)?\]/si' => "<span style=\"font-style:italic\">\\1</span>",
  62. '/(?<!\\\\)\[u(?::\w+)?\](.*?)\[\/u(?::\w+)?\]/si' => "<span style=\"text-decoration:underline\">\\1</span>",
  63. '/(?<!\\\\)\[color(?::\w+)?=(.*?)\](.*?)\[\/color(?::\w+)?\]/si' => "<span style=\"color:\\1\">\\2</span>",
  64. //align
  65. '/(?<!\\\\)\[leftfloat(?::\w+)?\](.*?)\[\/leftfloat(?::\w+)?\]/si' => "<div style=\"float: left; margin-right: 10px; margin-left: 10px; clear: none;\">\\1</div>",
  66. '/(?<!\\\\)\[rightfloat(?::\w+)?\](.*?)\[\/rightfloat(?::\w+)?\]/si' => "<div style=\"float: right; margin-right: 10px; margin-left: 10px; clear: none\">\\1</div>",
  67. '/(?<!\\\\)\[center(?::\w+)?\](.*?)\[\/center(?::\w+)?\]/si' => "<div style=\"text-align: center\">\\1</div>",
  68. '/(?<!\\\\)\[left(?::\w+)?\](.*?)\[\/left(?::\w+)?\]/si' => "<div style=\"text-align: left\">\\1</div>",
  69. '/(?<!\\\\)\[right(?::\w+)?\](.*?)\[\/right(?::\w+)?\]/si' => "<div style=\"text-align: right\">\\1</div>",
  70. //headers
  71. '/(?<!\\\\)\[h1(?::\w+)?\](.*?)\[\/h1(?::\w+)?\]/si' => "<span style=\"font-size:145%;\">\\1</span>",
  72. '/(?<!\\\\)\[h2(?::\w+)?\](.*?)\[\/h2(?::\w+)?\]/si' => "<span style=\"font-size:135%;\">\\1</span>",
  73. '/(?<!\\\\)\[h3(?::\w+)?\](.*?)\[\/h3(?::\w+)?\]/si' => "<span style=\"font-size:125%;\">\\1</span>",
  74. '/(?<!\\\\)\[h4(?::\w+)?\](.*?)\[\/h1(?::\w+)?\]/si' => "<span style=\"font-size:115%;\">\\1</span>",
  75. '/(?<!\\\\)\[h5(?::\w+)?\](.*?)\[\/h2(?::\w+)?\]/si' => "<span style=\"font-size:105%;\">\\1</span>",
  76. '/(?<!\\\\)\[h6(?::\w+)?\](.*?)\[\/h3(?::\w+)?\]/si' => "<span style=\"font-size:95%;\">\\1</span>",
  77.  
  78. // Code & PHP frames. PHP is highlighted ;)
  79. '/(?<!\\\\)\[code(?::\w+)?\](.*?)\[\/code(?::\w+)?\]/si' => "<div style=\"text-align: left; border: 1px solid #cccccc; background-color: #e8e8e8; padding-left: 10px; padding-right: 10px; font-family: Courier-new, monospace; font-size:13\">\\1</div>",
  80. '/(?<!\\\\)\[php(?::\w+)?\](.*?)\[\/php(?::\w+)?\]/sei' => "'<div style=\"text-align: left; border: 1px solid #cccccc; background-color: #e8e8e8; padding-left: 10px; padding-right: 10px; font-family: Courier-new, monospace; font-size:13\">'.highlight_string('<?php\n'.'$1'.'\n?>', true).'</div>'",
  81.  
  82. // email with indexing prevention & @ replacement
  83. '/(?<!\\\\)\[email(?::\w+)?\](.*?)\[\/email(?::\w+)?\]/sei' => "'<a rel=\"noindex\" href=\"mailto:'.str_replace('@', '.at.','$1').'\">'.str_replace('@', '.at.','$1').'</a>'",
  84. '/(?<!\\\\)\[email(?::\w+)?=(.*?)\](.*?)\[\/email(?::\w+)?\]/sei' => "'<a rel=\"noindex\" href=\"mailto:'.str_replace('@', '.at.','$1').'\">$2</a>'",
  85. //"'\\1'.strtoupper('\\2').'\\3'"
  86. // links
  87. '/(?<!\\\\)\[url(?::\w+)?\]www\.(.*?)\[\/url(?::\w+)?\]/si' => "<a href=\"http://www.\\1\">\\1</a>",
  88. '/(?<!\\\\)\[url(?::\w+)?\](.*?)\[\/url(?::\w+)?\]/si' => "<a href=\"\\1\">\\1</a>",
  89. '/(?<!\\\\)\[url(?::\w+)?=(.*?)?\](.*?)\[\/url(?::\w+)?\]/si' => "<a href=\"\\1\">\\2</a>",
  90. // images
  91. '/(?<!\\\\)\[img(?::\w+)?\](.*?)\[\/img(?::\w+)?\]/si' => "<img src=\"$1\" alt=\"$1\" style=\"border: 2px solid #DCD6C4\">",
  92. '/(?<!\\\\)\[img(?::\w+)?=(.*?)x(.*?)\](.*?)\[\/img(?::\w+)?\]/si' => "<img width=\"$1\" height=\"$2\" src=\"$3\" alt=\"$3\" style=\"border: 2px solid #DCD6C4\">",
  93. // alt. images
  94. '/(?<!\\\\)\[nbimg(?::\w+)?\](.*?)\[\/nbimg(?::\w+)?\]/si' => "<img src=\"$1\" alt=\"$1\" style=\"border-style: none\" />",
  95. '/(?<!\\\\)\[nbimg(?::\w+)?=(.*?)x(.*?)\](.*?)\[\/nbimg(?::\w+)?\]/si' => "<img width=\"$1\" height=\"$2\" src=\"$3\" alt=\"$3\" style=\"border-style: none\">",
  96. // quoting
  97. '/(?<!\\\\)\[quote(?::\w+)?\](.*?)\[\/quote(?::\w+)?\]/si' => "<div>Цитата:<div style=\"border: 1px solid #cccccc; background-color: #e8e8e8; padding: 10px\">\\1</div></div>",
  98. '/(?<!\\\\)\[quote(?::\w+)?=(?:&quot;|"|\')?(.*?)["\']?(?:&quot;|"|\')?\](.*?)\[\/quote\]/si' => "<div>\\1:<div style=\"border: 1px solid #cccccc; background-color: #e8e8e8; padding: 10px\">\\2</div></div>",
  99. // lists
  100. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\*(?::\w+)?\](.*?)(?=(?:\s*<br\s*\/?>\s*)?\[\*|(?:\s*<br\s*\/?>\s*)?\[\/?list)/si' => "\n<li>\\1</li>",
  101. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\/list(:(?!u|o)\w+)?\](?:<br\s*\/?>)?/si' => "\n</ul>",
  102. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\/list:u(:\w+)?\](?:<br\s*\/?>)?/si' => "\n</ul>",
  103. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\/list:o(:\w+)?\](?:<br\s*\/?>)?/si' => "\n</ol>",
  104. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(:(?!u|o)\w+)?\]\s*(?:<br\s*\/?>)?/si' => "\n<ul>",
  105. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list:u(:\w+)?\]\s*(?:<br\s*\/?>)?/si' => "\n<ul>",
  106. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list:o(:\w+)?\]\s*(?:<br\s*\/?>)?/si' => "\n<ol>",
  107. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=1\]\s*(?:<br\s*\/?>)?/si' => "\n<ol style=\"list-style-type:decimal\">",
  108. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=i\]\s*(?:<br\s*\/?>)?/s' => "\n<ol style=\"list-style-type:lower-roman\">",
  109. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=I\]\s*(?:<br\s*\/?>)?/s' => "\n<ol style=\"list-style-type:upper-roman\">",
  110. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=a\]\s*(?:<br\s*\/?>)?/s' => "\n<ol style=\"list-style-type:lower-alpha\">",
  111. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=A\]\s*(?:<br\s*\/?>)?/s' => "\n<ol style=\"list-style-type:upper-alpha\">",
  112.  
  113. // escaped tags like \[b], \[color], \[url], e.t.c.
  114. '/\\\\(\[\/?\w+(?::\w+)*\])/' => "\\1",
  115.  
  116. //new line to <br>
  117. '~\n~' => '<br>'
  118.  
  119.  
  120. );
  121. return preg_replace(array_keys($preg), array_values($preg), $message);
  122. }
#75 21 февраля 2012 в 14:28
ага, но тут это делает встроенный парсер, который тоже можно загнать в обертку в виде плагина, нужен то обратный из html в обратно в ББ…
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.