Intellect Board Pro
Расширяемая система управления форумами с открытым исходным кодом
Объявление
Выпущена версия 3.02 с двумя новыми типами разделов: блог и микроблог.
Перейти к скачиванию
Привет, гость!

bb коды таблиц

вопрос по связкам с MS Word

Настройки отображения темы Показывать по сообщений с сортировкой .
Выводить , отправленные .
Одна страница
Распечатать
ElenaA
Новичок
Всего сообщений: 1
Зарегистрирован: 22 сен 2015, 10:23
Рейтинг пользователя: 0

0
22 сентября 2015, 10:32#1
    Здравствуйте!
    Есть необходимость копировать таблицу из Word и вставлять в сообщение в теме (пользователи форума таковы, что они не будут заниматься правкой кодов, только пользоваться кнопочками в редакторе сообщения).
    На данный момент что имеется:
    1. Таблица вставляется (были дописаны bb коды table tr и td).
    До прописывания новых bb кодов вставленная таблица отображалась так: [table][tr][td] [font=\'Times New Roman\', serif]Режим[/font] [/td]
    2. При вставке таблицы, в которой есть объединенные ячейки и столбцы, они, соответственно, теряются (съедаются colspan и rowspan).
    Можно ли с этим что-то сделать или, может быть, уже сделано, а я не нашла?
    Заранее спасибо.

    4X_Pro
    Основатель проекта
    Всего сообщений: 240
    Зарегистрирован: 22 сен 2014, 18:56
    Откуда: Москва, Перово
    Рейтинг пользователя: 6

    0
    22 сентября 2015, 15:49. Редактировалось 2 раза, последний — 23 сентября 2015, 19:49#2
      По поводу пункта 2 можно сделать регулярное выражение с проверкой на наличие colspan и rowspan. Если бы вы выложили дописанный вами код для этих тегов, было бы проще что-то подсказать. Но выглядеть это будет примерно так:
      preg_replace('\[td(\s+(col|row)span="\d+")?\]','<td$1>',$text);
      Единственное что, такой код не сработает для ячеек, у которых есть colspan и rowspan одновременно.

      Критикуя — предлагай, предлагая — обосновывай!
      4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

      AlenaA
      Новичок
      Всего сообщений: 2
      Зарегистрирован: 25 сен 2015, 12:01
      Рейтинг пользователя: 0

      0
      25 сентября 2015, 12:10. Редактировалось 1 раз, последний — 25 сентября 2015, 12:11#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

        4X_Pro
        Основатель проекта
        Всего сообщений: 240
        Зарегистрирован: 22 сен 2014, 18:56
        Откуда: Москва, Перово
        Рейтинг пользователя: 6

        0
        28 сентября 2015, 16:10#4
          ElenaA, тогда код будет выглядеть так: 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.

          AlenaA
          Новичок
          Всего сообщений: 2
          Зарегистрирован: 25 сен 2015, 12:01
          Рейтинг пользователя: 0

          0
          10 октября 2015, 11:36#5
            спасибо Вам огромное!
            всё получилось.
            лишнее до таблицы тоже нашла, лишний 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"
            б) надо изучать досконально регулярные выражения
            но пока ни тот, ни другой вариант не доступны, к сожалению, посему прошу помощи!
            заранее спасибо!

            4X_Pro
            Основатель проекта
            Всего сообщений: 240
            Зарегистрирован: 22 сен 2014, 18:56
            Откуда: Москва, Перово
            Рейтинг пользователя: 6

            0
            12 октября 2015, 18:00. Редактировалось 2 раза, последний — 12 октября 2015, 18:19#6
              Дело в том, что там на регулярные выражения накладывается синтаксис PHP, поэтому их нужно экранировать косой чертой (\) вот так:
              self::$search[]='|\[font=([a-zA-Z\- \']+)\](.*?)\[/font\]|s'; self::$replace[]='<span style="font-family: $1">$2</span>';
              И еще важный момент: пропускать можно только апострофы, двойные кавычки пропускать нельзя, так как это создаст проблему с безопасностью (появится возможность внедрять через этот тег JavaScript и устраивать XSS-атаки).

              Критикуя — предлагай, предлагая — обосновывай!
              4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

              _1_
              Участник
              Всего сообщений: 232
              Зарегистрирован: 14 окт 2014, 09:11
              Рейтинг пользователя: 15

              0
              2 декабря 2015, 15:54. Редактировалось 5 раз, последний — 2 декабря 2015, 16:43#7
                ElenaA написал(а):
                Есть необходимость копировать таблицу из Word и вставлять в сообщение в теме

                Самый простой способ вставить табличку в пост — через буфер обмена скопировать её из документа или из броузера. Этот способ и сейчас работает в режиме предварительного просмотра (). НО, к сожалению, при [Отправке] поста официальный движок этого форума эти табличные теги не сохраняет.

                --

                Есть два других способа публикации таблиц:
                   

                2) приаттачить к посту doc-файл (в котором таблица)
                3) графический архивСпособ-3   — это действительно шикарный способ!
                • Он обеспечивает целостность данных: меняя первичные данные, можно редактировать конкретную табличку одновременно на всех сайтах, где она опубликована! К сожалению, первичную табличку на этом форуме не опубликуешь, т.к. здесь не поддерживается возможность замены аттачей (чтобы старые ссылки по-прежнему указывали на обновлённый файл)
                • Шикарное форматирование таблиц! bb-коды даже близко не могут предоставить таких возможностей!!
                • Из опубликованных таблиц можно через буфер обмена копировать не только текст ячеек, но и форматирование (в том числе, спойлеры: табличная ячейка кроме основного текста содержит дополнительное содержимое (в том числе, картинки). Спойлер можно разворачивать в любой части документа (обычно, его разворачивают вне таблицы, или, хотя бы, отдельной табличной строкой).
                • Таблицу можно масштабировать отдельно от текста сообщения.
                • Вместе с таблицей в архив можно поместить сопутствующую информацию (описание, ссылки, подпись, и т.д.
                Просматривать rar-аттачи 'рисунков' можно разными способами... Например, скачать рисунок, и перетащить его на иконку архиватора


                  (графический архив)



                Прикрепленные файлы:
                • Предварительный просмотр (кнопка).png

                Одна страница
                Распечатать

                У вас нет прав для отправки сообщений в эту тему.

                0: Контрольная точка "Конец инициализации". Время выполнения: 0.001. Запросов: 8, время запроса: 0.001 (48.85)%. Памяти использовано: 521776 байтов

                0: Контрольная точка "Фиксация действия пользователя выполнена". Время выполнения: 0.002. Запросов: 10, время запроса: 0.001 (52.91)%. Памяти использовано: 522104 байтов

                0: Контрольная точка "Основное действие выполнено". Время выполнения: 0.005. Запросов: 17, время запроса: 0.002 (40.66)%. Памяти использовано: 709872 байтов

                0: Контрольная точка "Вспомогательные действия выполнены". Время выполнения: 0.005. Запросов: 21, время запроса: 0.002 (41.46)%. Памяти использовано: 726512 байтов

                0: Контрольная точка "После срабатывания шаблонизатора.". Время выполнения: 0.010. Памяти использовано: 1020440 байтов