Углубленный ФАК по SSI (Advanced SSI FAQ)

Автор Avdenago, 16 ноября 2006, 20:51:42

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

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

Avdenago

Углубленный ФАК по SSI (Advanced SSI FAQ)

Перевод. Оригинал тут:
http://www.simplemachines.org/community/index.php?topic=13016.0

Перед вами Углубленный ФАК по SSI. В нем мы более углубленно рассмотрим возможности SSI и их применение. Для лучшего понимания рекомендуем вначале прочитать Базовый ФАК по SSI. Данный ФАК освещает часто задаваемые вопросы по SSI и дает на них ответы в виде советов и приемов. В конце сообщения вы можете найти текстовые примеры рассмотренных скриптов.
Все вопросы и впечатления, а также обсуждения данного материала можно оставлять в данной теме.

!ВАЖНО: НЕ ИЗМЕНЯЙТЕ ФАЙЛ 'SSI.PHP'!
(Все описанное ниже делается без каких-либо изменений в данном файле)

Как мне изменить Функции под свои нужды?
На самом деле использовать Функции SSI и настраивать под себя очень легко.
Рассмотрим пример:
У вас есть сайт и, соответственно, форум. На главной странице вы используете такую функцию SSI как 'ssi_boardNews'.
Данная функция позволяет отображать  первые сообщения в темах форума в определенного раздела вашего форума. Вам необходимо настроить эту функцию для того, чтобы она выбирала сообщения только  определенного раздела вашего форума(например "Новости"). Также мы ограничим вывод пятью последними темами и ограничим длину сообщения 250 символами. Функции можно использовать как в виде 'functionName();', не передавая никаких параметров, так и наоборот - передать в 'functionName();' некоторые параметры, регулирующие работу выбранно функции.
В нашем случае функция 'ssi_boardNews' имеет следующие параметры
<?php

ssi_boardNews
($board null$limit null$start null$length null$output_method 'echo');

?>


Теперь все что нам надо, это изменить данные параметры в соответствии с нашими требованиями. Вначале определим ID раздела с которого мы хотим получать темы.
Предположим что разделу "Новости" соответствует идентификатор 5.0. Тогда наш код будет выглядеть следующим образом:
<?php

ssi_boardNews
($board 5.0$limit 5$start null$length 250$output_method 'echo');

?>


Данный код вы можете поместить в необходимое место на любой вашей странице.
Краткие пояснения:[ul]

  • $board = 5.0 - передаем индентификатор (ID) раздела из которого берем пять последних сообщений
  • $limit = 5 - Количество сообщений (получаем пять последнихх сообщений)
  • $start = null -  Оставляем как есть.
  • $length = 250 - Ограничение количества символов в сообщении 250.
  • $output_method = 'echo' - Метод вывода, оставляем как есть.
[/ul]

Открываем страницу с кодом в браузере - и получаем то,что и требовалось.

Остальные функции файла 'SSI.php' можно также легко отредактировать по необходимости.
Каждая функция 'SSI.php' имеет следующую структуру:
1.Объявление функции
2.Подключение к MySQL
3.Извлечение требуемой функции информации
4.Занесение нужной информации в переменные и массивы
5.Отображение информации
Не стоит сильно переживать, если вы не все поняли из этого списка.
Просто понимание структуры функции поможет вам понять и ответ следующий вопрос.

Как я могу отобразить только часть информации выводимую функцией?
На саом деле это делается не намного сложнее чем предыдущие манипуляции.
Рассмотрим ту же функцию - ssi_boardNews().
Предположим нам нужно вывести только название тем и текст сообщения. Иконки сообщений и дата нам не нужна. Теперь, когда мы знаем структуру данной функции мы можем выбрать только нужную часть нужной функции.
foreach ($return as $news)
{
echo '
<table border="0" width="100%" align="center" class="ssi_table">
<tr>
<td>', $news['icon'], ' <b>', $news['subject'], '</b><span class="smaller"><br />', $news['time'], ' ', $txt[525], ' ', $news['poster']['link'], '<br /><br /></span></td>
</tr>
<tr>
<td>', $news['body'], '<br /><br /></td>
</tr>
<tr>
<td>', $news['link'], ' | ', $news['new_comment'], '</td>
</tr>
</table>
<br />';

if (!$news['is_last'])
echo '
<hr width="100%" />
<br />';
}


