Пара вопросов по SSI

Автор Tair, 06 декабря 2006, 01:53:17

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

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

Tair

Есть ssi_recentPosts() - и выводится [Название раздела]  Название темы от Имя_написавшего  Дата Время
Как сделать так чтобы выводилось только  Название темы от Имя_написавшего  Дата Время и ограничить Название темы (если длинное) например 15 знаками ?
Поковырялся в ssi - но что-то так и не понял.
FAQ тоже прочитал..

Avdenago

Так. времени набросать подробный код нету. Но принцип таков.
ssi_recentPosts ([int $numRecent[, array $boards_to_exclude[, string $output_method]]])
в зависимости от параметра $output_method - данные могут выводится уже в отформатированном виде - если echo или в виде массива.
Так вот. Массив содержит кучу ключей.  Рассматривать все не будем остановимся на важных:
board - массив содержащий ID разделов.
poster - массив содержащий информацию о пользователе  (id , name, href, link).

Так вот. Суть такова что при выводе необходимо просто после вывода ssi_recentPosts - вывести просто нужные ключи при помощи оператора "if"

Будет время - попробуй написать код - потом отпишусь.

Также вы можете выложить пример вашего кода.

Tair

я для мода mod_smf
<?php
defined
'_VALID_MOS' ) or die( 'Доступ ограничен' );
// получаем из настроек модуля путь к каталогу SMF
$SMF_loc $params->get'smf_loc' );
// проверяем путь к каталогу SMF из настроек модуля
if ($SMF_loc==""
{
echo "Не указан каталог SMF.<br />Перейдите в настройки модуля и введите \"Каталог SMF\".";
exit;
};
// проверка правильности ввода пути к каталогу SMF и непосредственного наличия в нём SSI.php 
if (file_exists($SMF_loc."SSI.php"))
{
include_once ($SMF_loc."SSI.php");
}
else
echo "Файл SSI.php не найден. Перейдите в настройки модуля и введите правильное значение в \"Каталог SMF\".";

// последние созданные темы
if ($params->get'recentTopics' ))
ssi_recentTopics($params->get'num_recentTopics' ));
// последние сообщения
if ($params->get'recentPosts' ))
ssi_recentPosts($params->get'num_recentPosts' ));   <----тут код
// последние голосования
if ($params->get'recentPoll' ))
ssi_recentPoll(); 
// самые активные разделы
if ($params->get'topBoards' ))
ssi_topBoards($params->get'num_topBoards' ));
// самые активные темы по просмотрам
if ($params->get'topTopicsViews' ))
ssi_topTopicsViews($params->get'num_topTopicsViews' ));
// самые активные темы по ответам
if ($params->get'topTopicsReplies' ))
ssi_topTopicsReplies($params->get'num_topTopicsReplies' ));
// самые активные голосования по ответам
if ($params->get'topPoll' ))
ssi_topPoll();
// самые активные пользователи
if ($params->get'topPoster' ))
ssi_topPoster($params->get'num_topPoster' ));
// последний зарегистрировавшийся пользователь
if ($params->get'latestMember' ))
ssi_latestMember(); 
// статистика форума
if ($params->get'boardStats' ))
ssi_boardStats();
// кто на форуме
if ($params->get'whosOnline' ))
ssi_whosOnline(); 
// кто на форуме + log
if ($params->get'logOnline' ))
ssi_logOnline();
// новости форума
if ($params->get'news' ))
ssi_news();
// поиск на форуме
if ($params->get'quickSearch' ))
ssi_quickSearch();
// вход на форум
if ($params->get'login' ))
ssi_login($params->get'login_redirec' )); 
// дни рождения
if ($params->get'todaysBirthdays' ))
ssi_todaysBirthdays();
// праздники
if ($params->get'todaysHolidays' ))
ssi_todaysHolidays();
//календарь на сегодня
if ($params->get'todaysCalendar' ))
ssi_todaysCalendar();

?>

