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

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

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

Сообщение Coagulant »

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

Здесь можно посмотреть как это работает (правда там не phpbb)
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5449
Стаж: 20 лет 6 месяцев
Откуда: Питер
Благодарил (а): 179 раз
Поблагодарили: 756 раз

Сообщение Siava »

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

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

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

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

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

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

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

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

Сообщение Coagulant »

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

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

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

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

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

Сообщение Coagulant »

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

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

  1. $sql = "SELECT p.*, pt.post_text, pt.post_id
  2. FROM " . POSTS_TABLE . " p, " . POSTS_TEXT_TABLE . " pt
  3. WHERE p.topic_id = $topic_id
  4. AND pt.post_id = p.post_id
  5. ORDER BY p.post_time
  6. 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
Стаж: 20 лет 8 месяцев
Откуда: оттуда

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

Coagulant

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

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

  1. #
  2. #-----[ OPEN ]------------------------------------------
  3. #
  4. viewforum.php
  5.  
  6. #
  7. #-----[ FIND ]------------------------------------------------
  8. #
  9. //
  10. // Grab all the basic data (all topics except announcements)
  11. // for this forum
  12. //
  13. $sql = "SELECT t.*, u.username
  14.  
  15. #
  16. #-----[ IN-LINE FIND ]----------------------------------------
  17. #
  18. , p2.post_time
  19.  
  20. #
  21. #-----[ IN-LINE AFTER, ADD ]----------------------------------
  22. #
  23. , pt.post_text
  24.  
  25. #
  26. #----[ FIND ]------------------------------------------
  27. #
  28. FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " .
  29.  
  30. #
  31. #-----[ IN-LINE FIND ]----------------------------------------
  32. #
  33. . USERS_TABLE . " u2
  34.  
  35. #
  36. #-----[ IN-LINE AFTER, ADD ]----------------------------------
  37. #
  38. ,". POSTS_TEXT_TABLE . " as pt
  39.  
  40. #
  41. #-----[ FIND ]------------------------------------------------
  42. #
  43. AND p.post_id = t.topic_first_post_id
  44.  
  45. #
  46. #-----[ AFTER, ADD ]------------------------------------------
  47. #
  48. AND p.post_id = pt.post_id
  49.  
  50. #
  51. #-----[ FIND ]------------------------------------------------
  52. #
  53. $template->assign_block_vars('topicrow', array(
  54.  
  55. #
  56. #-----[ BEFORE, ADD ]-----------------------------------------
  57. #
  58. // BEGIN display first message
  59. $chr_limit=500; //limit char count in message
  60. $first_post = $topic_rowset[$i]['post_text'];
  61. $first_post=preg_replace('/\[\S+\:[0-9a-z]+\]/si', '', $first_post);
  62. $first_post = str_replace('"', "'", $first_post);
  63. if (strlen($first_post) > $chr_limit)
  64. {
  65. $first_post = substr($first_post, 0, $chr_limit);
  66. $first_post .= '...';
  67. }
  68. // END display first message
  69.  
  70. #
  71. #----[ FIND ]------------------------------------------
  72. #
  73. 'FIRST_POST_TIME' => $first_post_time,
  74. #
  75. #-----[ BEFORE, ADD ]------------------------------------------
  76. #
  77. 'FIRST_POST' => $first_post,
  78.  
  79. #
  80. #-----[ OPEN ]------------------------------------------
  81. #
  82. templates/subsilver/viewforum_body.tpl
  83.  
  84. #
  85. #----[ FIND ]------------------------------------------
  86. #
  87. <a href="{topicrow.U_VIEW_TOPIC}" class="topictitle"
  88.  
  89. #
  90. #-----[ IN-LINE FIND ]----------------------------------------
  91. #
  92. <a href="{topicrow.U_VIEW_TOPIC}" class="topictitle"
  93.  
  94. #
  95. #-----[ IN-LINE AFTER, ADD ]----------------------------------
  96. #
  97. title="{topicrow.FIRST_POST}"
  98.  
  99. #
  100. #-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
  101. #
  102. # EoM
Проверил, работает, но только для основных сообщений. Понятно, что для сообщений другого типа надо просто добавить в предшествующие SQL недостающие строки. Но уже лень. Думаю, что идея уже понятна.
Основное преимущество - не увеличивается количество SQL запросов.

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

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

Сообщение Siava »

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

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

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

Сообщение Siava »

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

Сообщение Coagulant »

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

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

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

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

Сообщение Coagulant »

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

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

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

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

но уж очень громоздко получается.
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5449
Стаж: 20 лет 6 месяцев
Откуда: Питер
Благодарил (а): 179 раз
Поблагодарили: 756 раз

Сообщение Siava »

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

Сообщение Coagulant »

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

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

  1. #
  2. #-----[ OPEN ]------------------------------------------
  3. #
  4. viewforum.php
  5.  
  6. #
  7. #-----[ FIND ]------------------------------------------------
  8. #
  9. //
  10. // All announcement data, this keeps announcements
  11. // on each viewforum page ...
  12. //
  13. $sql = "SELECT t.*, u.username,
  14.  
  15. #
  16. #-----[ IN-LINE FIND ]----------------------------------------
  17. #
  18. , p.post_username
  19.  
  20. #
  21. #-----[ IN-LINE AFTER, ADD ]----------------------------------
  22. #
  23. , pt.post_text
  24.  
  25. #
  26. #----[ FIND ]------------------------------------------
  27. #
  28. FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " .
  29.  
  30. #
  31. #-----[ IN-LINE FIND ]----------------------------------------
  32. #
  33. . USERS_TABLE . " u2
  34.  
  35. #
  36. #-----[ IN-LINE AFTER, ADD ]----------------------------------
  37. #
  38. ,". POSTS_TEXT_TABLE . " as pt
  39.  
  40. #
  41. #-----[ FIND ]------------------------------------------------
  42. #
  43. AND p.post_id = t.topic_last_post_id
  44.  
  45. #
  46. #-----[ AFTER, ADD ]------------------------------------------
  47. #
  48. AND t.topic_first_post_id = pt.post_id

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