Сайт сообщества | Клуб пользователей | О проекте

Имя
Пароль
ПравилаРегистрацияСправка
Сообщения за деньПоиск

Вернуться   Клуб пользователей портальной системы RUNCMS > Портал > Модули и блоки > Модули форумов

 
 
Опции темы Опции просмотра
ZlydenGL вне форума ZlydenGL
Напильникъ - наше все

Аватар для ZlydenGL

| Цитировать Старый #26 03-17-2010, 09:36

Нашел еще один смешной косячок - на этот раз с мета-генератором.

Достало меня уже, что даже при просмотре конкретной темы в форуме в заголовок страницы все равно шел заголовок вида "Название форума : Форум : Описание сайта". Это было неудобно и для пользователей (если открыто несколько страниц с разными темами одного форума - найти нужную только по заголовкам панели заголовкам в панели задач/предпросмотре мягко говоря проблематично), и для поисковых пауков (тот же Гугль регулярно рапортовал, что есть много страниц с дублирующимся заголовком).

Как обычно, ларчик открывался просто. Текущая реализация мета-генератора использует только ОДИН модуль для генерации заголовка и мета-тега, основываясь на следующем правиле:
1. Смотрим на директорию metagenerator в каталоге модуля
2. Если такой директории нет - идем по старому пути (т.е. в подпапке метагенератора в модуле system)
3. В директории метагенератора ищем ПЕРВЫЙ файл, название которого совпадает с именем одной из GET переменных.

Подход понятен и вполне работоспособен для новостей, глоссария, статей и многих других модулей - но дает сбой на нашем любимом (не у всех) newbb_plus - именно потому, что при отображении в дефолтном модуле темы форума мы имеем ДВЕ GET переменные: forum и topic_id. Соответственно во всех случаях (неважно, смотрим мы сам форум или тему форума) для генерации заголовка и мета-тега используется модуль forum.php. Эта неприятность неактуальна для доработки форума от Zormax'а, но что делать любителям дефолтных вещей или людей, у которых форум уже закастомизирован по самое не балуй?

Один из самых простых способов - это простейшая модернизация модуля метагенератора forum.php: анализируем внутри модуля наличие GET переменной topic_id, и если эта переменная задана - генерируем мету и заголовок для темы, если нет - то генерируем мету и заголовок для форума.

В результате получаем вот такое содержимое файла forum.php:
PHP код:
<?php
// ************************************************************/
// *                        RUNCMS                            */
// *               Simplicity & ease off use                  */
// *               < http://www.runcms.org >                  */
// ************************************************************/
// * Author Website : http://www.runcms.org                   */
// * License Type   : Proprietary:                            */
// * Proprietary: See /manual/LICENSES/Runcms.txt             */
// ************************************************************/
/**
 * @package     modules
 * @subpackage  newbb_plus
 */
// Forum Posts
 
function get_meta($id$limit) {
global 
$db;
 
if (!isset(
$_GET['topic_id'])) // переменная не задана - значит пользователь/паук просматривает форум
{
$SQL =  "
    SELECT
    "
.$db->prefix("bbplus_forums.forum_name").",
    "
.$db->prefix("bbplus_topics.topic_title").",
    "
.$db->prefix("bbplus_forums.forum_desc")."
    FROM
    "
.$db->prefix("bbplus_forums").",
    "
.$db->prefix("bbplus_topics")."
    WHERE
    ("
.$db->prefix("bbplus_topics.forum_id")."=$id
    AND
    "
.$db->prefix("bbplus_forums.forum_id")."=$id)";
 
$query $db->query($SQL$limit);
while (list(
$forum_name$topic_title$forum_desc) = $db->fetch_row($query)) {
    
$result["title"]     = $forum_name;
    
$result["keywords"] .=  " "$forum_name ." "$topic_title ." "$forum_desc ." ";
}
}
else 
// пользователь/паук просматривает конкретную тему форума (ниже идет копипаст обработки из модуля метагенератора topic_id.php за исключением помеченной строки)
{
$SQL "
    SELECT
    T.topic_title,
    T.forum_id,
    P.subject,
    P.post_text,
    S.forum_name
    FROM
    "
.$db->prefix("bbplus_topics")." T,
    "
.$db->prefix("bbplus_posts")." P,
    "
.$db->prefix("bbplus_forums")." S
    WHERE P.topic_id = 
$id AND T.topic_id = " $_GET['topic_id'] . " AND S.forum_id = T.forum_id"// эта строка отличается от копипаста - вместо id форума передаем ей GET переменную, содержащую идентификатор темы просмотра
 
$query $db->query($SQL$limit);
 
while (list(
$topic_title$forum_id$subject$post_text$forum_name) = $db->fetch_row($query)) {
    
$result["title"]     = $topic_title ." : "$forum_name;
    
$result["keywords"] .= " "$forum_name ." "$topic_title ." "$subject ." "$post_text ." ";
}
}
return 
$result;
}
?>
Все, теперь заголовок и мета для тем форума будут тоже генерироваться правильно

Последний раз редактировалось ZlydenGL, 03-17-2010 в 09:50
Причина: Добавил простые примечания в код


Не ошибается только тот, кто ничего не делает. Ковчег построил любитель. Профессионалы строили Титаник.
  Сообщения: 777 c 22.09.2008 | Репутация: 92
 

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Рейтинг@Mail.ru Хостинг провайдер Majordomo. Powered by: vBulletin Version 3.0
Copyright ©2000-2024, Jelsoft Enterprises Ltd.
Все разделы прочитаны - Руководство форума - Архив - Вверх
Rambler's Top100
Output: 401.46 Kb. compressed to 399.92 Kb. by saving 1.55 Kb. (0.39%)
Page generated in 0.31243 seconds with 12 queries