Перейти к контенту
  • 0

Скрипт "Последнее с форума"


Nokoll

Вопрос

Рекомендуемые сообщения

  • 0

Ну если движок свой, то смело пишите такой скрипт сами)

 

Запрос SQL:

SELECT tid, title, starter_name, views FROM ibf_topics WHERE approved = 1 ORDER BY start_date DESC LIMIT 0, 10

 

Формирование ссылки на топик:

http://example.com/index.php?showtopic=$tid

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Ну, это еще не все. Надо еще добавить: последний пост из темы, проверку на права доступа к форуму (чтобы были доступны темы только из тех форумов, которые доступны гостям).
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Сделал, скрипт работает каму нада берите.

Правдо мусора много ну мне влом чистить.

<?php header("Content-Type: text/html; charset=UTF-8",true) ?>
<?php
//======[ОСНОВНЫЕ НАСТРОЙКИ]======
//Префикс таблицы с IPB
$prefix = '';
//Сколько тем выводить
$num = 10;
//Сколько символов оставить в названии темы после урезания
$topic_num_sym = 40;
//Имя папки с картинками текущего скина
$img_path = '1';
//Формат времени
$time = 'd.m H:i';
//Форумы, которые мы не трогаем
$forumexclude = '11,21';
//Сервер БД на котором висит база форума
$host="localhost";
//Имя БД
$database="forum";
//Логин БД
$username="Имя";
//Пароль БД
$password="Пароль";

//====[Если не знаем 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";
}
$bt = "<table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"1\" bgcolor=\"#dee2e5\">";
$bt.= "<th width=\"60%\" height=\"26\" align=\"center\"><font class=\"storytitle\">Название темы</font></th>";
$bt.= "<th width=\"10%\" height=\"26\" align=\"center\"><font class=\"storytitle\"><b>Автор</b></font></th>";
$bt.= "<th width=\"5%\" height=\"26\" align=\"center\"><font class=\"storytitle\">Ответов</font></th>";
$bt.= "<th width=\"5%\" height=\"26\" align=\"center\"><font class=\"storytitle\">Просмотров</font></th>";
$bt.= "<th width=\"20%\" height=\"26\" align=\"center\" colspan=\"2\"><font class=\"storytitle\"><b>Последний ответ</b></font></th>";
$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=\"В сообщении есть прикрепленные файлы\"> " : "";
$icon = ($row_resultf['icon_id'] == "0") ? " <img border=\"0\" src=\"temp/Default/images/icon.gif\">  " : "<img src=\"forum/style_images/$img_path/folder_post_icons/icon$icon_id.gif\" border=\"0\" alt=\"Иконка сообщения\"> ";
$last_date = date($time,$row_resultf['last_post']);
$bt.= "<tr>";
$bt.= "<td bgcolor=\"#FFFFFF\">";
$bt.= "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#FFFFFF\"><tr>";
$bt.= "<td>$icon</td>";
$bt.= "<td width=\"100%\"><a title=\"".$row_resultf['description']."\" href=\"forum/index.php?showtopic=".$row_resultf['tid']."&view=getlastpost\">$topicstrip</a></td>";
$bt.= "<td align=\"center\" valign=\"middle\">$attach</td>";
$bt.= "<td align=\"center\" valign=\"middle\">$status</td>";
$bt.= "</tr></table></td>";
$bt.= "<td bgcolor=\"#FFFFFF\" align=\"center\"><a href=\"forum/index.php?showuser=".$row_resultf['starter_id']."\">".$row_resultf['starter_name']."</a></td>";
$bt.= "<td bgcolor=\"#FFFFFF\" align=\"center\">".$row_resultf['posts']."</td>";
$bt.= "<td bgcolor=\"#FFFFFF\" align=\"center\">".$row_resultf['views']."</td>";
$bt.= "<td bgcolor=\"#FFFFFF\" align=\"center\">$last_date</td>";
$bt.= "<td bgcolor=\"#FFFFFF\" align=\"center\"><a href=\"forum/index.php?showuser=".$row_resultf['last_poster_id']."\">".$row_resultf['last_poster_name']."</a></td>";
$bt.= "</tr>";
} while($row_resultf = mysql_fetch_assoc($resultf));
$bt.= "</table>";
mysql_free_result($resultf);
echo $bt;
return $bt;
?>

 

Подскажите название талицы, с самим 1м сообщением, хочу сделать вывод ещё и с самим сообщением естественно ограниченным по количеству букаф.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Переделайте под трешку пожалуйста кто нибудь этот скрипт.

<?

// ******************************************* //
// Оригинальная идея Miles Johnson.			//
// Дополнение: HungerGhost					 //
//			 Schnapz						 //
//			 mrMad-Cat					   // 
// Дополнительная информация в readme.html	 //
// ******************************************* //