Оператор foreach() подразумевает выполнения блока оператора для каждого обрабатываемого условия.
Теперь отредактируем данный код для получения необходимого результата.
Что нам нужно? Отображение пяти последних сообщений выбранного раздела, каждое сообщение не должно превышать 250 символов (иначе необходимо использовать другой метод)
<?php

$array ssi_boardNews(5.05null250'array');

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

if (!$news['is_last'])
echo '
<hr width="100%" />
<br />'
;
}

?>


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

Также мы можем разнообразить вывод. Например применив следующую конструкцию:
echo '<a href="', $news['href'], '">', $news['subject'], '</a><br />';
Мы просто сделали ссылкой тему новости.


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

В конце сообщения прикреплены файлы со скриптами, которые могут помочь вам лучше понять и разобратся в работе с функциями SSI

Если же все написанное вам уже понятно, вы можете приступить к изучению Экспертного ФАКА по SSI.

-Lamper


От переводчика:
Если данный ФАК помог вам и ответил на ваши вопросы, или наоборот у вас появились вопросы, а также если вы нашли неточности или ошибки, вы можете обсудить его в данной теме.
Также следует отметить, что вышеприведенный перевод, довольно таки вольный...
Поэтому даже в приведенном коде могут быть ошибки и неточности, тем ценне будет ваша помощь обсуждении и в более детальном описании данных вопросов.

Avdenago

#1
Также мы можем попробовать вывести сообщения одного определенного пользователя.
Этот пользователь может быть как известен заранее, так и получатся динамически. Главное грамотно применять полученные знания.

Итак.
$posts = ssi_recentPosts($num_recent = 8, $exclude_boards = array(), $output_method = 'array');
$name = bert;
$id = 15;

