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

Текст сообщения во всплывающем окне

Идеи для расширения функциональности phpBB 2.0.x
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 19 лет 3 месяца
Откуда: Москва

Текст сообщения во всплывающем окне

Сообщение Coagulant »

Сомненваюсь, что такой мод существует, но всё-таки: при наведении мышки на название топика должно появляться стандартное всплывающее окошко (аля тег alt для картинок) с первыми 50 символами начального поста.

Здесь можно посмотреть как это работает (правда там не phpbb)
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5283
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

Coagulant
Есть такой мод, ставил его... но он малость грузит комп :roll:
(ссылку найду, скажу)

Добавлено спустя 2 минуты 7 секунд:

Вот
Правда его может доработать можно, так как по дефолту он показывает всё первое сообщение.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Стаж: 19 лет 5 месяцев
Откуда: оттуда

Сообщение Егор Наклоняев »

Есть такой мод, ставил его... но он малость грузит комп
Еще бы...

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

$sql = 'SELECT post_text FROM ' . POSTS_TEXT_TABLE . "
	 WHERE post_subject = '$topictitle' LIMIT 1";
Это извините слов не хватает. В цикле поиск по post_subject, которое не индексировано. Гы.

В общем, категорически НЕ РЕКОМЕНДУЮ даже пытаться ставить это МОД.
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 19 лет 3 месяца
Откуда: Москва

Сообщение Coagulant »

Siava
Спасибо за мод
но он малость грузит комп
как лучше всего, определить, насколько снижает скорость загрузки форума тот или иной мод? вроде где-то видел мод "время генерации станицы", или можно лучше? :)

Добавлено спустя 4 минуты 48 секунд:

Егор Наклоняев, я так и знал :? Может как-то его оптимизировать, форум vBulletin же работает с такой функцией (пусть движок другой, но всё же)
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Стаж: 19 лет 5 месяцев
Откуда: оттуда

Сообщение Егор Наклоняев »

как лучше всего, определить, насколько снижает скорость загрузки форума тот или иной мод? вроде где-то видел мод "время генерации станицы", или можно лучше?
Ну, во-первых, учимся пользоваться командой EXPLAIN в MY SQL.
table phpbb_posts_text
type ALL
possible_keys NULL
key NULL


Во вторых, можно просто считать время в микросекундах. Пример прямо в документации по PHP. Ставим перед запросом и после запроса и выводим результат. Результат можно вывести с помощью echo после обработки шаблона, например, так:
echo "<!-- ".$pagetime."-->";
Может как-то его оптимизировать
Оптимизировать то его можно и нужно, тем более, что он и ищет то совершенно не то. Достаточно просто внимательно глянуть на запрос.

Примерно похожий запрос генерится у меня в RSS, например, для случая когда в данной теме нужно вывести только первые сообщения и работает он гораздо быстрее. (ключи f= & t=1)

Т.о. нужно править основной запрос, получающий список тем данного форума, правильно связывая таблицы.
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 19 лет 3 месяца
Откуда: Москва

Сообщение Coagulant »

Посмотрел новую версию мода 1.0.2, там автор поправил sql запрос на вот такой:

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

$sql =  "SELECT p.*,  pt.post_text, pt.post_id
			FROM " . POSTS_TABLE . " p, " . POSTS_TEXT_TABLE . " pt
			WHERE p.topic_id = $topic_id
			AND pt.post_id = p.post_id
			ORDER BY p.post_time
			LIMIT 1";
Я не спец в sql, поэтому определить, насколько удачно составлен запрос, не могу.

Насчет, как определить время выполнения я знаю, просто изобретать велосипед влом. Вот мод Page Generation Time нашел, он выдает строчку "Page generation time: 0.4873s (PHP: 83% - SQL: 17%) - SQL queries: 14 - GZIP enabled - Debug on", как раз то, что я искал.

PS. У мода баг есть: он ббкоды из сообщения не вырезает, получается фигня навроде [b:c44453cs]текст
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Стаж: 19 лет 5 месяцев
Откуда: оттуда

Сообщение Егор Наклоняев »

Coagulant

Так, конечно, гораздо лучше. Я вот ради пробы написал другой вариант:

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

# 
#-----[ OPEN ]------------------------------------------ 
# 
viewforum.php

# 
#-----[ FIND ]------------------------------------------------ 
# 
//
// Grab all the basic data (all topics except announcements)
// for this forum
//
$sql = "SELECT t.*, u.username

# 
#-----[ IN-LINE FIND ]---------------------------------------- 
#
, p2.post_time

# 
#-----[ IN-LINE AFTER, ADD ]---------------------------------- 
# 
, pt.post_text

#
#----[ FIND ]------------------------------------------ 
#
FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " .

# 
#-----[ IN-LINE FIND ]---------------------------------------- 
#
. USERS_TABLE . " u2

# 
#-----[ IN-LINE AFTER, ADD ]---------------------------------- 
# 
,". POSTS_TEXT_TABLE . " as pt

# 
#-----[ FIND ]------------------------------------------------ 
# 
AND p.post_id = t.topic_first_post_id

#
#-----[ AFTER, ADD ]------------------------------------------ 
# 
AND p.post_id = pt.post_id