все настройки из файла mod_smf.xml
<?xml version="1.0" encoding="windows-1251"?>
<mosinstall type="module" version="1.0.0">
<name>Mod_SMF</name>
<author>boston</author>
<creationDate>12.03.06</creationDate>
<copyright>(C) 2006 boston.</copyright>
<license>http://www.gnu.org/copyleft/gpl.html GNU/GPL</license>
<authorEmail>bst56@mail.ru</authorEmail>
<authorUrl>www.joom.ru</authorUrl>
<version>1.0.0</version>
<description> Модуль 'Mod SMF' позволяет использовать функции SSI форума SMF.</description>
<files>
<filename module="mod_smf">mod_smf.php</filename>
</files>
<params>
<param name="cache" type="radio" default="0" label="Разрешить кэширование" description="Выберите, кэшировать ли содержимое этого модуля">
<option value="0">Нет</option>
<option value="1">Да</option>
</param>
<param name="smf_loc" type="text" size="55" default="" label="Каталог SMF" description="Путь к каталогу с форумом SMF. Полное значение пути с / на конце." />
<param name="recentTopics" type="radio" default="0" label="Последние темы" description="Показывать последние созданные на форуме темы.">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="num_recentTopics" type="text" size="2" default="8" label="Число последних тем" description=" Число показываемых последних созданных тем на форуме." />
<param name="recentPosts" type="radio" default="0" label="Последние сообщения" description="Показывать последние оставленные на форуме сообщения">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="num_recentPosts" type="text" size="2" default="8" label="Число последних сообщений" description=" Число показываемых последних оставленных сообщений на форуме." />
<param name="recentPoll" type="radio" default="0" label="Последние голосования" description="Показывать последние созданныее на форуме голосования">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="topBoards" type="radio" default="0" label="Активные разделы" description="Показывать самые активные разделы на форуме">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="num_topBoards" type="text" size="2" default="10" label="Число самых активных разделов" description=" Число показываемых самых активных тем на форуме." />
<param name="topTopicsViews" type="radio" default="0" label="Самые активные темы по просмотрам" description="Показывать самые активные темы по количеству просмотров на форуме">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="num_topTopicsViews" type="text" size="2" default="10" label="Число самых активных тем" description=" Число показываемых самых активных тем на форуме." />
<param name="topTopicsReplies" type="radio" default="0" label="Самые активные темы по ответам" description="Показывать самые активные темы по количеству ответов на форуме">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="num_topTopicsReplies" type="text" size="2" default="10" label="Число самых популярных тем" description=" Число показываемых самых активных тем на форуме." />
<param name="topPoll" type="radio" default="0" label="Самые активные голосования по ответам" description="Показывать самые активные голосования по количеству ответов.">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="topPoster" type="radio" default="0" label="Самые активные пользователи по ответам" description="Показывать самых активных пользователей по количеству ответов на форуме">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="num_topPoster" type="text" size="2" default="10" label="Число самых активных пользователей" description=" Число показываемых самых активных пользователей на форуме." />
<param name="latestMember" type="radio" default="0" label="Новый пользователь" description="Показывать последнего зарегистрировавшегося на форуме пользователя">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="boardStats" type="radio" default="0" label="Статистика форума" description="Показывать последнего зарегистрировавшегося на форуме пользователя">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="whosOnline" type="radio" default="0" label="Кто на форуме" description="Показывать текущих посетителей форума">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="logOnline" type="radio" default="0" label="Кто на форуме + log" description="Показывать текущих посетителей форума и записывать Log">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="news" type="radio" default="0" label="Новости форума" description="Показывать новости с форума">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="quickSearch" type="radio" default="0" label="Поиск на форуме" description="Показывать форму поиска на форум">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="login" type="radio" default="0" label="Вход на форум" description="Показывать форму входа на форум">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="login_redirec" type="text" size="55" default="" label="Переходить после авторизации" description="По какому адресу переходить после входа на форум. Ввыедите адрес Вашего сайт (НЕ форума) если хотите лишь авторизовыватся но не переходить на форум" />
<param name="todaysBirthdays" type="radio" default="0" label="Дни рождения" description="Показывать текущие дни рождения посетителей форума">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="todaysHolidays" type="radio" default="0" label="Праздники" description="Показывать текущие праздники">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>
<param name="todaysCalendar" type="radio" default="0" label="Календарь на сегодня" description="Показывать события на сегодня. Включает Дни рождения и праздники">
<option value="1">Да</option>
<option value="0">Нет</option>
</param>

</params>
</mosinstall>

если не сложно - покажите на коде как сделать то, о чём я просил в 1 посте

Avdenago

Ссылку на мод. Надо самому смотреть и проверять.

Tair

вложил файлик.
слито вроде с joom.ru

Tair


Avdenago

Хххее.  пока никак. Тут уж сори...  Обновления всякие. В реале еще сессия... 

Tair

Цитата: Avdenago от 22 декабря 2006, 10:36:25
Хххее.  пока никак. Тут уж сори...  Обновления всякие. В реале еще сессия... 
:) аналогично :)

Tair

#8
Нашёл решение:
http://www.simplemachines.org/community/index.php?topic=46789.msg335700#msg335700
по аналогии переделал:
// Just return it.
if ($output_method != 'echo' || empty($posts))
return $posts;
echo '
<table border="0" class="ssi_table">';
foreach ($posts as $post)
echo '
<tr>
  <td valign="top">
<a href="', $post['href'], '">', $post['subject'], '</a>
', $txt[525], ' ', $post['poster']['link'], '
', $post['new'] ? '' : '<a href="' . $scripturl . '?topic=' . $post['topic'] . '.msg' . $post['new_from'] . ';topicseen#new"><img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/new.gif" alt="' . $txt[302] . '" border="0" /></a>', ' </td>
  <td align="right" nowrap="nowrap">&nbsp;</td>
</tr>
<tr>

<td align="left" valign="top" nowrap="nowrap">
[', $post['board']['link'], '] </td>
<td align="right" valign="top" nowrap="nowrap">
', $post['time'], ' </td>
  </tr>
';
echo '
</table>
';
}


http://www.zachetki.net - как в реале выглядит

Bic

И у меня пара вопросов... На главную страницу CMS потребовалось вывести последние сообщения с форума, примерно в таком формате: заголовок, краткий текст, автор, время.

Этот код выводит 6 заголовков последних сообщений с форума, c указанием автора, но сам текст сообщения не выводится.
<?php
require("/home/.../www/forum/SSI.php"); 
$array ssi_recentPosts(6null'array');

foreach ($array as $post)
{
echo '
<table border="0" width="100%" align="center" class="ssi_table">
<tr>
<td>
<a href="'
$post['href'], '">'$post['subject'], '</a><br />

'
$txt[525], ' '$post['poster']['link'], '

  </td>
</tr>
<tr>
<td>'
$post['body'], '<br /><br /></td>
</tr>
</table>
<br />'
;
}
?>


А этот код выводит (из раздела =2.0) 5 заголовков последних сообщений вместе с самим текстом длиной 250 букв
<?php
require("/home/.../www/forum/SSI.php"); 
$array ssi_boardNews(2.05null250'array');

foreach ($array as $news)
{
echo '
<table border="0" width="100%" align="center" class="ssi_table">
<tr>
<td><a href="'
$news['href'], '">'$news['subject'], '</a><br />
  </td>
</tr>
<tr>
<td>'
$news['body'], '<br /><br /></td>
</tr>
</table>
<br />'
;
}
?>

Чего-то не вьехать мне никак, как вывести последние сообщения (со всех разделов) вместе с кратким текстом самого сообщения? В первом примере - не хватает текста, а во втором - текст есть, но нет вывода со всех разделов.

Mavn

Первый пример у тебя выводить последние темы а вот второй уже выводить сами сообщения
попробуй так не тестировал поэтому точно сказать не смогу
<?php
require("/home/.../www/forum/SSI.php"); 
$array ssi_boardNews(5null250'array');

foreach ($array as $news)
{
echo '
<table border="0" width="100%" align="center" class="ssi_table">
<tr>
<td><a href="'
$news['href'], '">'$news['subject'], '</a><br />
  </td>
</tr>
<tr>
<td>'
$news['body'], '<br /><br /></td>
</tr>
</table>
<br />'
;
}
?>

SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

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

Bic

Цитата: Mavn от 04 января 2007, 16:12:40
попробуй так не тестировал поэтому точно сказать не смогу
$array = ssi_boardNews(5, null, 250, 'array');
Так не выводится ничего.

А вот так $array = ssi_boardNews(null, 5, null, 250, 'array'); выводится почему-то только topic=1.0, с кратким текстом.

Tair

Я напрямую прописал в SSI.php :
// Show the latest news, with a template... by board.
function ssi_boardNews($board = 40, $limit = 1, $start = null, $length = 360, $output_method = 'echo')
{
global $scripturl, $db_prefix, $txt, $settings, $modSettings, $context;
global $func;

Bic

Цитата: Rainheart
Я напрямую прописал в SSI.php
нет, не помогло чего-то,
а как в коде прописано?
$array = ssi_boardNews(null, 5, null, 250, 'array');

Tair

а у меня криво реализовано вообще - всё сделано через тот самый мод к моему порталу (смотри первый пост). Изменяя код ничего не выходило - а через изменение самого SSI.php вышло.
Попробуй $array = ssi_boardNews(5, 1, null, 250, 'echo');

Bic

Цитата: Rainheart
Попробуй $array = ssi_boardNews(5, 1, null, 250, 'echo');
Попробовал, тоже не сработало.
Постой, но на твоем сайте я увидел только заголовки тем на форуме, так как у тебя у меня работает, мне то нужно что бы кроме заголовков выводился еще и краткий текст сообщения.

Tair

Цитата: Bic от 06 января 2007, 15:30:23
Попробовал, тоже не сработало.
Постой, но на твоем сайте я увидел только заголовки тем на форуме, так как у тебя у меня работает, мне то нужно что бы кроме заголовков выводился еще и краткий текст сообщения.
оператор ssi_boardNews у меня выводится наверху - там где написано "Объявление"
для постов с форума используется оператор ssi_recentPosts
У меня он выглядит так
// Recent post list:   [board] Subject by Poster Date
function ssi_recentPosts($num_recent = 8,  $exclude_boards = null, $output_method = 'echo')
{
global $context, $settings, $scripturl, $txt, $db_prefix, $ID_MEMBER;
global $user_info, $modSettings, $func;

Попробуй поменять вывод поста (в SSI.php) на
echo '
<tr>
  <td valign="top">
<a href="', $post['href'], '">', $post['subject'], ', $post['body'], '</a>

', $post['new'] ? '' : '<a href="' . $scripturl . '?topic=' . $post['topic'] . '.msg' . $post['new_from'] . ';topicseen#new"><img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/new.gif" alt="' . $txt[302] . '" border="0" /></a>', ' </td>
    </tr>
<tr>
  <td valign="top">', $txt[525], ' ', $post['poster']['link'], '</td>
  </tr>
';
echo '

Собственно я только добавил , $post['body'], ' Может и сработает.
(у меня выглядит модифицированно - в оригинале это примерно    301 строчка SSI.php после // Just return it.)
Если не сработает, значит нужно указать запрос к БД, тут я уже не могу помочь.