Скрипт для вывода последних топиков на главную

Автор Tjom, 28 ноября 2008, 20:52:41

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

Sayitright

Для ХТМЛ вставил этот код:
Цитировать<php
// * dRecentTopics mod #3
require_once('/forum/SSI.php');
$ssi_count_topics_left = 10;
$ssi_count_topics_right = 5;
$ssi_exclude_boards = array ();
$ssi_row_counter = 0;
$ssi_recentTopics = ssi_recentTopics($ssi_count_topics_left + $ssi_count_topics_right, $ssi_exclude_boards, 'array');
echo '<table border="0" width="100%"><tr><td>';
foreach ($ssi_recentTopics as $ssi_recentTopic){
  $ssi_row_counter++;
  echo '<a href="' . $ssi_recentTopic['href'] . '">' . '[+' . $ssi_recentTopic['num_replies'] . '] ' . $ssi_recentTopic['subject'] . '</a> | ' . $ssi_recentTopic['poster']['name'] . '<br />';
  if ($ssi_row_counter == $ssi_count_topics_left) echo '</td><td>';
}
echo '</td></tr></table>';
// dRecentTopics mod *
?>


а он на странице это выводит
Цитировать
'; foreach ($ssi_recentTopics as $ssi_recentTopic){ $ssi_row_counter++; echo '' . '[+' . $ssi_recentTopic['num_replies'] . '] ' . $ssi_recentTopic['subject'] . ' | ' . $ssi_recentTopic['poster']['name'] . '
'; if ($ssi_row_counter == $ssi_count_topics_left) echo '   '; } echo '
'; // dRecentTopics mod * ?>

BIOHAZARD

ну дак...
 <php // неправильно
 <?php // правильно
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ

Sayitright

Изменил, всёравно тоже самое выдает. Может потому что файл хтмл?

BIOHAZARD

может
в .thaccess надо добавить строчку
AddType application/x-httpd-php .html .php
или как-то так
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ

Sayitright

К сожалению тогда исчезает пол страницы, при этом блок не появляется.

Bogdkad

C Drupal никак не хочет этот скрипт работать. Просто выводит все текстом в блоке. А интеграцию использовать уже не получится, так как обновил форум до 2.0 RC2. Есть мысли, как заставить его работать?

digger®

Цитата: Bogdkad от 08 января 2010, 00:59:41
C Drupal никак не хочет этот скрипт работать. Просто выводит все текстом в блоке. А интеграцию использовать уже не получится, так как обновил форум до 2.0 RC2. Есть мысли, как заставить его работать?

Выбрать для блока тип PHP


Baka

Привет!

У меня форум SMF 2.0 RC1.2
SSI.php я не исправлял
форум лежит в дирректории /forum/
сайт на движке NetCat

Вставляю код. Путь до ssi прописываю
закрываю код <?PHP   ?>

Результат на экран выдается вот такой:
'; foreach ($ssi_recentTopics as $ssi_recentTopic){ $ssi_row_counter++; echo '' . '[+' . $ssi_recentTopic['replies'] . '] ' . $ssi_recentTopic['subject'] . ' | ' . $ssi_recentTopic['poster']['name'] . '
'; if ($ssi_row_counter == $ssi_count_topics_left) echo '   '; } echo '
'; // dRecentTopics mod * ?>

Пробовал разные варианты, ничего не помогает. Может подскажете?

Mavn

ищите в настройках блока в котором делаете вывод информации это никак не связано с самим форумом у вас не отрабатывается php в блоке
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

Baka

Цитата: Mavn от 09 января 2010, 15:55:13
ищите в настройках блока в котором делаете вывод информации это никак не связано с самим форумом у вас не отрабатывается php в блоке
Ок, сделал по другом. Вставил прямо в код главной страницы.

Результат:
Parse error: syntax error, unexpected T_LNUMBER, expecting ',' or ';' in /home/igor/data/www/sunnyclub.ru/netcat/index.php(11) : eval()'d code on line 296

Baka

Ой сорри, не экранировал кавычки.
Вот ошибка: Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/igor/data/www/sunnyclub.ru/netcat/index.php(11) : eval()'d code on line 299

вот эта строчка

echo '<a href='' . $ssi_recentTopic['href'] . ''>' . '[+' . $ssi_recentTopic['replies'] . '] ' . $ssi_recentTopic['subject'] . '</a> | ' . $ssi_recentTopic['poster']['name'] . '<br />';

Baka

Все, сделал для NetCat

