Уважаемые пользователи!
Напоминаем, что с 7 ноября 2020 года phpBB Group прекращает поддержку phpBB версии 3.2.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2020 года.
С учетом этого, а также того, что версия 3.2.x больше не будет получать обновлений, за исключением связанных с проблемами безопасности
(только при их наличии и только до 7 ноября 2020 года), рекомендуется обновить конференции до версии 3.3.x.

Ограниченное кол-во пользовательского BBcode в сообщении

У вас есть идея для расширения функциональности phpBB 3.0.x? Расскажите о ней здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Юрий5
phpBB 1.4.1
Сообщения: 45
Стаж: 9 лет 10 месяцев
Откуда: Киев
Благодарил (а): 7 раз

Ограниченное кол-во пользовательского BBcode в сообщении

Сообщение Юрий5 »

Всем доброго времени суток!

Поискав тут и на официальном сайте не нашел Мод или доработку ограниченного пользовательского кол-ва BBcode (или одного кода) в сообщении.

Проблема в том, что невозможно проконтролировать, сколько фото или видео пользователь может "втулить" в 1 сообщение.
В результате, некоторые темы просто по 1-2 минуты (смотря какой у кого интернет) грузятся, да и весят как для страницы много.

Нашел интересный мод тут: Ограниченное кол-во изображений([img]) в сообщении спасибо Татьяне5 за подсказку.

Пояснения и свой эксперимент я указал тут: Ограниченное кол-во изображений([img]) в сообщении

Немного почесав голову, понял, что тупо копировать ничего не получится, так как нужно добавлять новые параметры в БД, а именно в phpbb_bbcodes.
Какие мысли... Думаю создать новую таблицу в phpbb_bbcodes, например bbcodes_max, тип полей varchar.

Потом как поправить вот этот дополнительный код пхп (includes/message_parser.php
), который предназначался для макс. количество изображений в сообщении.?

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

		$num_imgs = 0;
		
		if ($allow_bbcode && strpos($this->message, '[') !== false)
		{
			$num_imgs = $this->parsed_items['img'];
		}

		if ($config['max_' . $mode . '_imgs'] && $num_imgs > $config['max_' . $mode . '_imgs'])
		{
			$this->warn_msg[] = sprintf($user->lang['TOO_MANY_IMGS'], $config['max_' . $mode . '_imgs']);
			return (!$update_this_message) ? $return_message : $this->warn_msg;
		}	
Допустим, не для всех ББкодов, а для одного 1го.

Переключатели в админке без нужды, в принципе, можно в БД вручную поставить нужное значение, а языковой файл posting.php изменить, чтоб пользователь увидел предупреждение о максимальном количестве ББкода

П. С. Прошу сильно не пинать :oops:
Аватара пользователя
c61
phpBB 2.0.6
Сообщения: 506
Стаж: 8 лет 1 месяц
Благодарил (а): 42 раза
Поблагодарили: 251 раз

Re: Ограниченное кол-во пользовательского BBcode в сообщении

Сообщение c61 »

В моде строка

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

if ($config['max_' . $mode . '_imgs'] && $num_imgs > $config['max_' . $mode . '_imgs'])
с неточностью, надо

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

if (isset($config['max_' . $mode . '_imgs']) && $num_imgs > $config['max_' . $mode . '_imgs'])
Юрий5 писал(а):Думаю создать новую таблицу в phpbb_bbcodes, например bbcodes_max, тип полей varchar
Столбец, тип целый, например mediumint(8), NOT NULL DEFAULT '0'. Назовем его, примерно как предлагалось, bbcode_maxnum.

Обсуждаемый мод годится для случая, когда надо проверить количество img и ещё некоторых бб-кодов, являющихся предопределенными, но не для бб-кодов, созданных из админки. Странно, что у Вас не заработало с заменой imgs на hsimgs, вроде все верно сделали, если только не забыли 'img' заменить на 'hsimg' в строке

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

$num_imgs = $this->parsed_items['img'];
Для бб-кодов, добавленных через админку, сделать можно так (ниже примерная последовательность действий, код, разумеется, я не проверял).

