Похожие темы / Similar Topics

L

ler

Гость
// Похожие темы НАЧАЛО
if ($t_data['allow_reg_tracker'] AND !$start && ($postrow[$i]['post_id'] == $t_data['topic_first_post_id']))
 
L

ler

Гость
Оно то работает, но выводит одну похожую тему.

А вот через assign_block_vars и begin/end similar не хочет выводить
 
L

ler

Гость
Скажите, можно ли использовать <!-- BEGIN similar.topics --> внутри <!-- BEGIN postrow -->
и чем отличается <!-- BEGIN similar --> от <!-- BEGIN topics -->

Вот такая ошибка выходит
Parse error: syntax error, unexpected '=' in /var/www/.../data/www/.../includes/template.php(305) : eval()'d code on line 1197

если прописать так
Код:
<!-- BEGIN similar.topics -->
    <tr class="tCenter {ROW_CLASS}">
        <td style="border-left:0;border-bottom:0">{similar.topics.S_FORUM}</td>   
        <td style="border-bottom:0;" class="tLeft"><span class="topictitle">{similar.topics.S_TOPICS}</span></td>
        <td style="border-bottom:0">{similar.topics.S_AUTHOR}</td>
        <td style="border-right:0;border-bottom:0"><b>{similar.topics.S_TOR_SIZE}</b></td>
       
    </tr>
<!-- END similar.topics -->
 

Exile

Администратор
можно ли использовать <!-- BEGIN similar.topics --> внутри <!-- BEGIN postrow -->
Нельзя, это два разные цикла для шаблонизатора, вы цикл вкладываете в цикл по сути. То, что вы хотите, в текущем шаблонизаторе не реализуемо без огромных костылей.
 
L

ler

Гость
<!-- IF postrow.IS_FIRST_POST --> за пределами <!-- END postrow --> я так понял тоже не будет работать
 
L

ler

Гость
Норм если в кэше будет 2000 записей вида similar.id_топика ? И почему то ORDER BY relevance не работает

PHP:
if (!$similar_cache = CACHE('bb_cache')->get('similar'.$topic_id))
{

$sql = "SELECT t.*, u.user_id, u.username, f.forum_id, f.forum_name, tor.size
FROM ". BB_TOPICS ." t, ". BB_USERS ." u, ". BB_FORUMS ." f, ". BB_BT_TORRENTS ." tor
WHERE t.topic_id != $topic_id
AND tor.topic_id = t.topic_id
AND MATCH (topic_title) AGAINST ('%$title%')
AND f.allow_reg_tracker = 1
AND t.forum_id = f.forum_id
AND t.forum_id != 170
AND t.topic_poster = u.user_id
ORDER BY t.topic_title LIMIT 10";


if ( !($result = DB()->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Could not get main information for similar topics", '', __LINE__, __FILE__, $sql);
}
$similar = array();
while ( $row = DB()->sql_fetchrow($result) )
{
$similar[] = $row;
}



    $similar_cache = $similar;
    CACHE('bb_cache')->set('similar'.$topic_id, $similar_cache, 104800);
}
 

dimka3210

Легенда
Ну а я бы не так сделал. Такие операции не должны быть синхронными. Это довольно тяжело и ресурсоемко.
1) Делаем вывод с разметкой на отдельной странице.
2) Ставим на страницу с топиком задержку 5-10 сек (в это время показываем прелоадер). Это позволит не выполнять тяжеловесных операции если юзеры просто серфят сайт.
3) Через exec() мониторить перед выполнением ресурсы и если их мало, то не грузить базу. Деградация функционала, но серв не положишь.
4) Для ботов делам ссылку невидимую для пользователей, он и по прямой проиндексирует.
 
L

ler

Гость
Можно сделать еще проще. Спрятать под спойлер похожие топики и подгружать их по клику
 
Сверху