Нужен самостоятельный скрипт вывода последних тем IPB 3.1

Антон
На сайте с 09.01.2007
Offline
148
4630

Уважаемые.

Нужен самостоятельный скрипт вывода последних тем IPB 3.1!

То есть не модуль для какого-то движка, а именно маленький скриптик, который делает выборку из БД и выводит в нужном мне виде.

У кого есть похожий скрипт, поделитесь пожалуйста. Спасибо!

mr.Cent добавил 11.10.2010 в 16:20

Точнее у меня есть некий скрипт, который работает на основе стандартного хука IPB. Но зараза выводит только последние темы. То есть должна быть создана именно тема, чтобы появится в результатах скрипта. А меня интересует, как сделать вывод именно тем, в которых оставлено сообщение.


<?php

/* Настройки */
/* ========================================================================== */
// Путь к форуму
if (!defined('IPBNETRU_IPB3_ROOT')) {
define('IPBNETRU_IPB3_ROOT', '/lalala/forum/');
}

// Количество тем
if (!defined('IPBNETRU_RECENT_TOPICS_COUNT')) {
define('IPBNETRU_RECENT_TOPICS_COUNT', 8);
}

/* Инициализация */
/* ========================================================================== */
define('IPB_THIS_SCRIPT', 'public');
define('IPS_PUBLIC_SCRIPT', 'index.php');

require_once IPBNETRU_IPB3_ROOT.'/initdata.php';
require_once IPS_ROOT_PATH.'sources/base/ipsRegistry.php';

ipsRegistry::init();

/* Функции */
/* ========================================================================== */
/**
* Возвращает указанное количество последних тем.
*
* @param int $count
*
* @return string
*/
function ipbnetruGetCustomRecentTopics($count = 5) {
$topicIDs = array();
$bvnp = explode(',', ipsRegistry::$settings['vnp_block_forums']);
$classForum = ipsRegistry::getClass('class_forums');

ipsRegistry::getClass('class_localization')->loadLanguageFile('public_topic', 'forums');

// Grab last X data
foreach($classForum->forum_by_id as $forumID => $forumData) {
if (!isset($forumData['can_view_others']) || !$forumData['can_view_others']) {
continue;
}

if ($forumData['password']) {
continue;
}

if ( !ipsRegistry::getClass('permissions')->check('read', $forumData)){
continue;
}

if (is_array($bvnp) && in_array($forumID, $bvnp)) {
continue;
}

$isTrash = ($forumID == ipsRegistry::$settings['forum_trash_can_id']);
if (ipsRegistry::$settings['forum_trash_can_id'] && $isTrash) {
continue;
}

$_topics = $classForum->lastXThaw($forumData['last_x_topic_ids']);
if (is_array($_topics)) {
foreach($_topics as $id => $time) {
$topicIDs[$time] = $id;
}
}
}

// Получаем данные
$topics = array();
if ($topicIDs) {
krsort($topicIDs);

$_topics = array_slice($topicIDs, 0, $count);
if ($_topics) {
ipsRegistry::DB()->build(array(
'select' => 't.tid, t.title, t.title_seo, t.start_date, t.starter_id, t.starter_name',
'from' => array('topics' => 't'),
'where' => 't.tid IN ('.implode(',', array_values($_topics)).')',
'order' => 't.start_date DESC',
'add_join' => array(
array(
'select' => 'm.members_display_name, m.members_seo_name',
'from' => array( 'members' => 'm' ),
'where' => 'm.member_id=t.starter_id',
'type' => 'left',
),
),
));
ipsRegistry::DB()->execute();

while ($topic = ipsRegistry::DB()->fetch()) {
$topics[$topic['start_date']] = $topic;
}
}
}

// Вывод: создать собственный шаблон
return ipsRegistry::getClass('output')->getTemplate('boards')
->hookRecentTopics2($topics);
}

/* Получение */
/* ========================================================================== */
$html = ipbnetruGetCustomRecentTopics(IPBNETRU_RECENT_TOPICS_COUNT);

// Замена стандартных строк
$html = ipsRegistry::getClass('output')->replaceMacros($html);

// Хуки :)
$html = ipsRegistry::getClass('output')->templateHooks($html);
$html = preg_replace("#<!--hook\.([^\>]+?)-->#", '', $html);

/* Вывод */
/* ========================================================================== */
echo $html;

?>
SP
На сайте с 20.05.2008
Offline
56
#1

