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

Started by Tehek on 2012-11-19 14:15 — 16 replies, 3960 views

#1
Здравствуйте, прошу помочь советом. Задача сделать кнопку случайной темы для определенного раздела. Собственно не могу вставить данные в ссылку для кнопки...
// 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'];
}
Запрос в базу сделал, данные получил, рандом сделал, получил данные вида http://site_name/viewtopic.php?t=130. Теперь нужно как то сделать это в виде ссылке на главной странице. Пробовал добавить этот код на главную страницу, работает но есть минус, рандом происходит в момент обновления страницы, а нужно в момент нажатии кнопки. Собственно прошу помочь 🙂
#2
это же футер > рабочая основа
#3
// 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'];
}

Эм
$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

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

Идём в шаблон index.tpl
# и в любом месте делаем ссыдку, кнопки и прочее
<a href="/viewtopic.php?t={RAND}">Случайная раздача!!!</a>
#4
dimka3210, насчет выборки случайных данных через mysql не подумал, действительно так проще. Способ который Вы описали выше я пробовал изначально, но проблема остается не решенной
Пробовал добавить этот код на главную страницу, работает но есть минус, рандом происходит в момент обновления страницы, а нужно в момент нажатии кнопки.
При нажатии несколько раз на кнопку не обновляя страницу, будет один и тот же результат.

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

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

(хотя я сделал чуть иначе, но принцип тотже)
#8
-- page_header.php вставить

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

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

<a href="?rand">Случайная раздача</a>
#9
дык тут: http://www.torrentpier.com/threads/Кнопка-случайной-темы.1736/#post-23045
тоже не обязательно в футер, а в любое место в любом шаблоне. 🙂 и без лишнего редиректа и без лишнего в многострадальном page_header (хотя вьютопик тоже довольно многострадален, но не так сильно)
#10
fly_indiz, как ты писал:

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

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