Кнопка случайной темы

Tehek

Пользователь
Здравствуйте, прошу помочь советом. Задача сделать кнопку случайной темы для определенного раздела. Собственно не могу вставить данные в ссылку для кнопки...
PHP:
// Random topic
function random_topic()
{
    global $bb_cfg;
    $query = "SELECT `topic_id` FROM `bb_bt_torrents` WHERE `forum_id` = " . $bb_cfg['randtopic'];
    $res = DB()->query($query);
    for($mass = array(); $elm1 = mysql_fetch_assoc($res); $mass[]=$elm1);
 
    $topicid = $mass[array_rand($mass)];
    $random_topic = "http://site_name/viewtopic.php?t=" .$topicid['topic_id'];
}
Запрос в базу сделал, данные получил, рандом сделал, получил данные вида

Please Login or Register to view hidden text.

. Теперь нужно как то сделать это в виде ссылке на главной странице. Пробовал добавить этот код на главную страницу, работает но есть минус, рандом происходит в момент обновления страницы, а нужно в момент нажатии кнопки. Собственно прошу помочь :)
 

dimka3210

Пользователь
PHP:
// Random topic
function random_topic()
{
    global $bb_cfg;
    $query = "SELECT `topic_id` FROM `bb_bt_torrents` WHERE `forum_id` = " . $bb_cfg['randtopic'];
    $res = DB()->query($query);
    for($mass = array(); $elm1 = mysql_fetch_assoc($res); $mass[]=$elm1);
 
    $topicid = $mass[array_rand($mass)];
    $random_topic = "http://site_name/viewtopic.php?t=" .$topicid['topic_id'];
}

Эм
PHP:
$query = "SELECT `topic_id` FROM `bb_bt_torrents` WHERE `forum_id` = " . $bb_cfg['randtopic'] . " ORDER BY RAND() LIMIT 1";
    $res = DB()->fetch_row($query);

Найти люблой блок передачи нанных шаблонизатору. Например в index.php

Please Login or Register to view hidden text.


И создадим свою переменную для шаблонизатора
PHP:
'RAND'           => $res,

Идём в шаблон index.tpl
PHP:
# и в любом месте делаем ссыдку, кнопки и прочее
<a href="/viewtopic.php?t={RAND}">Случайная раздача!!!</a>
 

Tehek

Пользователь
dimka3210, насчет выборки случайных данных через mysql не подумал, действительно так проще. Способ который Вы описали выше я пробовал изначально, но проблема остается не решенной
Пробовал добавить этот код на главную страницу, работает но есть минус, рандом происходит в момент обновления страницы, а нужно в момент нажатии кнопки.
При нажатии несколько раз на кнопку не обновляя страницу, будет один и тот же результат.

Собственно возвращаюсь к изначальному вопросу, где же разместить этот код?
 

dimka3210

Пользователь
Погоди, так ты хочешь открывать в новом окне(вкладке) нажимая например на средную кнопку мыши и всё время разные?
 

Tehek

Пользователь
Да, на самом деле прикол в том, что люди нажимают на кнопку находят рандом тему, в браузере возвращаются на главную не по ссылкам! и жмут еще раз. По видимому нужно делать функцию в ajax'е, но в нем я разобраться не смог :(
 

fly_indiz

Пользователь
совсем необязательно ajax.
как сделано на рутрекере в переинтерпретации к TPII: делаешь в футере ссылку типа .viewtopic.php?randrelease=1 это и будет постоянной ссылкой.
а в viewtopic.php в самом начале, там где определяется номер топика, или поста - туда ещё добавить проверку переданного параметра
if ($_GET['randrelease'] == 1)
вот здесь и можно найти рандомный топик, выбрать его id - и viewtopic.php покажет выбранный случайный топик.

В такой реализации выбор случайного топика происходит как раз сразу при клике на ссылку - вроде то что и требуется в исходной задаче.

(хотя я сделал чуть иначе, но принцип тотже)
 
Y

Yoko

Гость
-- page_header.php вставить

PHP:
if (isset($_GET['rand']))
{
    тут функция.
 
redirect(TOPIC_URL . $data['topic_id']);
exit;
}

-- теперь в любое место (в шаблоне) добавляем

HTML:
<a href="?rand">Случайная раздача</a>
 

fly_indiz

Пользователь
дык тут:

Please Login or Register to view hidden text.


тоже не обязательно в футер, а в любое место в любом шаблоне. :) и без лишнего редиректа и без лишнего в многострадальном page_header (хотя вьютопик тоже довольно многострадален, но не так сильно)
 
Y

Yoko

Гость
fly_indiz, как ты писал:

-- viewtopic.php найт
PHP:
$post_id  = (!$topic_id && isset($_GET[POST_POST_URL])) ? (int) $_GET[POST_POST_URL] : 0;
-- ниже вставить

PHP:
if (isset($_GET['rand']))
{
  sleep(3); // что бы пользователь не заигрался
  тут вычислительная функция;
 $topic_id = $rel['topic_id'];
}
 
Сверху