Как видим в данном случае мы явно задали Имя и ID
Теперь обработаем массив
foreach ($posts as $post) {
Добавим условия для выборки нужного пользователя
if ($post['poster']['name'] == $name) {

or

if ($post['poster']['id'] == $id) {

И наконец выведем сообщение
$post['subject'];?> written by <?php $row['poster']['link'];
    } 
//закрываем блок оператора if

//закрываем оператор foreach 


Это только пример кода. Вы можете его изменить и дополнить тэгами оформления и необходимой разметкой.

$posts = ssi_recentPosts(25, array(), 'array');
$name = 'MyName';

foreach ($posts as $post)
{
echo '
<table border="0" width="100%" align="center">
<tr>
<td><b>', $post['poster']['link'], '</b></td>
</tr>
<tr>
<td>', $post['subject'], '<br /><br /></td>
</tr>
</table>
<br />';

if ($post['poster']['name'] == $name)
echo $row['poster']['link'];
}



А вот еще один пример вывода новостей:

<?php

$array 
ssi_boardNews(20.03null250'array');

foreach ($array as $news)
{
echo '  
<table border="0" width="100%" align="center" class="ssi_table">
<tr>
<td> <b>'
$news['subject'], '</b><span class="smaller"><br />'$news['time'], ' '$txt[525], ' '$news['poster']['link'], '<br /><br /></span></td>
</tr>
<tr>
<td>'
$news['body'], '<br /><br /></td>
</tr>
<tr>
<td>'
$news['link'], ' | '$news['new_comment'], '</td>
</tr>
</table>
<br />'
;

if (!$news['is_last'])
echo '
<hr width="100%" />
<br />'
;
}

?>


dukeRD

спасибо всем кто старался и переводил все это. очень помогло!

sokol43

Доброго времени суток. У меня такой вопрос. Через SSI и функцию ssi_welcome я могу получить username пользователя, а как мне получить его id?

Mavn

Здесь документация вопросы по smf задаются в других разделах
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

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

npokypop

Спасибо за монуал. Но у меня один вопросик.
При использовании $array = ssi_recentTopics(10, null, 'array');
Как сделать что бы топики выводились с определенного раздела форума ?

Пробовал    $array = ssi_recentTopics(10, $board = 30.0, null, 'array');

Что то некатит
Есть свой сайт или форум!
Заработай на нем $$$

digger®

Цитата: npokypop от 29 августа 2008, 22:20:03
Спасибо за монуал. Но у меня один вопросик.
При использовании $array = ssi_recentTopics(10, null, 'array');
Как сделать что бы топики выводились с определенного раздела форума ?

Пробовал    $array = ssi_recentTopics(10, $board = 30.0, null, 'array');

Что то некатит
Во первых, у ssi_recentTopics три параметра, а не четыре.
Во вторых, второй параметр это массив id разделов, из которых не выводить.
В третьих, пишется так - ssi_recentTopics(10, 30, 'array');

npokypop

#7
т.е мне нужно указать все разделы кроме того из которого мне нужны топики?
получилась такая вещь:
$array = ssi_recentTopics(10, array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,43,44), 'array');
Есть свой сайт или форум!
Заработай на нем $$$


Roman_Grishin

вопрос:
у меня сайт, с него выход на форум. сайт работает через файл форума ssi.php

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

<?php ssi_login($redirect_to='http://АДРЕС САЙТА'); ?> 

но вот какая беда... на форуме то теперь когда авторизуешься - кидает на сайт... как мне сделать чтобы при авторизации на форуме не выкидывало на сайт?
Христианский форум для всех! - Видение G12 в России!
►СПАСИБО ВСЕМ УЧАСТНИКАМ ЭТОГО ФОРУМА, БЛАГОДАРЯ ВАМ У МЕНЯ ФОРУМ РАБОТАЕТ БЕЗ ПРОБЛЕМ◄

Roman_Grishin

и еще вопрос:
как прописать в функции ssi_recentPoll(); условие:

если 
"есть непросмотренные голосования")
{
ssi_recentPoll();
}
else
{
echo 
' Вы учавствовали во всех опросах!' ;
}
Христианский форум для всех! - Видение G12 в России!
►СПАСИБО ВСЕМ УЧАСТНИКАМ ЭТОГО ФОРУМА, БЛАГОДАРЯ ВАМ У МЕНЯ ФОРУМ РАБОТАЕТ БЕЗ ПРОБЛЕМ◄

digger®

Цитата: Roman_Grishin от 26 августа 2009, 00:29:13
вопрос:
у меня сайт, с него выход на форум. сайт работает через файл форума ssi.php

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

<?php ssi_login($redirect_to='http://АДРЕС САЙТА'); ?> 

но вот какая беда... на форуме то теперь когда авторизуешься - кидает на сайт... как мне сделать чтобы при авторизации на форуме не выкидывало на сайт?

Не должно это влиять на форумную авторизацию.

skif30

При использование функции SSI как 'ssi_boardNews'. в конце новости выводится

0 комментариев | Написать комментарий

А мне это все не надо, достаточно слова ДАЛЕЕ... под которым бы был линк на новость на форуме (тот который под 0 комментариев)

и еще

<?php

ssi_boardNews
($board 5.0$limit 5$start null$length 250$output_method 'echo');

?>


как быть с shtml?

использую <!--#include virtual="./SSI.php?ssi_function=boardNews" -->

Roman_Grishin

Цитата: skif30 от 28 августа 2009, 00:37:38
При использование функции SSI как 'ssi_boardNews'. в конце новости выводится

0 комментариев | Написать комментарий

А мне это все не надо, достаточно слова ДАЛЕЕ... под которым бы был линк на новость на форуме (тот который под 0 комментариев)