# 
#-----[ FIND ]------------------------------------------------ 
# 
$template->assign_block_vars('topicrow', array(

# 
#-----[ BEFORE, ADD ]----------------------------------------- 
#
		// BEGIN display first message
		$chr_limit=500;  //limit char count in message
		$first_post = $topic_rowset[$i]['post_text'];
		$first_post=preg_replace('/\[\S+\:[0-9a-z]+\]/si', '', $first_post);
		$first_post = str_replace('"', "'", $first_post);
		if (strlen($first_post) > $chr_limit)
		{
			$first_post = substr($first_post, 0, $chr_limit);
			$first_post .= '...';
		}
		// END display first message

#
#----[ FIND ]------------------------------------------ 
#
			'FIRST_POST_TIME' => $first_post_time,
#
#-----[ BEFORE, ADD ]------------------------------------------ 
# 
			'FIRST_POST' => $first_post,

# 
#-----[ OPEN ]------------------------------------------ 
# 
templates/subsilver/viewforum_body.tpl

#
#----[ FIND ]------------------------------------------ 
#
<a href="{topicrow.U_VIEW_TOPIC}" class="topictitle"

# 
#-----[ IN-LINE FIND ]---------------------------------------- 
#
<a href="{topicrow.U_VIEW_TOPIC}" class="topictitle"

# 
#-----[ IN-LINE AFTER, ADD ]---------------------------------- 
# 
 title="{topicrow.FIRST_POST}"

#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM 
Проверил, работает, но только для основных сообщений. Понятно, что для сообщений другого типа надо просто добавить в предшествующие SQL недостающие строки. Но уже лень. Думаю, что идея уже понятна.
Основное преимущество - не увеличивается количество SQL запросов.

Правда, ощутимого выигрыша во времени у меня на форуме особого нет.

Так что можно ставить и тот МОД, разве что добавить строчку
$first_post=preg_replace('/\[\S+\:[0-9a-z]+\]/si', '', $first_post);
перед строкой
$first_post = str_replace('"', "''", $first_post);
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5283
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

Егор Наклоняев
То есть всё также притормаживает? :(
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Стаж: 19 лет 5 месяцев
Откуда: оттуда

Сообщение Егор Наклоняев »

То есть всё также притормаживает?
Нет, не также.
Естественно, что лишние SQL запросы тормозят время вывода страницы, а в данном случае их количество увеличится на количество тем. Но, поскольку, в отличие от предыдущей версии используется индексный поиск, то время задержки измеряется в сотых долях секунды на запрос. ИМХО, время вывода списка тем увеличится примерно на 0,1 - 0,2 сек.
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5283
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

Егор Наклоняев
проверил вашу версию, очень даже неплохо, отличная работа! :)
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 19 лет 3 месяца
Откуда: Москва

Сообщение Coagulant »

Егор Наклоняев
Присоединяюсь к Siava, отлично написано! Протестировал дома: разницы во времени вообще не почувствовал.

Остался вопрос, как вырезать все бб-теги, а то остаются [url] и другие? (в регэкспах не силен)
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Стаж: 19 лет 5 месяцев
Откуда: оттуда

Сообщение Егор Наклоняев »

Остался вопрос, как вырезать все бб-теги, а то остаются [url] и другие? (в регэкспах не силен)
Может, так:
$first_post=preg_replace('/\[[^\s\]]+\:[0-9a-z]+\]/si', '', $first_post);
Вместо
$first_post=preg_replace('/\[\S+\:[0-9a-z]+\]/si', '', $first_post);
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 19 лет 3 месяца
Откуда: Москва

Сообщение Coagulant »

Новый вариант, конечно лучше, но он не вырезает теги

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

[url][/url] и [url=http://blablabla][/url]
Могу предложить добавить строку

$first_post=preg_replace('/\[[\/]?url[^\s\]]*\]/si', '', $first_post);

но уж очень громоздко получается.
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5283
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

Кстати, у меня у объявлений не отображается всплывающее окошко :roll:
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 19 лет 3 месяца
Откуда: Москва

Сообщение Coagulant »

Читаем внимательно:
Понятно, что для сообщений другого типа надо просто добавить в предшествующие SQL недостающие строки. Но уже лень.
Я вот написал, работает вроде:

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

# 
#-----[ OPEN ]------------------------------------------ 
# 
viewforum.php 

# 
#-----[ FIND ]------------------------------------------------ 
# 
//
// All announcement data, this keeps announcements
// on each viewforum page ...
//
$sql = "SELECT t.*, u.username,

# 
#-----[ IN-LINE FIND ]---------------------------------------- 
# 
, p.post_username

# 
#-----[ IN-LINE AFTER, ADD ]---------------------------------- 
# 
, pt.post_text 

# 
#----[ FIND ]------------------------------------------ 
# 
FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . 

# 
#-----[ IN-LINE FIND ]---------------------------------------- 
# 
. USERS_TABLE . " u2 

# 
#-----[ IN-LINE AFTER, ADD ]---------------------------------- 
# 
,". POSTS_TEXT_TABLE . " as pt 

# 
#-----[ FIND ]------------------------------------------------ 
# 
AND p.post_id = t.topic_last_post_id 

# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
AND t.topic_first_post_id = pt.post_id 

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