bb коды таблиц
вопрос по связкам с MS Word
Одна страница
Распечатать
Здравствуйте!
Есть необходимость копировать таблицу из Word и вставлять в сообщение в теме (пользователи форума таковы, что они не будут заниматься правкой кодов, только пользоваться кнопочками в редакторе сообщения).
На данный момент что имеется:
1. Таблица вставляется (были дописаны bb коды table tr и td).
До прописывания новых bb кодов вставленная таблица отображалась так:
2. При вставке таблицы, в которой есть объединенные ячейки и столбцы, они, соответственно, теряются (съедаются colspan и rowspan).
Можно ли с этим что-то сделать или, может быть, уже сделано, а я не нашла?
Заранее спасибо.
Есть необходимость копировать таблицу из Word и вставлять в сообщение в теме (пользователи форума таковы, что они не будут заниматься правкой кодов, только пользоваться кнопочками в редакторе сообщения).
На данный момент что имеется:
1. Таблица вставляется (были дописаны bb коды table tr и td).
До прописывания новых bb кодов вставленная таблица отображалась так:
[table][tr][td]
[font=\'Times New Roman\', serif]Режим[/font]
[/td]
2. При вставке таблицы, в которой есть объединенные ячейки и столбцы, они, соответственно, теряются (съедаются colspan и rowspan).
Можно ли с этим что-то сделать или, может быть, уже сделано, а я не нашла?
Заранее спасибо.
. Редактировалось 2 раза, последний — #2
По поводу пункта 2 можно сделать регулярное выражение с проверкой на наличие colspan и rowspan. Если бы вы выложили дописанный вами код для этих тегов, было бы проще что-то подсказать. Но выглядеть это будет примерно так:
preg_replace('\[td(\s+(col|row)span="\d+")?\]','<td$1>',$text);
Единственное что, такой код не сработает для ячеек, у которых есть colspan и rowspan одновременно.
preg_replace('\[td(\s+(col|row)span="\d+")?\]','<td$1>',$text);
Единственное что, такой код не сработает для ячеек, у которых есть colspan и rowspan одновременно.
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
. Редактировалось 1 раз, последний — #3
извиняюсь, что с нового аккаунта - не смогла вспомнить пароль и напоминалка не приходит на почту.
первое - спасибо за помощь!
так как не сильна в регулярных выражениях, то 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 Кб)
ElenaA, тогда код будет выглядеть так:
\s* в начале и конце выражения, по идее, решит проблему лишних переводов строк.
Чтобы понять, откуда берется отступ, щелкните по нему правой кнопкой мышки и выберите "Просмотр кода элемента" (в Chrome или Яндекс.Бразуере, хотя в Firefox тоже есть аналогичная функция, но сделана хуже), окажется выделенным тот элемент, который отступ порождает. Там же можно попробовать редактировать CSS или посмотреть вложенные теги.
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 и т.п.
преобразуется в, соответственно :
никак не могу эти апострофы записать в регулярное выражение, чтобы шрифт был такой, как запланирован в word
основывалась на выражении из файла исходного:
понимаю, что
а) можно заставить пользователей пользоваться кнопочкой "снять форматирование", но пользователи - воспитатели детского сада, там реально проще подстроиться под их "ctrlC ctrlV"
б) надо изучать досконально регулярные выражения
но пока ни тот, ни другой вариант не доступны, к сожалению, посему прошу помощи!
заранее спасибо!
всё получилось.
лишнее до таблицы тоже нашла, лишний 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"
б) надо изучать досконально регулярные выражения
но пока ни тот, ни другой вариант не доступны, к сожалению, посему прошу помощи!
заранее спасибо!
. Редактировалось 2 раза, последний — #6
Дело в том, что там на регулярные выражения накладывается синтаксис PHP, поэтому их нужно экранировать косой чертой (\) вот так:
И еще важный момент: пропускать можно только апострофы, двойные кавычки пропускать нельзя, так как это создаст проблему с безопасностью (появится возможность внедрять через этот тег JavaScript и устраивать XSS-атаки).
self::$search[]='|\[font=([a-zA-Z\- \']+)\](.*?)\[/font\]|s'; self::$replace[]='<span style="font-family: $1">$2</span>';
И еще важный момент: пропускать можно только апострофы, двойные кавычки пропускать нельзя, так как это создаст проблему с безопасностью (появится возможность внедрять через этот тег JavaScript и устраивать XSS-атаки).
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
. Редактировалось 5 раз, последний — #7
ElenaA написал(а):
Есть необходимость копировать таблицу из Word и вставлять в сообщение в теме
Самый простой способ вставить табличку в пост — через буфер обмена скопировать её из документа или из броузера. Этот способ и сейчас работает в режиме предварительного просмотра (). НО, к сожалению, при [Отправке] поста официальный движок этого форума эти табличные теги не сохраняет.
--
Есть два других способа публикации таблиц:
3) графический архивСпособ-3 — это действительно шикарный способ!
- Он обеспечивает целостность данных: меняя первичные данные, можно редактировать конкретную табличку одновременно на всех сайтах, где она опубликована! К сожалению, первичную табличку на этом форуме не опубликуешь, т.к. здесь не поддерживается возможность замены аттачей (чтобы старые ссылки по-прежнему указывали на обновлённый файл)
- Шикарное форматирование таблиц! bb-коды даже близко не могут предоставить таких возможностей!!
- Из опубликованных таблиц можно через буфер обмена копировать не только текст ячеек, но и форматирование (в том числе, спойлеры: табличная ячейка кроме основного текста содержит дополнительное содержимое (в том числе, картинки). Спойлер можно разворачивать в любой части документа (обычно, его разворачивают вне таблицы, или, хотя бы, отдельной табличной строкой).
- Таблицу можно масштабировать отдельно от текста сообщения.
- Вместе с таблицей в архив можно поместить сопутствующую информацию (описание, ссылки, подпись, и т.д.
(графический архив)
Прикрепленные файлы:
-
/Предварительный просмотр (кнопка).png (1428 байтов)
Одна страница
Распечатать У вас нет прав для отправки сообщений в эту тему.