bb коды таблиц
вопрос по связкам с MS Word
Здравствуйте!
Есть необходимость копировать таблицу из Word и вставлять в сообщение в теме (пользователи форума таковы, что они не будут заниматься правкой кодов, только пользоваться кнопочками в редакторе сообщения).
На данный момент что имеется:
1. Таблица вставляется (были дописаны bb коды table tr и td).
До прописывания новых bb кодов вставленная таблица отображалась так:
[table][tr][td]
[font=\'Times New Roman\', serif]Режим[/font]
[/td]
2. При вставке таблицы, в которой есть объединенные ячейки и столбцы, они, соответственно, теряются (съедаются colspan и rowspan).
Можно ли с этим что-то сделать или, может быть, уже сделано, а я не нашла?
Заранее спасибо.
По поводу пункта 2 можно сделать регулярное выражение с проверкой на наличие colspan и rowspan. Если бы вы выложили дописанный вами код для этих тегов, было бы проще что-то подсказать. Но выглядеть это будет примерно так:
preg_replace('\[td(\s+(col|row)span="\d+")?\]','<td$1>',$text);
Единственное что, такой код не сработает для ячеек, у которых есть colspan и rowspan одновременно.
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
извиняюсь, что с нового аккаунта - не смогла вспомнить пароль и напоминалка не приходит на почту.
первое - спасибо за помощь!
так как не сильна в регулярных выражениях, то bb коды для отображения таблицы просто написала по шаблону, который был в коде файла bbcode:
self::$search[]='|\[table\](.*?)\[/table\]|s'; self::$replace[]='<div class="table_word"><table>$1</table></div>';
self::$search[]='|\[tr\](.*?)\[/tr\]|s'; self::$replace[]='<tr>$1</tr>';
self::$search[]='|\[td\](.*?)\[/td\]|s'; self::$replace[]='<td>$1</td>';
итог в прилепленном файле.
понимаю, что в диве отступ до таблицы - это лишние переводы строк, но не знаю, как убрать их.
это первая проблема.
вторая - отступ до дива (до красного) - тут вообще не понимаю, где искать решение проблемы.
очень прошу помощи.
-

/Untitled - 1.jpg (43 Кб)
self::$search[]='|\s*\[td(\s+(col|row)span="\d+")?\](.*?)\[/td\]\s*|s'; self::$replace[]='<td$1>$2</td>';
self::$search[]='|\s*\[tr\](.*?)\[/tr\]\s*|s'; self::$replace[]='<tr>$1</tr>';
\s* в начале и конце выражения, по идее, решит проблему лишних переводов строк.
Чтобы понять, откуда берется отступ, щелкните по нему правой кнопкой мышки и выберите "Просмотр кода элемента" (в Chrome или Яндекс.Бразуере, хотя в Firefox тоже есть аналогичная функция, но сделана хуже), окажется выделенным тот элемент, который отступ порождает. Там же можно попробовать редактировать CSS или посмотреть вложенные теги.
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
спасибо Вам огромное!
всё получилось.
лишнее до таблицы тоже нашла, лишний float затесался 
теперь следующая проблема 
при вставке из word с разными шрифтами типа Times или Arial и т.п.
[table][tr]
[td]
[font='Times New Roman', serif]Первая [/font]
[/td]
[/tr]
[/table]
преобразуется в, соответственно :
[font=\'Times New Roman\', serif]Первая [/font]
никак не могу эти апострофы записать в регулярное выражение, чтобы шрифт был такой, как запланирован в word
основывалась на выражении из файла исходного:
self::$search[]='|\[font=([a-zA-Z\- ]+)\](.*?)\[/font\]|s'; self::$replace[]='<span style="font-family: $1">$2</span>';
понимаю, что
а) можно заставить пользователей пользоваться кнопочкой "снять форматирование", но пользователи - воспитатели детского сада, там реально проще подстроиться под их "ctrlC ctrlV"
б) надо изучать досконально регулярные выражения

но пока ни тот, ни другой вариант не доступны, к сожалению, посему прошу помощи!
заранее спасибо!
Дело в том, что там на регулярные выражения накладывается синтаксис PHP, поэтому их нужно экранировать косой чертой (\) вот так:
self::$search[]='|\[font=([a-zA-Z\- \']+)\](.*?)\[/font\]|s'; self::$replace[]='<span style="font-family: $1">$2</span>';
И еще важный момент: пропускать можно только апострофы, двойные кавычки пропускать нельзя, так как это создаст проблему с безопасностью (появится возможность внедрять через этот тег JavaScript и устраивать XSS-атаки).
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
Есть необходимость копировать таблицу из Word и вставлять в сообщение в теме
Самый простой способ вставить табличку в пост — через буфер обмена скопировать её из документа или из броузера. Этот способ и сейчас работает в режиме предварительного просмотра (
). НО, к сожалению, при [Отправке] поста официальный движок этого форума эти табличные теги не сохраняет.--
Есть два других способа публикации таблиц:
3)
графический архив
Способ-3 — это действительно шикарный способ!- Он обеспечивает целостность данных: меняя первичные данные, можно редактировать конкретную табличку одновременно на всех сайтах, где она опубликована! К сожалению, первичную табличку на этом форуме не опубликуешь, т.к. здесь не поддерживается возможность замены аттачей (чтобы старые ссылки по-прежнему указывали на обновлённый файл)
- Шикарное форматирование таблиц! bb-коды даже близко не могут предоставить таких возможностей!!
- Из опубликованных таблиц можно через буфер обмена копировать не только текст ячеек, но и форматирование (в том числе, спойлеры: табличная ячейка кроме основного текста содержит дополнительное содержимое (в том числе, картинки). Спойлер можно разворачивать в любой части документа (обычно, его разворачивают вне таблицы, или, хотя бы, отдельной табличной строкой).
- Таблицу можно масштабировать отдельно от текста сообщения.
- Вместе с таблицей в архив можно поместить сопутствующую информацию (описание, ссылки, подпись, и т.д.
(графический архив)-

/Предварительный просмотр (кнопка).png (1428 байтов)
У вас нет прав для отправки сообщений в эту тему.