Если выше мы добавили столбец bbcode_maxnum в BBCODES_TABLE, ищем в includes/message_parser.php строку

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

				'bbcode_id'	=> (int) $row['bbcode_id'],
и добаляем после нее

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

				'bbcode_maxnum'	=> (int) $row['bbcode_maxnum'],
Количество бб-кодов уже подсчитывается в $parsed_items. Значит, нам надо где-то организовать сравнение. Ищем

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

		// Check number of links
		if ($config['max_' . $mode . '_urls'] && $num_urls > $config['max_' . $mode . '_urls'])
		{
			$this->warn_msg[] = sprintf($user->lang['TOO_MANY_URLS'], $config['max_' . $mode . '_urls']);
			return (!$update_this_message) ? $return_message : $this->warn_msg;
		}
и добавляем после (в нижеприведенном коде я мог напортачить, думаю, Вы сможете исправить, если что не так)

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

		// Check number of custom bb-codes
		foreach($this->bbcodes as $key => $val)
		{
			if($val['bbcode_maxnum'] && ($this->parsed_items[$key] > $val['bbcode_maxnum']))
			{
				$this->warn_msg[] = sprintf($user->lang['TOO_MANY_BBCODES'], $key, $val['bbcode_maxnum']);
				return (!$update_this_message) ? $return_message : $this->warn_msg;
			}
		}
Теперь добавим в языковые файлы language/ru/posting.php и английский нужное нам сообщение 'TOO_MANY_BBCODES':

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

	'TOO_MANY_BBCODES'				=> 'Ваше сообщение содержит слишком много BB-кодов %1$s. Максимальное разрешённое количество: %2$d.',
Ну а затем начинаем править админку, а именно тот раздел, который посвящен бб-кодам. Думаю, что Вы легко сможете сделать самостоятельно добавление еще одного столбца в таблицу и добавление поля в редактирование бб-кода.

Но сначала надо проверить приведенный код, добавив в базу данных что нужно и задав вручную для какого-то бб-кода ограничение. Надеюсь, принцип понятен.
Аватара пользователя
Юрий5
phpBB 1.4.1
Сообщения: 45
Стаж: 9 лет 10 месяцев
Откуда: Киев
Благодарил (а): 7 раз

Ограниченное кол-во пользовательского BBcode в сообщении

Сообщение Юрий5 »

О c61 спасибо за идею! Так сказать "появился свет в конце тоннеля".

Попробовал на старом хосте (на выделенном АйПи вместо сайта)

В общем что было сделано, сделал запрос в старую базу, добавил bbcode_maxnum:

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

ALTER TABLE phpbb_bbcodes ADD bbcode_maxnum mediumint (8) UNSIGNED DEFAULT '0' NOT NULL;
Потом я сделал правки в php файлах, которые описаны выше, в результате ничего не поменялось.
Писал нарочно сообщение, в котором было больше значение, чем я вручную прописал в базе.
Сообщение публикуются без проблем и предупреждений о превышенном количестве ББкоде.

Все вроде бы правильно, перепроверял, может где то ошибка или чего то еще не хватает?

П.С. Всех устаешь предупреждать на форуме, да и банить как то за лишние ББкода не охота.
На действующем хосте не проверял.

Добавлено спустя 2 минуты 44 секунды:
Re: Ограниченное кол-во пользовательского BBcode в сообщении
P. S.

Правки делал: в includes/message_parser.php и языковом файле постинг.пхп ну и в базе.
Аватара пользователя
Юрий5
phpBB 1.4.1
Сообщения: 45
Стаж: 9 лет 10 месяцев
Откуда: Киев
Благодарил (а): 7 раз

Ограниченное кол-во пользовательского BBcode в сообщении

Сообщение Юрий5 »

Апну немного тему.
Гложет сомнение, что нужно еще какой то файл php править, кроме того, что указал c61.
Либо править нужно еще что в файла message_parser.php
Может есть у кого то еще мысли по этой теме?

Вернуться в «Запросы модов для phpBB 3.0.x»