- Совместимость
- проверялся на совместимость
- Изменения в БД
- требуются
- Автор
- Dredd
- Общественное достояние
- да
Вывод постеров в ленту.
Выбор количества постеров через админку
Удаление старых постеров через cron
Выбор количества постеров через админку
Удаление старых постеров через cron
- Инструкция по установке
-
Раскидать файлы по папкам
PHP:запросы: ALTER TABLE `bb_topics` ADD `topic_image` VARCHAR( 255 ) NOT NULL DEFAULT ''; INSERT INTO `bb_config` (`config_name`, `config_value`) VALUES ('posters', '1'); INSERT INTO `bb_config` (`config_name`, `config_value`) VALUES ('last_added_num', '20'); INSERT INTO `bb_cron` VALUES ('', 1, 'Очистка устаревших постеров', 'clean_posters.php', 'weekly', '1', '05:00:00', 30, '0000-00-00 00:00:00', '0000-00-00 00:00:00', NULL, 0, '', 0, 0, 0); открыть common.php и найти: 'network_news' => 'build_cat_forums.php', после вставить: 'last_added' => 'build_cat_forums.php', открыть sessions.php и найти: 'h_tsp' => 0, // show released title {...} после вставить: 'h_poster' => 1, // show posters открыть functions_torrent.php и найти: if ($reg_mode == 'request' || $reg_mode == 'newtopic') перед вставить: update_last_added(); найти: function send_torrent_with_passkey ($filename) перед вставить: function update_last_added() { global $datastore; $datastore->update('last_added'); } открыть page_header.php и найти: 'SIMPLE_HEADER' => !empty($gen_simple_header), после вставить: 'LAST_ADDED' => ($bb_cfg['posters'] && BB_SCRIPT == 'index'), 'LAST_ADDED_JS' => $user->opt_js['h_poster'], открыть admin_board.php и найти: 'SEED_BONUS_USER_REGDATE' => $new['seed_bonus_user_regdate'], после вставить: 'POSTERS' => $new['posters'], 'LAST_ADDED_NUM' => $new['last_added_num'], открыть posting.php и найти: if (defined('TORRENT_ATTACH_ID') && $bb_cfg['bt_newtopic_auto_reg'] && !$error_msg) перед вставить: if(($mode == 'newtopic' || $mode == 'editpost') && defined('TORRENT_ATTACH_ID') && $bb_cfg['bt_newtopic_auto_reg'] && !$error_msg) { if($bb_cfg['posters']) { $row = DB()->fetch_row("SELECT post_text FROM ". BB_POSTS_TEXT ." WHERE post_id = $post_id"); preg_match_all('/\[poster\](.*?)\[\/poster\]/i', $row['post_text'], $poster, PREG_SET_ORDER); preg_match_all('/\[img=right\](.*?)\[\/img\]/i', $row['post_text'], $poster2, PREG_SET_ORDER); preg_match_all('/\[img=left\](.*?)\[\/img\]/i', $row['post_text'], $poster3, PREG_SET_ORDER); preg_match_all('/\[img\](.*?)\[\/img\]/i', $row['post_text'], $poster4, PREG_SET_ORDER); $url = ''; if(isset($poster[0][1])) $url = $poster[0][1]; elseif(isset($poster2[0][1])) $url = $poster2[0][1]; elseif(isset($poster3[0][1])) $url = $poster3[0][1]; elseif(isset($poster4[0][1])) $url = $poster4[0][1]; else $url = '/styles/images/no_poster.png'; DB()->query("UPDATE ". BB_TOPICS ." SET topic_image = '$url' WHERE topic_id = '$topic_id'"); $datastore->update('last_added'); $row = DB()->fetch_row("SELECT pt.post_text FROM ". BB_BT_TORRENTS ." tr LEFT JOIN ". BB_TOPICS ." t ON(tr.topic_id = t.topic_id) LEFT JOIN ". BB_POSTS_TEXT ." pt ON(pt.post_id = tr.post_id) WHERE t.topic_id = $topic_id"); CACHE('bb_cache')->set("lenta-$topic_id", $row, 300); } } открыть index.php и найти: // Network news if ($bb_cfg['show_network_news']) перед вставить: // BEGIN last 10. if($bb_cfg['posters']) { if (!$last_added = $datastore->get('last_added')) { $datastore->update('last_added'); $last_added = $datastore->get('last_added'); } if(empty($last_added)) { $template->assign_vars(array( 'EMPTY' => true, )); } else { $template->assign_vars(array( 'EMPTY' => false, )); foreach ($last_added as $last_add) { $template->assign_block_vars('lastAdded', array( 'TITLE' => wbr(str_short($last_add['topic_title'], 50)), 'TOPIC_ID' => $last_add['topic_id'], 'FORUM' => $last_add['forum_name'], 'FORUM_ID' => $last_add['forum_id'], 'POSTER' => profile_url(array('username' => $last_add['username'], 'user_rank' => $last_add['user_rank'])), 'POSTER_ID' => $last_add['user_id'], 'TORRENT_TIME' => bb_date($last_add['reg_time'], 'd-M', 'false'), 'POSTER_FULL' => $last_add['topic_image'], 'SIZE' => humn_size($last_add['size']), )) ; } } } // END last 10 открыть admin_board.tpl и найти: <tbody class="bonus_upload"></tbody> после вставить: <tr class="row3 med"> <td class="bold tCenter" colspan="2">Лента новинок</td> </tr> <tr> <td><h4>Включить/отключить ленту</h4></td> <td> <label><input type="radio" name="posters" value="1" <!-- IF POSTERS -->checked="checked"<!-- ENDIF --> />{L_ENABLED}</label> <label><input type="radio" name="posters" value="0" <!-- IF not POSTERS -->checked="checked"<!-- ENDIF --> />{L_DISABLED}</label> </td> </tr> <tr> <td><h4>Количество постеров в ленте</h4></td> <td><input class="post" type="text" size="25" maxlength="2" name="last_added_num" value="{LAST_ADDED_NUM}" /> </td> </tr> открыть index.tpl и найти: <a class="menu-root" href="#only-new-options">{L_DISPLAYING_OPTIONS}</a> перед вставить: <!-- IF LAST_ADDED --><a class="menu-root" href="#hide-posters">Лента новинок</a> · <!-- ENDIF --> открыть page_header.tpl и найти: function post2url (url, params) { params = params || {}; var f = document.createElement('form'); f.setAttribute('method', 'post'); f.setAttribute('action', url); params['form_token'] = '{FORM_TOKEN}'; for (var k in params) { var h = document.createElement('input'); h.setAttribute('type', 'hidden'); h.setAttribute('name', k); h.setAttribute('value', params[k]); f.appendChild(h); } document.body.appendChild(f); f.submit(); return false; } после вставить: var hidePostImg = false; function initPostImages(context) { if (hidePostImg) return; var $in_spoilers = $('div.sp-body var.postImg', context); $('var.postImg', context).not($in_spoilers).each(function(){ var $v = $(this); var src = $v.attr('title'); var $img = $('<img src="'+ src +'" class="'+ $v.attr('class') +'" alt="pic" />'); $img = fixPostImage($img); var maxW = ($v.hasClass('postImgAligned')) ? postImgAligned_MaxWidth : postImg_MaxWidth; $img.bind('click', function(){ return imgFit(this, maxW); }); if (user.opt_js.i_aft_l) { $('#preload').append($img); var loading_icon = '<a href="'+ src +'" target="_blank"><img src="{SITE_URL}styles/images/pic_loading.gif" alt="" /></a>'; $v.html(loading_icon); if ($.browser.msie) { $v.after('<wbr>'); } $img.one('load', function(){ imgFit(this, maxW); $v.empty().append(this); }); } else { $img.one('load', function(){ imgFit(this, maxW) }); $v.empty().append($img); if ($.browser.msie) { $v.after('<wbr>'); } } }); $('var.posterImg', context).each(function(){ var $v = $(this); var src = $v.attr('title'); var $img = $('<img src="'+ src +'" class="'+ $v.attr('class') +'" width="260px;" alt="Загружается..." border="0" />'); $img = fixPostImage($img); $v.empty().append($img); if ($.browser.msie) { $v.after('<wbr>'); } }); } найти: </div><!--/only-new-options--> <!-- ENDIF / SHOW_ONLY_NEW_MENU --> после вставить: <!-- IF LAST_ADDED --> <div class="menu-sub" id="hide-posters"> <table cellspacing="1" cellpadding="4"> <tr> <th>Опции ленты новинок</th> </tr> <tr> <td> <fieldset id="ajax-topics"> <legend>Настройка ленты</legend> <div class="pad_4"> <label> <input type="checkbox" <!-- IF LAST_ADDED_JS -->{CHECKED}<!-- ENDIF --> onclick="user.set('h_poster', this.checked ? 1 : 0);" />Показывать ленту </label> </div> </fieldset> </td> </tr> <tr> <td class="cat tCenter pad_4"><input type="button" value="{L_SUBMIT}" onclick="window.location.reload();" /></td> </tr> </table> </div> <!-- ENDIF --> найти: <!--/menus--> после вставить: <!-- IF LAST_ADDED && LAST_ADDED_JS && not EMPTY --> <script type="text/javascript" src="{SITE_URL}styles/js/jquery.cluetip.js"></script> <script type="text/javascript" src="{SITE_URL}styles/js/jquery.scrollable.js"></script> <script type="text/javascript" src="{SITE_URL}styles/js/jquery.mousewheel.js"></script> <link type="text/css" rel="stylesheet" href="{SITE_URL}styles/templates/default/css/cluetip.css"/> <script type="text/javascript"> $(document).ready(function() { $('div.load-local').cluetip({local:true, cursor: 'pointer',showTitle: true,arrows: true}); $("div.scrollable").scrollable({size: 8, items: "#thumbs", hoverClass: "hover", keyboard: true, loop: false }); }); </script> <table cellpadding="0" cellspacing="0" class="poster"> <tr> <td> <!-- root element for scrollable --> <div class="scrollable"> <div id="thumbs"> <!-- BEGIN lastAdded --> <div class="load-local" rel="#loadme_{lastAdded.TOPIC_ID}" title="{lastAdded.TITLE}" onclick="top.location.href='viewtopic.php?t={lastAdded.TOPIC_ID}';" onmouseover="initPostImages($('#loadme_{lastAdded.TOPIC_ID}'));"> <a href="/viewtopic.php?t={lastAdded.TOPIC_ID}"><img src="/thumb.php?t={lastAdded.TOPIC_ID}" alt=""></a> <div style="display:none;" id="loadme_{lastAdded.TOPIC_ID}" > <center><img src="{lastAdded.POSTER_FULL}" width="260" alt=""></center> <br /> {L_FORUM}: <b>{lastAdded.FORUM}</b> <br /> {L_AUTHOR}: <b>{lastAdded.POSTER}</b> <br /> {L_DATE}: <b>{lastAdded.TORRENT_TIME}</b> <br /> {L_SIZE}: <b>{lastAdded.SIZE}</b> </div> </div> <!-- END lastAdded --> </div> </div> </td> </tr> </table> <!-- ENDIF --> открыть build_cat_forums.php и найти: // // Network_news // перед вставить: //Store LastAdded if($bb_cfg['posters']) { $data = DB()->fetch_rowset("SELECT tr.topic_id, tr.forum_id, tr.reg_time, tr.size, t.topic_title, t.topic_image, f.forum_name, u.username, u.user_id, u.user_rank FROM ". BB_BT_TORRENTS ." tr LEFT JOIN ". BB_TOPICS ." t ON tr.topic_id = t.topic_id LEFT JOIN ". BB_FORUMS ." f ON tr.forum_id = f.forum_id LEFT JOIN ". BB_USERS ." u ON tr.poster_id = u.user_id ORDER BY tr.reg_time DESC LIMIT 0," . $bb_cfg['last_added_num']); $this->store('last_added', $data); }