$i=1;
$posts = 10;
$showtopiclength = 1;
$topiclength = 35;
$forumexclude = "26";
$datedisplay = 'd F Y';

// Скрипт работает на российском 24х часовом формате показа времени
// Так что следующие две строки не меняем :)

$hours_display='H';
$minutes_display = 'i';

// Сюда вводим размер коррекции по часам и по минутам
// Если не нужны - ставим нули

$hours_corrector = 0;
$minutes_corrector = 0;

require "ips_kernel/class_db_mysql.php";
require "conf_global.php";

$db = new db_driver_mysql;
$db->obj['sql_database'] = $INFO['sql_database'];
$db->obj['sql_user'] = $INFO['sql_user'];
$db->obj['sql_pass'] = $INFO['sql_pass'];
$db->obj['sql_host'] = $INFO['sql_host'];
$db->obj['sql_tbl_prefix'] = $INFO['sql_tbl_prefix'];

$db->connect();

ob_start();

$getposts = $db->query("SELECT posts, last_poster_name, last_poster_id, title, tid, forum_id, last_post FROM ibf_topics WHERE (forum_id NOT IN ($forumexclude)) ORDER BY last_post DESC LIMIT $posts");


while ($post = $db->fetch_row($getposts)) {
$post[full_title] = $post[title];
if ($showtopiclength == 1 AND strlen($post[full_title]) > $topiclength) {
$post[short_title] = substr($post[full_title],0,$topiclength);
$post[short_title] = $post[short_title]."...";
}
else {
$post[short_title] = $post[full_title];
}

$posted_on = date($datedisplay, $post[last_post]);
$today_date = date($datedisplay, time());

$hours_edited = substr(date($hours_display, $post[last_post]),0,2);
$hours_edited = $hours_edited + $hours_corrector;


if ($hours_edited == 24) {$hours_edited = "00";}
if ($hours_edited > 24) {$hours_final =$hours_edited - 24; $hours_edited = "0".$hours_final;}


$minutes_edited = substr(date($minutes_display, $post[last_post]),0,2);
$minutes_edited = $minutes_edited + $minutes_corrector;

if ($minutes_edited == 60) {$minutes_edited = "00";}

if ($minutes_edited > 60) {$minutes_final = $minutes_edited - 60;	} else {$minutes_final = $minutes_edited; }

if ($minutes_final < 10) {
$time_edited = $hours_edited.":0".$minutes_edited; }
else
{
$time_edited = $hours_edited.":".$minutes_edited;
}


If ($posted_on == $today_date) {
$datefield = "Сегодня";
$datefield = $datefield . ", " . $time_edited;
}

elseif (date('d F Y',strtotime("-1 day")) == $posted_on) {
$datefield = "Вчера";
$datefield = $datefield . ", " .$time_edited;
}

else {
$datefield = $posted_on;
}


// Вывод информации (Вы можете изменить вывод для своего дизайна сайта, примеры представлены в readme.html)

echo

<<<EOD
<li>
<noindex><a rel="nofollow" href="$INFO[board_url]/index.php?showtopic=$post[tid]&view=getnewpost">$post[short_title]</a><br><span class="meta">[<a href="$INFO[board_url]/index.php?showuser=$post[last_poster_id]">$post[last_poster_name]</a> - $datefield]</span><br></noindex>
</li>
EOD;

}

$tmp = ob_get_contents();
ob_end_clean();

echo iconv('CP1251','UTF-8', $tmp);

?>

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Nokoll