";
// * dRecentTopics mod #3
require_once($_SERVER[DOCUMENT_ROOT].'/forum/SSI.php');
$ssi_count_topics_left = 10; // Количество отображаемых последних сообщений в левой колонке
$ssi_count_topics_right = 5; // Количество отображаемых последних сообщений в правой колонке
$ssi_exclude_boards = array (); // Перечислить через запятую id разделов, последние сообщения из которых не отображать. Например, array (10, 20);
$ssi_row_counter = 0;
$ssi_recentTopics = ssi_recentTopics($ssi_count_topics_left + $ssi_count_topics_right, $ssi_exclude_boards, 'array');
echo "<table border='0' width='100%'><tr><td>";
foreach ($ssi_recentTopics as $ssi_recentTopic){
$ssi_row_counter++;
echo "<a href=".$ssi_recentTopic['href'].">"."[+".$ssi_recentTopic['replies']."]".$ssi_recentTopic['subject']."</a> | ".$ssi_recentTopic['poster']['name']."<br />";
}
echo "</td></tr></table>";
// dRecentTopics mod *
echo "

GenZ

#63
Выдает вот такое сообщение:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/kaz/public_html/test.php:12) in /home/kaz/public_html/forum/Sources/Load.php on line 1957

После этого выдает список последних сообщений.
В чем причина?

Drakonsa

Цитата: GenZ от 02 марта 2010, 15:40:28
Выдает вот такое сообщение:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/kaz5/public_html/test.php:12) in /home/kaz/public_html/forum/Sources/Load.php on line 1957

После этого выдает список последних сообщений.
В чем причина?
session_start должен идти до начала вывода любого текста.

GenZ

