Перейти к контенту
  • 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
Ссылка на комментарий
Поделиться на других сайтах

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

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

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

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

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

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

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

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

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