и еще

<?php

ssi_boardNews
($board 5.0$limit 5$start null$length 250$output_method 'echo');

?>


как быть с shtml?

использую <!--#include virtual="./SSI.php?ssi_function=boardNews" -->
я, когда надо в SSI поменять вывод или еще что, открываю его, копирую нужную функцию, например ssi_boardnews, потом вставляю ее после оригинальной функции, переименовываю под свою, например ssi_boardnews_roma
и там где выводится результат уже меняю под себя.
в вашем случае нужно заменить это :

echo '
	
	
	
<div>
	
	
	
	
<a href="'
$news['href'], '">'$news['icon'], '</a> <strong>'$news['subject'], '</strong>
	
	
	
	
<div class="smaller">'
$news['time'], ' '$txt['by'], ' '$news['poster']['link'], '</div>

	
	
	
	
<div class="post" style="padding: 2ex 0;">'
$news['body'], '</div>

	
	
	
	
'
$news['link'], $news['locked'] ? '' ' | ' $news['comment_link'], '
	
	
	
</div>'
;


на это:


echo '
	
	
	
<div>
	
	
	
	
<a href="'
$news['href'], '">'$news['icon'], '</a> <strong>'$news['subject'], '</strong>
	
	
	
	
<div class="smaller">'
$news['time'], ' '$txt['by'], ' '$news['poster']['link'], '</div> ';

	
	
	
	



но не забудьте что это надо менять в вашей функции а не в оригинальной
Христианский форум для всех! - Видение G12 в России!
►СПАСИБО ВСЕМ УЧАСТНИКАМ ЭТОГО ФОРУМА, БЛАГОДАРЯ ВАМ У МЕНЯ ФОРУМ РАБОТАЕТ БЕЗ ПРОБЛЕМ◄

BIOHAZARD

Цитата: Roman_Grishin от 08 января 2010, 15:51:04
я, когда надо в SSI поменять вывод или еще что, открываю его, копирую нужную функцию, например ssi_boardnews, потом вставляю ее после оригинальной функции, переименовываю под свою, например ssi_boardnews_roma
...
я раньше поступал так же, но сейчас предпочитаю указывать
ssi_boardNews($board = 5.0, $limit = 5, $start = null, $length = 250, $output_method = null);
тогда выдаётся не готовый код страницы, а массив с данными, который можно дальше обрабатывать как Вам угодно
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

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

Roman_Grishin

Цитата: BIOHAZARD от 10 января 2010, 17:51:06
я раньше поступал так же, но сейчас предпочитаю указывать
ssi_boardNews($board = 5.0, $limit = 5, $start = null, $length = 250, $output_method = null);
тогда выдаётся не готовый код страницы, а массив с данными, который можно дальше обрабатывать как Вам угодно
адекватный способ, но мне кажется для "новичков" проще моим методом, я вот с массивами до сих пор косячу... хоть и редко.
Христианский форум для всех! - Видение G12 в России!
►СПАСИБО ВСЕМ УЧАСТНИКАМ ЭТОГО ФОРУМА, БЛАГОДАРЯ ВАМ У МЕНЯ ФОРУМ РАБОТАЕТ БЕЗ ПРОБЛЕМ◄

luckyrain

Подскажите пожалуйста а в SSI.PHP есть средства, чтобы получить ссылку на аватар пользователя по его id ?

Заранее спасибо?

Macron

здравствуйте, подскажите пожалуйста:
как мне выводить с помощью ssi несколько форумов как топики?

ssi_boardNews($board = (1.0, 2.0, 3.0), $limit = 5, $start = null, $length = 250, $output_method = echo);
выводит только темы из первого форума.

abubu2

Такой вопрос:
у меня сайчас выводится
Цитировать// Initialize the template
template_init();

// Load headers
template_header();

// Load template function
template_main();

// Load footer
template_footer();

// Set up the main template
function template_main()

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

Bugo

Отключить новости в настройках.

Mavn

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

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