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

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

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

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

Сообщение Coagulant »

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

Здесь можно посмотреть как это работает (правда там не phpbb)
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5576
Стаж: 21 год 9 месяцев
Откуда: Питер
Благодарил (а): 210 раз
Поблагодарили: 902 раза

Сообщение Siava »

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

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

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

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

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

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

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

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

Сообщение Coagulant »

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

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

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

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

как лучше всего, определить, насколько снижает скорость загрузки форума тот или иной мод? вроде где-то видел мод "время генерации станицы", или можно лучше?
Ну, во-первых, учимся пользоваться командой 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
Стаж: 21 год 9 месяцев
Откуда: Москва

Сообщение 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
Стаж: 21 год 11 месяцев
Откуда: оттуда

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

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
Поддержка
Поддержка
Сообщения: 5576
Стаж: 21 год 9 месяцев
Откуда: Питер
Благодарил (а): 210 раз
Поблагодарили: 902 раза

Сообщение Siava »

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

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

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

Сообщение Siava »

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

Сообщение Coagulant »

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

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

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

Остался вопрос, как вырезать все бб-теги, а то остаются [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
Стаж: 21 год 9 месяцев
Откуда: Москва

Сообщение Coagulant »

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

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

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

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

но уж очень громоздко получается.
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5576
Стаж: 21 год 9 месяцев
Откуда: Питер
Благодарил (а): 210 раз
Поблагодарили: 902 раза

Сообщение Siava »

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

Сообщение 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»