News From Thread
Скачать его можно в этой теме,
ссылка.
Что делает модуль? Модуль делает тоже самое, что и модуль новостей, только выводит не первые сообщения из новых тем, а выводит сообщения из определенных тем.
Демо.
Установка:
1) Скачиваем файл.
2) Заходим в админ панель -> в панель vBadvanced CMPS -> Скачать/Загрузить модуль.
а) Загрузка модуля. Нажимаем обзор и выбираем xml файл соответствующий вашей кодировки.
б) Активно. Ставим галочку да.
в) Стиль для установки. Выбираем все шаблоны.
г) Группы пользователей. Выделяем все группы.
нажимаем ок.
Далее модуль появится в списке модулях и добавляем его на страницу, как стандартный модуль.
Настройка:
Настройка модуля производитя ручками в файле newsfromthread.php.
Который находится Корень сайта/moduls/
Возможные настройки:
$threads_id = array(1826), 1826 - номер темы из которой будут выводиться сообщения, можно добавить несколько номеров разных тем через запятую.
- Максимальное количество сообщений, отображаемых на странице.
- Количество страниц, отображаемых в панели перехода по страницам.
- Максимальное количество символов, которые нужно отображать из сообщения, до ссылки '[Читать дальше]'.
- Формат даты и времени.
- Отображать вложения в новых сообщениях.
- Отображать аватары пользователей в каждом сообщении.
- Отображать иконки для каждого сообщения.
- Отображение сообщений вместе или отдельно.
- использовать строковые функции.
Добавлено через 5 минут 9 секунд
А теперь вопросы к великим веб программистам.
Вот до чего я довел:
Вот код:
PHP код:
<?php
// ++=========================================================================++
// || vBadvanced CMPS v3.2.1 (для vBulletin 3.6 - 3.8) - Русская версия
// || © 2003-2009 vBadvanced.com - Все права защищены
// || Русский перевод: Lazek и zCarot
// ++ ========================================================================++
// Настройки модуля
$threads_id = array(1826); // Список тем, которые будут выводится в модуле новостей.
$maxposts = 10; // Максимальное количество сообщений, отображаемых на странице.
$newsperpage = 10; // Количество страниц, отображаемых в панели перехода по страницам.
$cutoffdate = 30; // Здесь вы можете ввести количество дней, определяющих временной предел для новых сообщений. Любые сообщения, которые были созданы/обновлены до текущей даты минус это количество дней, не будут включены. Это предотвращает большие поисковые запросы по таблице на больших форумах. Установите параметр на 0 для снятия ограничения.
$maxchars = 0; // Максимальное количество символов, которые нужно отображать из сообщения, до ссылки '[Читать дальше]'. Установите здесь 0, чтобы показывать сообщения полностью.
$dateformat = ""; // Формат даты и времени. Установите значение в "", если не желаете отображать время создания сообщения.
$showattachments = 1; // Отображать вложения в новых сообщениях. Если "1", вложения отображаются. Если "0", вложения не отображаются.
$showavatar = 0; // Отображать аватары пользователей в каждом сообщении. Если "1", аватары отображаются. Если "0", аватары не отображаются.
$showicon = 0; // Отображать иконки для каждого сообщения. Если "1", иконки отображаются. Если "0", иконки не отображаются.
$news_legacy = 1; // Эта опция определяет, как отображать сообщения: вместе или раздельно. Если "1", отображаются вместе. Если "0", отображаются раздельно.
$utf8use = 0; // использовать строковые функции с поддержкой UTF8. Если "1" то поддержка включена.
$readmore = "[Читать дальше]";
$messagefromtheme = "Сообщение из темы ";
if (!$newsprocessed[$mods['modid']])
{
foreach ($modules AS $omodid)
{
$omods =& $vbulletin->adv_modules[$omodid];
// Archive comes first
if (($mods['parent'] AND $mods['parent'] == $omods['identifier']) OR (!$mods['parent'] AND $mods['modid'] == $omods['modid']))
{
$newsmod = $vbulletin->adv_modules[$omods['modid']];
}
else if (($mods['parent'] AND $mods['modid'] == $omods['modid']) OR (!$mods['parent'] AND $omods['parent'] == $mods['identifier']))
{
$hasarchive = true;
$archivemod = $vbulletin->adv_modules[$omods['modid']];
}
}
}
$currentmodule = ($mods['modid'] == $newsmod['modid']) ? 'news' : 'archive';
if (!$newsprocessed[$newsmod['modid']] AND (!$newsprocessed[$archivemod['modid']] OR !$hasarchive))
{
require_once(DIR . '/includes/functions_forumdisplay.php');
$newsprocessed[$newsmod['modid']] = true;
$newsprocessed[$archivemod['modid']] = true;
$newslimit = 'LIMIT ' . $maxposts;
$news_wrappername = ($newsmod['altshell']) ? $newsmod['altshell'] : 'adv_portal_module_wrapper';
$newspagevar = $newsmod['identifier'] . '_page';
// Pagination limits
$vbulletin->input->clean_gpc('r', $newspagevar, TYPE_INT);
$vbulletin->GPC[$newspagevar] = abs($vbulletin->GPC[$newspagevar]);
if ($vbulletin->GPC[$newspagevar])
{
if ($vbulletin->GPC[$newspagevar] > $newsperpage)
{
$vbulletin->GPC[$newspagevar] = $newsperpage;
}
$newslimit = 'LIMIT ' . (($vbulletin->GPC[$newspagevar] - 1) * $maxposts) . ', ' . ($maxposts);
}
$newstids = array();
$newspids = array();
$limitapplied = true;
$mods['inforums'] = $threads_id;
if (!empty($mods['inforums']))
{
$getnewsids = $db->query_read("
SELECT *
FROM " . TABLE_PREFIX . "post as post
WHERE post.visible = 1
AND threadid IN(" . implode(',', $threads_id) . ")
AND dateline > " . iif($cutoffdate > 0, (TIMENOW - ($cutoffdate * 86400)), 0) . "
ORDER BY dateline DESC
$newslimit
");
// Reset the array here so the threads can be combined and to prevent pagination problems
$newstids = array();
$newspids = array();
while ($ids = $db->fetch_array($getnewsids))
{
$newspids[] = $ids['postid'];
}
}
if (!empty($newspids))
{
// Get Attachments
if ($showattachments == 1)
{
$nattachcache = array();
$getnattach = $db->query_read("
SELECT attachmentid, filename, filesize, dateline, postid, IF(thumbnail_filesize > 0, 1, 0) AS hasthumbnail, counter, attachment.thumbnail, attachment.thumbnail_dateline, LENGTH(attachment.thumbnail) AS thumbnailsize, newwindow, visible
FROM " . TABLE_PREFIX . "attachment AS attachment
LEFT JOIN " . TABLE_PREFIX . "attachmenttype AS attachmenttype ON (attachment.extension = attachmenttype.extension)
WHERE postid IN(" . implode(',', $newspids) . ")
AND visible = 1
ORDER BY attachmentid
");
while ($nattach = $db->fetch_array($getnattach))
{
$nattach['truedateline'] = $nattach['dateline'];
// only way to add &cmps=1 to [attach] tags
$nattach['dateline'] = $nattach['dateline'] . '&cmps=1';
$nattachcache[$nattach['postid']][$nattach['attachmentid']] = $nattach;
}
}
$newscount = 0;
$parsedposts = '';
$vba_news_fields = '';
$vba_news_join = '';
// Icons
if ($showicon == 1)
{
$vba_news_fields .= ', post.iconid AS posticonid, iconpath AS posticonpath';
$vba_news_join .= ' LEFT JOIN ' . TABLE_PREFIX . 'icon AS icon ON (icon.iconid = post.iconid)';
}
// Avatar
if ($showavatar == 1)
{
$vba_news_fields .= ', avatarpath, NOT ISNULL(customavatar.userid) AS hascustom, customavatar.dateline AS avatardateline, avatarrevision';
$vba_news_join .= ' LEFT JOIN ' . TABLE_PREFIX . 'avatar as avatar ON (avatar.avatarid = user.avatarid)
LEFT JOIN ' . TABLE_PREFIX . 'customavatar as customavatar ON (customavatar.userid = user.userid)';
}
$lightboxid = '';
if (IS_VB_38)
{
$bbcode_parser->containerid = 'vba_news' . $newsmod['modid'];
$lightboxid = '_' . $bbcode_parser->containerid;
}
$getnews = $db->query_read("
SELECT user.*, post.postid, post.threadid, post.username as postusername, post.userid as postuserid,
post.title, post.dateline AS postdateline, post.pagetext, post.attach, thread.title as threadtitle
$vba_news_fields
FROM " . TABLE_PREFIX . "post AS post
LEFT JOIN " . TABLE_PREFIX . "user AS user ON (post.userid = user.userid)
LEFT JOIN " . TABLE_PREFIX . "thread AS thread ON (post.threadid = thread.threadid)
$vba_news_join
WHERE post.threadid IN(" . implode(',', $threads_id) . ")
AND post.dateline > " . iif($cutoffdate > 0, (TIMENOW - ($cutoffdate * 86400)), 0) . "
ORDER BY post.dateline DESC
" . $newslimit . "
");
$newsrows = $db->num_rows($getnews);
while ($news = $db->fetch_array($getnews))
{
$newscount++;
$news['dateposted'] = vbdate($dateformat, $news['postdateline'], '', '');
$news = process_thread_array($news, '', $showicon);
// News Avatar
if ($showavatar == 1 AND $vbulletin->userinfo['showavatars'])
{
if ($news['avatarpath'])
{
$news['avatarpath'] = $vbulletin->options['bburl'] . '/' . $news['avatarpath'];
}
else if ($news['hascustom'])
{
$news['avatarpath'] = $vbulletin->options['bburl'] . '/';
if ($vbulletin->options['usefileavatar'])
{
$news['avatarpath'] .= $vbulletin->options['avatarurl'] . '/avatar' . $news['postuserid']. '_' . $news['avatarrevision'] . '.gif';
}
else
{
$news['avatarpath'] .= 'image.php?' . $session['sessionurl'] . 'u=' . $news['postuserid'] . '&dateline=' . $news['avatardateline'];
}
}
}
$bbcode_parser->attachments =& $nattachcache[$news['postid']];
$news['message'] = $bbcode_parser->do_parse($news['pagetext'], 1, 1, 1, 1);
$news['pagetext_html'] = $news['message'];
// #### Strip characters and add "read more"
if ($maxchars > 0 AND ($utf8use == 1) ? mb_strlen($news['message'], 'utf8') : strlen($news['message']) > $maxchars)
{
$trimmedlength = ($utf8use == 1) ?
mb_strrpos(($utf8use == 1) ?
mb_substr($news['message'], 0, $maxchars, 'utf8') :
substr($news['message'], 0, $maxchars), ' ', 'utf8') :
strrpos(($utf8use == 1) ?
mb_substr($news['message'], 0, $maxchars, 'utf8') :
substr($news['message'], 0, $maxchars), ' ');
$news['message'] = ($utf8use == 1) ?
mb_substr($news['message'], 0, $trimmedlength, 'utf8') :
substr($news['message'], 0, $trimmedlength);
// Make sure we're not cutting off in the middle of tags
// ##### <img>
$lastimage = strripos($news['message'], '<img');
if ($lastimage !== false)
{
$imagecheck = substr($news['message'], $lastimage);
// Don't have the end, so find it
if (strpos($imagecheck, ' />') === false)
{
$remainstring = substr($news['pagetext_html'], $trimmedlength);
$endimgpos = strpos($remainstring, ' />') + 3;
if ($endimgpos != false)
{
$news['message'] .= substr($remainstring, 0, $endimgpos);
$trimmedlength += $endimgpos;
}
}
}
// ##### <a>
$lasthref = strripos($news['message'], '<a');
if ($lasthref !== false)
{
$hrefcheck = substr($news['message'], $lasthref);
// Don't have the end, so just strip the tag
if (strpos($hrefcheck, '>') === false)
{
$news['message'] = substr($news['message'], 0, $lasthref);
$trimmedlength -= $lasthref;
}
}
// ##### <br />
$lastbr = strripos($news['message'], '<br');
if ($lastbr !== false)
{
$brcheck = substr($news['message'], $lastbr);
// Don't have the end, so add it
if (strpos($brcheck, ' />') === false)
{
$news['message'] .= ' />';
$trimmedlength += 3;
}
}
// ##### <table>
$lasttable = strripos($news['message'], '<table');
if ($lasttable !== false)
{
$tablecheck = substr($news['message'], $lasttable);
// Don't have the end, so strip the tag
if (strpos($tablecheck, '>') === false)
{
$news['message'] = substr($news['message'], 0, $lasttable);
$trimmedlength -= $lasttable;
}
}
// ##### <td>
$lasttd = strripos($news['message'], '<td');
if ($lasttd !== false)
{
$tdcheck = substr($news['message'], $lasttd);
// Don't have the end, so find it
if (strpos($tdcheck, '>') === false)
{
$remainstring = substr($news['pagetext_html'], $trimmedlength);
$endtdpos = strpos($remainstring, '>') + 1;
if ($endtdpos != false)
{
$news['message'] .= substr($remainstring, 0, $endtdpos);
$trimmedlength += $endtdpos;
}
}
}
// ##### <object>
$lastobject = strripos($news['message'], '<object');
if ($lastobject !== false)
{
$objectcheck = substr($news['message'], $lastobject);
// Don't have the end, so find it
if (strpos($objectcheck, '</object>') === false)
{
$remainstring = substr($news['pagetext_html'], $trimmedlength);
$endobjectpos = strpos($remainstring, '</object>') + 9;
if ($endobjectpos != false)
{
$news['message'] .= substr($remainstring, 0, $endobjectpos);
$trimmedlength += $endobjectpos;
}
}
}
// ##### Comment tags
$lastcom = strripos($news['message'], '<!');
if ($lastcom)
{
$comcheck = substr($news['message'], $lastcom);
// Don't have the end, so add it
if (strpos($comcheck, '-->') === false)
{
$news['message'] .= '-->';
$trimmedlength += 3;
}
}
// ##### <font>
$lastfont = strripos($news['message'], '<font');
if ($lastfont !== false)
{
$fontcheck = substr($news['message'], $lastfont);
if (strpos($fontcheck, '>') === false)
{
$news['message'] = substr($news['message'], 0, $lastfont);
$trimmedlength -= $lastfont;
}
}
// ##### Now check normal HTML tags
preg_match_all("/(<([\w]+)[^>]*>)/", $news['message'], $opentags);
preg_match_all("/(<\/([\w]+)[^>]*>)/", $news['message'], $closetags);
$opentags = array_count_values(array_reverse($opentags[2]));
$closetags = array_count_values(array_reverse($closetags[2]));
foreach ($opentags AS $otag => $value)
{
$otag = trim($otag);
switch ($otag)
{
case 'br':
case 'hr':
case 'img':
case 'param':
continue;
default:
if ($closetags[$otag] != $value)
{
for ($i = $closetags[$otag]; $i < $value; $i++)
{
$news['message'] .= '</' . $otag . '>';
}
}
}
}
$news['message'] .= '... <a href="' . $vbulletin->options['bburl'] . '/showpost.php?p=' . $news['postid'] . '&goto=postid">' . $readmore . '</a>';
}
// ##### Attachments
if ($nattachcache[$news['postid']] AND $showattachments == 1)
{
foreach ($nattachcache[$news['postid']] AS $attachid => $attachment)
{
$attachment['filesize'] = vb_number_format($attachment['filesize'], 1, true);
if ($attachment['hasthumbnail'] AND $vbulletin->options['attachthumbs'] AND $vbulletin->userinfo['showimages'])
{
$show['newwindow'] = $attachment['newwindow'];
eval('$news[\'attachment\'] .= "' . fetch_template('adv_portal_newsbits_attach_thumb') . '";');
}
else
{
$attachment['attachmentextension'] = file_extension($attachment['filename']);
eval('$news[\'attachment\'] .= "' . fetch_template('adv_portal_newsbits_attach_inline') . '";');
}
}
}
// Icon
$blockbullet = $vba_style['portal_blockbullet'];
if ($showicon == 1)
{
$vba_style['portal_blockbullet'] = '';
if ($news['posticonpath'])
{
$vba_style['portal_blockbullet'] = '<img alt="" border="0" src="' . $news['posticonpath'] . '" class="inlineimg" />';
}
}
// Separate the posts
if ($news_legacy == 0)
{
$mod_options['portal_news_legacy'] = 0;
if($news['title'])
{
$mods['title'] = '<a href="' . $vbulletin->options['bburl'] . '/showthread.php?' . $vbulletin->session->vars['sessionurl'] . 'p=' . $news['postid'] . '&goto=postid">' . $news['title'] . '</a>';
}
else
{
$mods['title'] = '<a href="' . $vbulletin->options['bburl'] . '/showthread.php?' . $vbulletin->session->vars['sessionurl'] . 'p=' . $news['postid'] . '&goto=postid">' . $messagefromtheme . '"' .$news['threadtitle'] . '"' . '</a>';
}
$mods['collapse'] = $newsmod['modid'] . '_' . $news['postid'];
eval('$modulehtml = "' . fetch_template('adv_portal_newsbits_for_thread') . '";');
if ($newsmod['useshell'] & $vba_shellint['enable'])
{
if ($newsmod['useshell'] & $vba_shellint['collapse'])
{
$modcollapse = 'display: none';
$modimgcollapse = '_collapsed';
}
else
{
$modcollapse = $vbcollapse['collapseobj_module_' . $mods['collapse']];
$modimgcollapse = $vbcollapse['collapseimg_module_' . $mods['collapse']];
}
eval('$home[$newsmod[\'modid\']][\'content\'] .= "' . fetch_template($news_wrappername) . '";');
}
else
{
$home[$newsmod['modid']]['content'] .= $modulehtml;
}
}
// No separation
else
{
if($news['title'])
{
$post_title = '<a href="' . $vbulletin->options['bburl'] . '/showthread.php?' . $vbulletin->session->vars['sessionurl'] . 'p=' . $news['postid'] . '&goto=postid">' . $news['title'] . '</a>';
}
else
{
$post_title = '<a href="' . $vbulletin->options['bburl'] . '/showthread.php?' . $vbulletin->session->vars['sessionurl'] . 'p=' . $news['postid'] . '&goto=postid">' . $messagefromtheme . '"' .$news['threadtitle'] . '"' . '</a>';
}
eval('$newsbits .= "' . fetch_template('adv_portal_newsbits_for_thread') . '";');
}
}
$db->free_result($getnews);
// ##### Process news module if not splitting posts and we have no module shell
if ($newsbits AND $news_legacy == 1)
{
$mods['modcol'] = $newsmod['modcol'];
$mods['colspan'] = $newsmod['colspan'];
$mods['title'] = $newsmod['title'];
$mods['collapse'] = $newsmod['modid'];
$modcollapse = $vbcollapse['collapseobj_module_' . $newsmod['modid']];
$modimgcollapse = $vbcollapse['collapseimg_module_' . $newsmod['modid']];
$modulehtml = $newsbits;
if ($newsmod['useshell'])
{
eval('$home[$newsmod[\'modid\']][\'content\'] = "' . fetch_template($news_wrappername) . '";');
}
else
{
$home[$newsmod['modid']]['content'] = $modulehtml;
}
}
// ##### Lightbox stuff
if ($vbulletin->options['lightboxenabled'])
{
if (!defined('lightbox_js'))
{
$headinclude .= "\r\n<script type=\"text/javascript\" src=\"" . $vbulletin->options['bburl'] . '/clientscript/vbulletin_lightbox.js?v=' . $vbulletin->options['simpleversion'] . '"></script>';
define('lightbox_js', true);
}
$home[$newsmod['modid']]['content'] = '<div id="vba_news' . $newsmod['modid'] . '">' . $home[$newsmod['modid']]['content'] . '</div>
<script type="text/javascript">
<!--
vBulletin.register_control("vB_Lightbox_Container", "vba_news' . $newsmod['modid'] . '", ' . $vbulletin->options['lightboxenabled'] . ');
//-->
</script>';
}
// ##### Pagination
if ($newsrows >= $maxposts OR $vbulletin->GPC[$newspagevar])
{
$newscount = $db->query_first("
SELECT COUNT(*) AS count
FROM " . TABLE_PREFIX . "post
WHERE visible = 1 AND threadid IN(" . implode(',', $threads_id) . ")
AND dateline > " . iif($cutoffdate > 0, (TIMENOW - ($cutoffdate * 86400)), 0) . "
");
$oldshowpopups = $show['popups'];
$show['popups'] = false;
$newspagenav = construct_page_nav(
max($vbulletin->GPC[$newspagevar], 1),
$maxposts,
min($newscount['count'], ($maxposts * $newsperpage)),
$vba_options['portal_homeurl'] . '?' . $vba_options['portal_pagevar'] . '=' . $pages['name']
);
$show['popups'] = $oldshowpopups;
$home[$newsmod['modid']]['content'] .= '<div style="padding-bottom: ' . $vba_style['portal_vspace'] . 'px">' . str_replace(
'&page=',
'&' . $newspagevar . '=',
$newspagenav
) . '</div>';
}
}
}
$mods['noshell'] = true;
?>
Подскажите как убрать имя автора и заднию серую полосу, виде заднего фона.
А то я уже все перепробывал.