Страница 1 из 2

Простая bbcode таблица с неограниченной функциональностью

Добавлено: 06.02.2019 23:55
Пафнутий K
Друзья, существует способ создания простых bbcode таблиц с неограниченной функциональностью.

Варианты, бытующие в сети либо сложны для использования, либо имеют сильно урезанный функционал по сравнению с html аналогами. Но мне удалось обнаружить способ создания полнофункциональных bbcode таблиц, с которыми удобно работать, которые просты в обращении и понятны даже самому неподготовленному пользователю.

Например, всё что от пользователя потребуется сделать, чтобы адаптировать произвольную таблицу из интернета к синтаксису текстового редактора на форуме, это следовать короткой инструкции.


Инструкция:

Код: Выделить всё


Приведите таблицу вида:

<table style=" ... ">
	<tr style=" ... ">
		<td style=" ... ">
			Текст
		</td>
	</tr>
</table>

к виду:

[table_style=" ... "]
	[tr_style=" ... "]
		[td_style=" ... "]
			Текст
		[/td_style]
	[/tr_style]
[/table_style]



Как видим, всё предельно просто.

А идея заключается в том, чтобы максимально приблизить синтаксис BBCode к синтаксису html-CSS, фактически сделать их идентичными.

В phpBB 3.2 это оказалось возможно реализовать, не выходя из админки:
simple-table-bbcode01.png



Настройки такие:

Код: Выделить всё

Использование BBCode:	[table]{TEXT}[/table]
Замена HTML:			<table>{TEXT}</table>
Подсказка:				Таблица:  [table][tr][td] текст [/td][/tr][/table] или [table_style="width: 100px; border: 1px solid black;"][tr][td] текст [/td][/tr][/table_style]
Показывать на странице ответа:	Да


Использование BBCode:	[table_style={TEXT1}]{TEXT2}[/table_style]
Замена HTML:			<table style={TEXT1}>{TEXT2}</table>
Подсказка:				
Показывать на странице ответа:	Нет


Использование BBCode:	[td]{TEXT}[/td]
Замена HTML:			<td>{TEXT}</td>
Подсказка:				Ячейка таблицы:  [td] текст [/td] или [td_style="color: red;"] текст [/td_style]
Показывать на странице ответа:	Да


Использование BBCode:	[td_style={TEXT1}]{TEXT2}[/td_style]
Замена HTML:			<td  style={TEXT1}>{TEXT2}</td>
Подсказка:				
Показывать на странице ответа:	Нет


Использование BBCode:	[tr]{TEXT}[/tr]
Замена HTML:			<tr>{TEXT}</tr>
Подсказка:				Строка таблицы:  [tr][td] текст [/td][/tr] или [tr_style="background-color: green;"][td] текст [/td][/tr_style]
Показывать на странице ответа:	Да


Использование BBCode:	[tr_style={TEXT1}]{TEXT2}[/tr_style]
Замена HTML:			<tr style={TEXT1}>{TEXT2}</tr>
Подсказка:				
Показывать на странице ответа:	Нет



Результат будет таким:

simple-table-bbcode.png


***
Следуя этой логике, можно сделать синтаксисы BBCode и html-CSS еще более похожими друг на друга, даже полностью идентичными. Но для этого надо разобраться, как скрыть знак равенства в ббкоде и как назначать одному тегу ббкода две различных html замены.

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 07.02.2019 0:29
Татьяна5
Пафнутий K, можно ещё сократить, если сделать параметр опциональным
Пример:

Код: Выделить всё

[ref={COLOR;optional}]{TEXT}[/ref]

Код: Выделить всё

<xsl:choose>
						<xsl:when test="@*">
							<span style="font-weight: bold; color: {COLOR};">{TEXT}</span>
						</xsl:when>
						<xsl:otherwise>
							<span style="font-weight: bold;">{TEXT}</span>
						</xsl:otherwise>
					</xsl:choose>
Один ббкод работает и с цветом, и без

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 07.02.2019 1:05
Пафнутий K
Татьяна5 писал(а): 07.02.2019 0:29 Пафнутий K, можно ещё сократить, если сделать параметр опциональным

Один ббкод работает и с цветом, и без
Да, это именно то, о чем я и говорил. По-видимому, таким способом можно количество тегов ббкода сократить вдвое. И они примут более аутентичный вид, в нашем случае это [table] вместо [table_style] и [/table] вместо [/table_style].

Думаю, что таким способом возможно добиться стопроцентного совпадения синтаксисов ббкода и html-css.

Но я не планирую в ближайшее время заниматься доводкой данного начинания до кондиции :( . Если кто-то возложит на себя эту миссию, я буду ему благодарен. И все скажут спасибо.

Татьяна, может вы попробуете это сделать? Думаю вам, с вашим опытом, это будет несложно :D .
Татьяна5 писал(а): 07.02.2019 0:29

Код: Выделить всё

[ref={COLOR;optional}]{TEXT}[/ref]
А это штатные возможности? Или трик?

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 07.02.2019 1:06
Татьяна5
Начиная с 3.2.0 штатные

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 07.02.2019 1:37
Пафнутий K
Чтобы энтузиастам-разработчикам было сподручнее доводить до кондиции эту задумку, я расскажу одну хитрость.

Движок phpBB считает ббкод, объявленный как [table style={TEXT1}]...[/table], идентичным ббкоду [table={TEXT1}]...[/table]. То есть это для движка один и тот же ббкод.

Соответственно, пользователь также может использовать этот ббкод в своем сообщении как угодно, хоть в виде [table style={TEXT1}]..., хоть в виде [table={TEXT1}]...

Мне кажется, что это открывает дорогу для создания ббкода, полностью идентичного по написанию своему html-css аналогу.

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 07.02.2019 10:01
Pazh
Пафнутий K, открой последнюю версию расширения [3.1][3.2] Advanced BBCode Box 3.1 - там есть реализация PipeTables - для простого юзера это может быть проще чем отслеживать строк/ячейки

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 07.02.2019 16:49
Пафнутий K
Pazh писал(а): 07.02.2019 10:01 Пафнутий K, открой последнюю версию расширения [3.1][3.2] Advanced BBCode Box 3.1 - там есть реализация PipeTables - для простого юзера это может быть проще чем отслеживать строк/ячейки
Для простых таблиц решений в сети много.

А здесь мы ведем речь именно о таблицах с неограниченной функциональностью. Проще говоря, пользователь имеет возможность создать таблицу любой сложности и любого стиля оформления.

С помощью PipeTables, например, вы не сможете раскрасить таблицу, задать рамку, назначить выравнивание, отступы... Даже вставить в нее сколь-нибудь сложные объекты, типа абзацев текста с картинками, вам будет крайне сложно. А предложенный вариант это позволяет, ведь это обычный html-css. С помощью него даже адаптивные таблицы можно создать, чтобы они под мобильные устройства подстраивались :D .

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 07.02.2019 16:57
Pazh
Пафнутий K, подобные BBCode (table, tr и td) стоят у меня на нескольких форумах уже лет 7 наверное - еще с 3.0. Юзеры как попробовали из них сделать пару таблиц - так потом большинство забивали на это гиблое дело. Итогом - используются только админами и модерами. Была где-то даже вариация на js вставки пустой таблицы как реализовано в Word-е.
Но итог всего этого баловства - пока не будет нормального WYSIWYG редактора ответа в phpbb, это все будет только для крайне ограниченного круга пользователей, которые понимают эти пляски с бубном...

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 07.02.2019 17:27
Пафнутий K
Pazh, полностью согласен с вами.

На большинстве форумов таблицы вообще не нужны. Но у меня научный форум, поэтому такой функционал обязателен.

Я просто попытался расширить возможности обычных ббкодов table, tr и td (коих явно недостаточно для создания нормальных таблиц) и одновременно сделать их предельно понятными для пользователя (за счет использования обычного html-scc синтаксиса, который знают почти все, и по которому всегда можно найти информацию с примерами в сети).

Отправлено спустя 7 минут 28 секунд:
Pazh писал(а): 07.02.2019 16:57 Но итог всего этого баловства - пока не будет нормального WYSIWYG редактора ответа в phpbb,
Кстати, как вы относитесь к Rin Editor? Хочу попробовать поставить, но правда не знаю как. Инструкции по установке я не нашел.

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 26.02.2019 18:13
Пафнутий K
Вот реализовал ББКод таблицы Пафнутия. Теперь их синтаксис неотличим от html/CSS:

Код: Выделить всё


Использование BBCode:	[table style={TEXT1;optional}]{TEXT2}[/table]
Замена HTML:			<table style={TEXT1}>{TEXT2}</table>
Подсказка:				Таблица:  [table][tr][td] текст [/td][/tr][/table] или [table style="width: 100px; border: 1px solid black;"][tr][td] текст [/td][/tr][/table]
Показывать на странице ответа:	Да
 
 
Использование BBCode:	[td style={TEXT1;optional}]{TEXT2}[/td]
Замена HTML:			<td style={TEXT1}>{TEXT2}</td>
Подсказка:				Ячейка таблицы:  [td] текст [/td] или [td style="color: red;"] текст [/td]
Показывать на странице ответа:	Да
 
 
Использование BBCode:	[tr style={TEXT1;optional}]{TEXT2}[/tr]
Замена HTML:			<tr style={TEXT1}>{TEXT2}</tr>
Подсказка:				Строка таблицы:  [tr][td] текст [/td][/tr] или [tr style="background-color: green;"][td] текст [/td][/tr]
Показывать на странице ответа:	Да
 
Интегрировал таблицы в свой форум --> http://idcommunity.ru/forum/viewtopic.p ... 7&p=33#p32. Пользоваться действительно очень удобно, возможности неограниченные. Можно создавать практически любые таблицы, какие только вздумается.

Количество тегов по сравнению с первым вариантом сократилось вдвое. Еще раз спасибо Татьяне5 за полезную подсказку.

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 27.02.2019 14:52
Pazh
Пафнутий K, а ты уверен что в TEXT1 тебе не насуют вредоносный код???

Код: Выделить всё

{TEXT}	Любой текст, включая символы любого языка, числа и так далее. Не следует применять эту лексему в тегах HTML. Вместо этого используйте лексемы IDENTIFIER, INTTEXT или SIMPLETEXT.

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 27.02.2019 15:23
Пафнутий K
Pazh писал(а): 27.02.2019 14:52 Пафнутий K, а ты уверен что в TEXT1 тебе не насуют вредоносный код???
Вряд ли такое возможно. Невалидный синтаксис внутри тега игнорируется либо движком либо браузером.

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 27.02.2019 15:23
Pazh
ну ну

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 27.02.2019 17:51
Пафнутий K
Pazh писал(а): 27.02.2019 15:23ну ну
Пример можете привести?

Re: Простая bbcode таблица с неограниченной функциональностью

Добавлено: 27.02.2019 17:53
Pazh
Пафнутий K, я вам уже привел "пример" из документации по описанию применения лексемы (кстати с указание на что нужно заменить) - если для Вас этого мало - то велком в гугле на поиск инъекций