у меня база своей цмс - cp1251 а с форума этот скрипт выдает крякозяблы вместо русского((

 

В том скрипте что я выложил в строке(самый конце) "echo iconv('CP1251','UTF-8', $tmp);", поменяй местами 'CP1251' на 'UTF-8'

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Мои знания php на очень слабом уровне. насколько понимаю тут цепляется последнее сообщение, когда с базы данные выводятся, значит можно. Только вот одаптровал бы его кто для тройки.

Проблема в том, что здесь используются из файла class_db_mysql.php.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Подскажите а как вот этот скрипт приспособить для тройки (до этого на 2.3.х работал):

<?

// **************************************** //

// Original mod submitted by Miles Johnson. //

// Completely rewritten by Anthony Petito.. //

// Modify and locate by Barinyn Vladimir  //

// V2.0: 4 April 2005...................... //

// V2.1: 10 April 2005..................... //

// V2.1.1: 6 October 2005.................. //

// **************************************** //



// Этот мод выводит последние Х постов из ващего форума в любое место на Вашем сайте

// Эта новая версия локализована и позволяет выводить коротко начало последнего поста в теме.



// Поместите этот файл в директорию, куда установлен Ваш форум (например, http://domain.tld/forum.



// Вставьте этот код в то место у себя на сайте, где хотите выводить последние топики:

/* <?php include("http://domain.tld/forum/latest_posts.php");?> */



///////////////////////////////////

// Отредактируйте настройки мода //

///////////////////////////////////



// Количество последних постов

$posts = 10;



// Выводить начало поста?

$showposttext = 1;



// Обрезать длинные топики

$showtopiclength = 1;



// Длинна топика и длинна сообщения

$topiclength = 40;

$postlength = 100;



// Форумы из которых НЕ ВЫБИРАТЬ последние топики

$forumexclude = "12,13,20,30,36,38,39";



$datedisplay = 'd F Y';

$timedisplay = 'H:i';

$rusmonth = array(1 => "Января","Февраля","Марта","Апреля","Мая","Июня","Июля","Августа","Сентября","Октября","Ноября","Декабря");

$correct = 1;			//Коррекция времени в часах

$correct_time = $correct * 60 * 60;		//Вычисляем коррекцию в секундах



//////////////

// Required //

//////////////

require_once "ips_kernel/classDbMysqlClient.php";

require "conf_global.php";



//////////////

// Database //

//////////////



$db = new db_driver_mysql;

$db->obj['sql_database']	 = $INFO['sql_database'];

$db->obj['sql_user']		 = $INFO['sql_user'];

$db->obj['sql_pass']		 = $INFO['sql_pass'];

$db->obj['sql_host']		 = $INFO['sql_host'];

$db->obj['sql_tbl_prefix']   = $INFO['sql_tbl_prefix'];



$db->connect();



//mysql_query("SET NAMES cp1251");



// Query the DB with the supplied user inputted variables.

$getposts = $db->query("SELECT posts, last_poster_name, last_poster_id, title, tid, forum_id, last_post FROM ibf_topics WHERE (forum_id NOT IN ($forumexclude)) ORDER BY last_post DESC LIMIT $posts");

// Format and display the results.



echo '<h4>Последние '.$posts.' тем с форума:</h4>';

echo '<div style="padding-left:10px;  font-size: 12px; color: #666666;">';



while ($post = $db->fetch_row($getposts)) {

$post[full_title] = $post[title];

$postpid = $post[pid];



if ($showposttext == 1) {

$getposttext = $db->query("SELECT post FROM ibf_posts WHERE topic_id = '$post[tid]'");

while ($text = $db->fetch_row($getposttext)) {

$lastposttext= $text[post];

$posttext = substr($lastposttext,0,$postlength);

$posttext = $posttext."...<br>";

}

}

if ($showtopiclength == 1 AND strlen($post[full_title]) > $topiclength) {

$post[short_title] = substr($post[full_title],0,$topiclength);

$post[short_title] = $post[short_title]."...";

}

else {

$post[short_title] = $post[full_title];

}

$post[last_post] = $post[last_post] + $correct_time;	//Корекция времени

$posted_on = date($datedisplay, $post[last_post]); // Need to change mySQL timestamp to something more human readable.

$today_date = date($datedisplay, time()); // Grab today's date so we can compare it against the posted date

$posted_day = date("d", $post[last_post]);

$posted_month = date("n", $post[last_post]);

$posted_year = date("Y", $post[last_post]);



// If it was posted today, we want to display "Today, hh:mm AMPM"

If ($posted_on == $today_date) {

$datefield = "Сегодня";

$datefield = $datefield . ", " . date($timedisplay, $post[last_post]);

}



// If it was posted yesterday, we want to display "Yesterday, hh:mm AMPM"

elseif (date('d F Y',strtotime("-1 day")) == $posted_on) {

$datefield = "Вчера";

$datefield = $datefield . ", " . date($timedisplay, $post[last_post]);

}



else {

$datefield = $posted_day."-".$rusmonth[$posted_month]."-".$posted_year;

}



echo

////////////////////

// ФОРМАТ ВЫВОДА //

///////////////////

// Вы можете изменять HTML код внутри маркеров EOD под Ваши требования

//	$INFO[board_url]/index.php?showtopic=

<<<EOD



<a href="http://forum.net/forum/index.php?showtopic=$post[tid]&view=getnewpost" class="ind"><b>$post[short_title]</b></a>

разместил $post[last_poster_name] $datefield, с $post[posts] ответами

<br>

EOD;

}

?>

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Есть хороший скрипт, работает под 3.05 - вывод JS одной строчкой. Возможно настроить стили отображения.

Кому надо - стучите в аську 48 пять 67 одын одын 80, плата символическая :D

Изменено пользователем mushara
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.