Попробуйте строчку

'order' => 't.start_date DESC',

заменить на

'order' => 't.last_post DESC',

Тогда, по идее, выведутся темы, упорядоченные по дате последнего сообщения в них.

Делаю небольшие заказы на php, perl, js/ajax, delphi; парсеры, простые сайты с админкой, установка\настройка sape, wordpress и др. Мой Блог (http://www.seoproger.ru)
siv1987
На сайте с 02.04.2009
Offline
427
#2
mr.Cent:

Нужен самостоятельный скрипт вывода последних тем IPB 3.1!
mr.Cent:
Точнее у меня есть некий скрипт, который работает на основе стандартного хука IPB. Но зараза выводит только последние темы. То есть должна быть создана именно тема, чтобы появится в результатах скрипта. А меня интересует, как сделать вывод именно тем, в которых оставлено сообщение.

Насколько я понял, тебе нужно вывести темы в которые оставлены последние сообщения?..

Попробуй заменить

'order' => 't.start_date DESC',

на

'order' => 'last_post DESC',

хз, но вроде должно сработать.

siv1987 добавил 11.10.2010 в 17:56

SeoProger, опередил.

SP
На сайте с 20.05.2008
Offline
56
#3

Хотя скорее всего еще понадобится поубирать условия where в запросе. Вобщем, если я правильно понял задачу - нужно выполнить запрос к базе

SELECT tid, title, title_seo  FROM `ipb_topics`

WHERE state = 'open' ; э
ORDER BY last_post DESC
LIMIT 5

Где ipb_topics - ваша таблица с темами, ограничения WHERE и LIMIT меняются в соответствии с задачей.

Антон
На сайте с 09.01.2007
Offline
148
#4

Пока ждал ответа, нашел другое решение:


<?php
//======[ОСНОВНЫЕ НАСТРОЙКИ]======
//Префикс таблицы с IPB
$prefix = '';
//Сколько тем выводить
$num = 10;
//Сколько символов оставить в названии темы после урезания
$topic_num_sym = 65;
//Имя папки с картинками текущего скина
$img_path = '1';
//Формат времени
$time = 'H:i';
//Форумы, которые мы не трогаем
$forumexclude = '0';
//Сервер БД на котором висит база форума
$host="localhost";
//Имя БД
$database="lalala";
//Логин БД
$username="lalala";
//Пароль БД
$password="lalala";

//====[Если не знаем PHP - дальше ничего не трогаем :)]=========

$ipb_db = mysql_pconnect($host, $username, $password);
mysql_select_db($database, $ipb_db);
$rd = "SET CHARACTER SET utf8";
IF (!$result = mysql_query($rd)) {
ECHO "ERROR!!!\n";
}
$resultf = mysql_query("SELECT tid, title, description, state, posts, starter_id, last_poster_id, last_post, icon_id, starter_name, last_poster_name, views, topic_hasattach FROM ".$prefix."topics WHERE (forum_id NOT IN ($forumexclude)) ORDER BY last_post DESC LIMIT $num",$ipb_db) or die(mysql_error());
$row_resultf = mysql_fetch_assoc($resultf);
$totalRows_resultf = mysql_num_rows($resultf);
do {
$topicstrip = $row_resultf['title'];
if (strlen($topicstrip) > $topic_num_sym) {
$topicstrip = substr($topicstrip,0,$topic_num_sym);
$topicstrip = $topicstrip."...";
}
$status = ($row_resultf['state'] == "closed") ? "<img src=\"forum/style_images/$img_path/f_closed.gif\" border=\"0\" alt=\"Тема закрыта\">" : "";
$attach = ($row_resultf['topic_hasattach'] == "1") ? "<img src=\"temp/A-Vector/images/files.gif\" border=\"0\" alt=\"В сообщении есть прикрепленные файлы\"> " : "";

$last_date = date($time,$row_resultf['last_post']);
$bt.= "<small class=\"3\">$last_date:</small> <b><a title=\"".$row_resultf['description']."\" href=\"forum/index.php?showtopic=".$row_resultf['tid']."&view=getlastpost\">$topicstrip</a></b><br>";
} while($row_resultf = mysql_fetch_assoc($resultf));
mysql_free_result($resultf);
echo $bt;
return $bt;
?>

Что скажете?

Q
На сайте с 04.01.2010
Offline
5
#5

почти то же самое что и советовали

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий