Получание списка случайных топиков
Потребовалось вот получить список каких-нибудь случайных новостей. С удивлением не нашел ничего похожего готового, только вот тут какое-то недообсуждение. Так, что пришлось делать своими руками.
Все сделано средствами самого livestreet'а без всяких хаков и прямого mysql. Да и, по идее, с выборкой из большого количества топиков должно справляться нормально. Единственное не уверен, как модуль базы данных реализует постраничность. Надеюсь быстро :)
// Задаем фильтр топиков
$aFilter=array(
'topic_publish' => 1,
// 'blog_id' => $oBlog->getId(),
);
// получаем количество топиков по заданному фильтру
$cnt=$this->Topic_GetCountTopicsByFilter($aFilter);
$out=array();
if ($cnt>0)
{
// устанавливам нужное нам число топиков
$needed=3;
if ($needed>$cnt)
{
$needed=$cnt;
}
$selected=0;
do
{
// получаем случайный топик
if ($aResult=$this->Topic_GetTopicsByFilter($aFilter,rand(1,$cnt),1))
{
// убеждаемся, что мы его еще не включили в свой список
$oTopic=array_pop($aResult['collection']);
$tid=$oTopic->getId();
if (!isset($out[$tid]))
{
// включаем в список
$out[$tid]=$oTopic;
$selected++;
}
}
} while ($selected<$needed);
}
// Ну и, например, засовываем список в темплейт
$this->Viewer_Assign('aTopics',$out);
Все сделано средствами самого livestreet'а без всяких хаков и прямого mysql. Да и, по идее, с выборкой из большого количества топиков должно справляться нормально. Единственное не уверен, как модуль базы данных реализует постраничность. Надеюсь быстро :)
3 комментария