#65
Цитата: Drakonsa от 02 марта 2010, 19:22:43
session_start должен идти до начала вывода любого текста.
Ну и что нужно сделать, чтобы все было ОК, объясните, пожалуйста.
Если вывожу  в шаблоне форума, то все нормально, но мне надо этот код вставить на другой странице, и вот там выводится это сообщение :(.

GenZ


WaGoN

#67
А каким способом можно вывести не общее количество сообщений в теме, а число новых с момента вашего посещения?
И очень хотелось бы видеть после ника пользователя дату последнего ответа...

нашел..
Банальное $ssi_recentTopic['time'] работает... Прошу извинить за тупление, но как вывести не всю дату, а только время суток?


Но кол-во постов со времени посещения пока не нашел...  :(

webmv

Кто может выложить полное руководство вывода последних тем на сайте?

1nvisible

Всем привет. У меня небольшая проблемка: установил скрипт, все вроде бы работает, но откуда-то из SSI.php вылезает вот такая вещь:


Честно говоря, я не смог найти место, в котором выводится эта единичка. SSI не менял, он стандартный, потому не выкладываю. Версия форума 2.0 RC3

Если в шаблоне отключить require ('SSI.php');она пропадает. Но и скрипт тоже не работает. Посмотрите, пожалуйста.. Может быть, я был где-то не внимателен и пропустил..

digger®

Цитата: tinto от 10 июля 2010, 13:57:37
В разы лучше и приятней выглядит и понятнее в коде и ничо менять не надо просто вставте на страницу и укажите настройки базы
"ВАШ САЙТ" замените на ваш сайт )

Вот этот говнокод приятней и понятней чем пример в первом посте?

BIOHAZARD

Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ

digger®

С зелеными комментариями код намного круче. Сразу стал виден профессионализм.

mb_substr(chop(stripslashes(htmlspecialchars(еще чего-то там()))))  было круто, зря удалил.

digger®

Цитата: tinto от 10 июля 2010, 17:25:46
Глаза протри, та строка была комментирована и служила для напоминания названий служебных функций

Да там все строки такие же фееричные были, зачем же было исправлять все.



digger®

Ну вот, обиделся и все поудалял.

Ладно, чтобы не прослыть совсем злодеем который на всех кидается, в очередной раз скажу:

При выводе сообщений и прочего с форума на своем сайте, всегда старайтесь пользоваться функциями SSI.php, а не прямым чтением из базы.
Во-первых, код будет проще и скорее всего будет работать на любой версии SMF.
Во-вторых, если вас не устраивает то, что напрямую выводит нужная ssi_function(), вы всегда можете указать последний параметр ssi_function(..., 'array') и получить результат в виде элементов массива, которые вы потом можете вывести и отформатировать так как вам захочется.
В-третьих, и это самое важное, функции ssi выдают данные в соответствии с правами доступа форума и у вас не приключится таких неприятностей как, например, посетители сайта увидят последние сообщения из раздела где общаются только админы.

tinto

Цитата: digger от 10 июля 2010, 18:05:26
Ну вот, обиделся и все поудалял.

Ладно, чтобы не прослыть совсем злодеем который на всех кидается, в очередной раз скажу:

При выводе сообщений и прочего с форума на своем сайте, всегда старайтесь пользоваться функциями SSI.php, а не прямым чтением из базы.
Во-первых, код будет проще и скорее всего будет работать на любой версии SMF.
Во-вторых, если вас не устраивает то, что напрямую выводит нужная ssi_function(), вы всегда можете указать последний параметр ssi_function(..., 'array') и получить результат в виде элементов массива, которые вы потом можете вывести и отформатировать так как вам захочется.
В-третьих, и это самое важное, функции ssi выдают данные в соответствии с правами доступа форума и у вас не приключится таких неприятностей как, например, посетители сайта увидят последние сообщения из раздела где общаются только админы.

это все в том коде было

digger®

#78
Цитата: tinto от 10 июля 2010, 23:07:19
это все в том коде было

Теперь просто врать будем, раз сообщения удалили? В этом коде как раз все - как не надо делать.

Цитата: tintoВ разы лучше и приятней выглядит и понятнее в коде  просто вставьте на страницу, укажите настройки базы и поменяйте ссылку в конце когда на ваш форум
Выводятся только названия 5 тем (по умолчанию) с ссылкой на нее, кому нужно больше заполните таблицу вывода на экран уже готовыми маасивами.

<?php
include "../includes/bdsmf.php"; //путь до настроек базы
mb_internal_encoding("UTF-8"); //коректное отображение кодировки utf-8
$db = mysql_connect($dbhost, $dbuser, $dbpass); //подключаемся к базе
mysql_select_db ($dbname) or die ('Найти базу с таким именем не удалось!');
$query = mysql_query("SELECT body, id_board, id_topic, subject, poster_name, poster_time FROM smf_messages ORDER BY id_topic DESC LIMIT 5"); // LIMIT 5 указывает сколько записей прочесть из базы
if ($query)
{
   $i=0;
   while ($posts = mysql_fetch_array($query))
   {     
      $poster_time[$i] = date('d.m.y, H:i:s', $posts['poster_time']); // записываем в массив дату сообщения
      $poster_name[$i] = mb_substr($posts['poster_name'], 0, 10)."..."; // записываем в массив ник автора и ограничиваем размер до 10 символов
      $id_board[$i] = $posts['id_board']; // записываем в массив ид темы
      $subject[$i] = mb_substr($posts['subject'], 0, 24)."..."; // записываем в массив название темы ограничивая размер 30 символами
      $id_topic[$i] = $posts['id_topic']; //записываем в массив ид сообщения
                $body[$i] = $posts['body']; //записываем в массив текст сообщения (при выводе в данном примере не используется, если нужно допишите в таблице echo $body;
      $i++;
   }
}
// Выдаем результат пользователю в виде таблицы
$i=0;
echo "
   <table border = '0' class='topicforum'>
   <br/>
   <caption>Последние темы</caption>";
while ($i<5) // указываем лимит сообщений должен быть такойже что и в mysql запросе (при желании добавьте в одну переменную)
{
   $query2 = mysql_query("SELECT name FROM smf_boards WHERE id_board = '$id_board[$i]'"); // запрашиваем у базы название темы по выбранным в прошлом запросе id
   $chd2 = mysql_fetch_array($query2);
   $name = mb_substr($chd2['name'], 0, 20)."..."; //записываем название
   echo "   <tr>
         <td COLSPAN='1'>
            <a href='http://test/forum/index.php?topic=".$id_topic[$i]."'> $subject[$i] </a>  //укажите правильную ссылку на ваш форум "http://test/forum/i"
         </td>
      </tr>";
   $i++;
}
echo "</table>";
mysql_close();
?>

tinto

#79
Цитата: digger от 10 июля 2010, 23:12:24
Теперь просто врать будем
Не стоит

$query = mysql_query("SELECT body, id_board, id_topic, subject, poster_name, poster_time FROM smf_messages WHERE id_board != '(Раздел админов)' ORDER BY id_topic DESC LIMIT 5"); // LIMIT 5 указывает сколько записей прочесть из базы

такой запрос избавит от раздела админов, что еще интересует форумного вариора?

Меня больше интересует как не выводить сообщения из одной и той же темы в этом списке, только разные темы
так как в базе все темы и сообщения лежат в одной таблице и каждое сообщение как новая тема

digger®

Цитата: tinto от 10 июля 2010, 23:35:05
Не стоит

$query = mysql_query("SELECT body, id_board, id_topic, subject, poster_name, poster_time FROM smf_messages WHERE id_board != '(Раздел админов)' ORDER BY id_topic DESC LIMIT 5"); // LIMIT 5 указывает сколько записей прочесть из базы

такой запрос избавит от раздела админов, что еще?

А если их 50 таких разделов с тучей прав специфических и куча админов на форуме которые в любой момент могут новые добавить или права доступа изменить и эти админы понятия не имеют о каких-то скриптах на сайте, которые что-то из форума показывают? Кто будет следить и править это исключение постоянно?
Или, например, я подписчик раздела с платными курсами и должен видеть последние сообщения из этого раздела, а халявщик Вася Пупкин не должен их видеть, какой запрос вы тогда напишете?

Вы SMF вчера первый раз что ли увидели или просто нигилист и противник правильных решений?

tinto

#81
Цитата: digger от 10 июля 2010, 23:47:47
А если их 50 таких разделов с тучей прав специфических и куча админов на форуме которые в любой момент могут новые добавить или права доступа изменить и эти админы понятия не имеют о каких-то скриптах на сайте, которые что-то из форума показывают? Кто будет следить и править это исключение постоянно?
Или, например, я подписчик раздела с платными курсами и должен видеть последние сообщения из этого раздела, а халявщик Вася Пупкин не должен их видеть, какой запрос вы тогда напишете?

Вы SMF вчера первый раз что ли увидели или просто нигилист и противник правильных решений?

если 50 админов, которые никак не определятся какие темы выводить в этом списке, то можно и поломать голову над ssi.php, остальным он не нужен так как нет необходимой гибкости и удобочитаемого кода, в котором только гуру SMF, возможно как вы, могут разобраться.

digger®

Цитата: tinto от 10 июля 2010, 23:58:01
если 50 админов то можно и поломать голову над ssi.php,
Ломать не надо ничего, все давно по полочкам разложено и с примерами расписано

http://www.simplemachines.ru/index.php?topic=1008.0
http://www.simplemachines.ru/index.php?topic=1015.0
http://www.simplemachines.ru/ssi_examples.php

Цитата: tinto от 10 июля 2010, 23:58:01
остальным он не нужен
За других не надо никогда решать что им надо. Главное им сказать как "не надо" делать, а как надо делать, они сами решат.

Цитировать
так как нет необходимой гибкости и удобочитаемого кода, в котором только гуру SMF (10 летним стажем) возможно как вы могут разобраться.

Ну да, ваши перлы на две страницы конечно более удобочитаемы, чем эти две строчки, которые делают то же самое.

require_once('SSI.php');
ssi_recentTopics($num_recent 5);


Цитата: tinto от 10 июля 2010, 23:35:05
Меня больше интересует как не выводить сообщения из одной и той же темы в этом списке, только разные темы
так как в базе все темы и сообщения лежат в одной таблице и каждое сообщение как новая тема

Пример из первого сообщения именно это и делает.

tinto

1 пост выводит все подряд последние сообщения с заголовком из темы без самого сообщения, сами то проверяли?

digger®

Цитата: tinto от 11 июля 2010, 00:24:45
1 пост выводит все подряд последние сообщения с заголовком из темы, сами то проверяли?

Сюда перейдите http://www.simplemachines.ru/ssi_examples.php, выберите слева в списке функций Recent Topics и посмотрите что она выводит.

tinto


Sallix

А у меня всеравно проблема. Форум находится на поддомене. Скрипт из первого поста сделал отдельным php файлом и подключил его к шаблону, но проблема теперь в том, что ему не нравится путь к файлу SSI.php Я поразному указывал путь и через http и через корень, не помогает. Движек форума SMF 2.0 RC3, сайта DLE 8.5.

P.S. отдельным файлом потому, что шаблоны DLE состоят из tpl файлов, которые не воспринимают php

digger®

Цитата: Sallix от 20 июля 2010, 00:48:35
А у меня всеравно проблема. Форум находится на поддомене. Скрипт из первого поста сделал отдельным php файлом и подключил его к шаблону, но проблема теперь в том, что ему не нравится путь к файлу SSI.php Я поразному указывал путь и через http и через корень, не помогает.

Откройте http://форум/ssi_examples.php там наверху будет строчка с правильным путем.

Sallix

Цитата: digger от 20 июля 2010, 01:05:40
Откройте http://форум/ssi_examples.php там наверху будет строчка с правильным путем.
Ее там нет, там написано 'SSI.php'. Но путь то я вроде нашел и прописал, теперь проблема в другом, когда загружаю страницу сайта, все в ироглифах и ничего кроме них не отображается, в чем проблема?

0daliska

Цитата: Sallix от 20 июля 2010, 01:11:29
Ее там нет, там написано 'SSI.php'. Но путь то я вроде нашел и прописал, теперь проблема в другом, когда загружаю страницу сайта, все в ироглифах и ничего кроме них не отображается, в чем проблема?
В том, что в этом файле кодировка не указана в шапке... В браузере укажите нужную кодировку (ту, что у Вас на форуме) и исчезнут Ваши кракозябры...
Уехала отдыхать. Сейчас без интернета до 1 августа. Приеду - выполню все обещания
® For members of Russian community (simplemachines.ru) only

Sallix

#90
Цитата: 0daliska от 20 июля 2010, 12:10:07
В том, что в этом файле кодировка не указана в шапке... В браузере укажите нужную кодировку (ту, что у Вас на форуме) и исчезнут Ваши кракозябры...
1 - помоему не найс ставить кодировку нужную в браузере, не будет же каждый ее менять?
2 - даже если поставить не помогает

Скрипт выглядит так:

<?php
require_once('путь/SSI.php');
$ssi_count_topics_left = 10; // Количество отображаемых последних сообщений в левой колонке
$ssi_count_topics_right = 5; // Количество отображаемых последних сообщений в правой колонке
$ssi_exclude_boards = array (); // Перечислить через запятую id разделов, последние сообщения из которых не отображать. Например, array (10, 20);
$ssi_row_counter = 0;
$ssi_recentTopics = ssi_recentTopics($ssi_count_topics_left + $ssi_count_topics_right, $ssi_exclude_boards, 'array');
echo '<table border="0" width="100%"><tr><td>';
foreach ($ssi_recentTopics as $ssi_recentTopic){
  $ssi_row_counter++;
  echo '<a href="' . $ssi_recentTopic['href'] . '">' . '[+' . $ssi_recentTopic['replies'] . ']' . $ssi_recentTopic['subject'] . '</a> | ' . $ssi_recentTopic['poster']['name'] . '<br />';
  if ($ssi_row_counter == $ssi_count_topics_left) echo '</td><td>';
}
echo '</td></tr></table>';
?>

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

Кто-нибудь может мне всетаки подсткажет как же мне от этого избавится?

P.S. файл подгружается, есть различные модули для движков, дак вот, этот файл работает по этому же типу и кодировку беред из основного шаблона сайта. Вроде как они должны совпадать с форумом, но вот в чем проблема всетаки, никак не пойму((

0daliska

То, что в ssi_example не прописана кодировка - вообще не имеет значения... Этот файл никто вообще не увидит, кроме Вас и тех, кто хочет взглянуть и знает как.. По сему можно и просто сменить в браузере, и все...
Имеет значение - прописываете ли Вы кодировку в том файле, в который подключаете ssi.php... А вот этого, похоже Вы и не делаете...
Уехала отдыхать. Сейчас без интернета до 1 августа. Приеду - выполню все обещания
® For members of Russian community (simplemachines.ru) only

Sallix

Или я дурак или ....

Я же сказал, что не только в блоке ероглифы, а во всем сайте, сам сайт не отображается и ты считаешь что это нормально? Кто хочет увидить сайт, тот изменит, так что ли?
К тому же я сказал, что кобировка берется из основного шаблона сайта, другими словами кодировка в файле пропасана, да и к всему прочему написал, что даже если менять в браузере кодировку, то ничего не меняется.

P.S. не читайте между строк


Sallix


artzor

Спасибо, все работает как часики ... ТОлько вот вопрос - сложно ли переделать вывод в три столбца ???


DemoN

#97
Изменил SSI как написано в первом посте, вставляю код на сайт, все выводится , но не столбиками как на примере, а в одну строчку. Где копать? Точнее разбивается на 2 колонки но в самих колонках выводятся все топики в строчку, а не с новой строки. Вот скрин:
Помогите пожалуйста!

Constantin Os

выдает ошибку
Parse error: syntax error, unexpected T_VARIABLE in .
в строке
$ssi_row_counter++;

не подскажите, что не так ?

Drakonsa