Подскажите пожалуйста как организовать такую систему на сайте и форуме чтобы Объявления, которые создавались на форуме могли бы переносится на главную страницу сайта в виде новостей (с датой создания и автором, или просто с датой). Я пытался порыться в кодах, но поскольку в PhP мой уровень познания не высок, я не смог найти функции отвечающие за считывания из файлов текста объявлений.
БЛагодарю за внимание. и заранее спасибо за ответы.
1. jakomo - 21 Апреля, 2007 - 16:59:06 - перейти к сообщению
2. awep - 22 Апреля, 2007 - 08:34:37 - перейти к сообщению
функция get_file
3. jakomo - 23 Апреля, 2007 - 06:28:44 - перейти к сообщению
Расзбираясь в кодах и функцией этой я чуть не положил форум...
Авеп, можешь дать чуть более развернуто ответ о том как использовать эту функцию именно в форуме Exbb чтобы вытащить оттуда текст сообщения, дату и атвора.
Спасибо.
Авеп, можешь дать чуть более развернуто ответ о том как использовать эту функцию именно в форуме Exbb чтобы вытащить оттуда текст сообщения, дату и атвора.
Спасибо.
4. awep - 24 Апреля, 2007 - 15:10:14 - перейти к сообщению
выдрал со своего сайта. там я сделал один форум как архив новостей, то есть новая тема=новость.
начало: считываем все из файла всего форума
начало: считываем все из файла всего форума
CODE:
где $config['forum_dir'] - папка форума а $modconfig['news_fm_num'] это айди форума. из этих данных ты получишь время первого поста то есть время добавления новости, кол-во ответов и айди автора. далее циклом(как тебе удобно,хош for, хош while, хош foreach) читаем каждый файл темы.$forum_list_file=$config['forum_dir'].'forum'.$modconfig['news_fm_num'].'/list.php';
$forum_list=get_file($forum_list_file);
ksort($forum_list);
reset($forum_list);
$ids=array_reverse(array_keys($forum_list));
$frm_cnt=count($forum_list);
$forum_list=get_file($forum_list_file);
ksort($forum_list);
reset($forum_list);
$ids=array_reverse(array_keys($forum_list));
$frm_cnt=count($forum_list);
CODE:
в массиве $this_news есть текст новости.
$this_news_file=$config['forum_dir'].'forum'.$modconfig['news_fm_num'].'/'.$id.'-thd.php';
$this_news=get_file($this_news_file);
$this_news=get_file($this_news_file);
5. jakomo - 25 Апреля, 2007 - 09:29:21 - перейти к сообщению
Спасибо awep! НАсколько я понимаю этим кодом ты загоняешь весь текст содержащийся в '.$id.'thd.php файле в масиав. Но по какому принципу вытащитть отдельно текст сообщения, отдельно название темы и так далее? и почему то ДЕНВЕРУ не нравится функция GET_FILE ...
6. awep - 25 Апреля, 2007 - 13:19:20 - перейти к сообщению
я же все подробно описал!!
названия тем берутся из list.php. само сообщение из $id-thd.php.
в вышеуказанном коде получаем переменную $this_news , которая представляеют собой массив.
просто сделай
названия тем берутся из list.php. само сообщение из $id-thd.php.
в вышеуказанном коде получаем переменную $this_news , которая представляеют собой массив.
просто сделай
CODE:
и поймешь что к чему
print_r($this_news);
7. jakomo - 26 Апреля, 2007 - 01:24:32 - перейти к сообщению
спасибо! попробую затестить.
8. Терминатор01 - 20 Июня, 2007 - 15:56:53 - перейти к сообщению
Я не спец. Попробовал собрать всё что написано выше.
Добавил пару функций, чтоб они работали.
Выдаёт ошибку:
//Notice: Undefined variable: this_news in z:\home\test2.ru\www\news-awer.php on line 12
Но если поменять print_r($this_news);//line 12
на например print_r($forum_list); то действительно работает. Только надо ещё понять
что выводить, как и зачем.
А вобщем то мы изобретаем велосипед.
Уже созданы моды Новости форума на странице сайта и Объявлений на страницах сайта.
Именно с первого брал эти две функции.
Другое дело что эти моды ещё не доведены до совершенства.
CODE:
<?php
$config['forum_dir']='z:/home/test2.ru/www/test-exbb/';
$modconfig['news_fm_num']=4;
$forum_list_file=$config['forum_dir'].'forum'.$modconfig['news_fm_num'].'/list.php';
$forum_list=get_file($forum_list_file);
ksort($forum_list);
reset($forum_list);
$ids=array_reverse(array_keys($forum_list));
$frm_cnt=count($forum_list);
print_r($this_news);//line 12
//Функции
function get_file($filename) {
$fp = fopen($filename,'r');
fnsp_lock_file($fp,$filename);
$filesize = filesize($filename);
$filesize = ($filesize ===0) ? 1:$filesize-8;
fseek($fp,8);
$str = fread($fp,$filesize);
fclose($fp);
return (!empty($str))?unserialize($str):array();
}
function fnsp_lock_file(&$file,$filename,$mode = LOCK_SH) {
if (preg_match('/[c-z]:\\\.*/i', $_SERVER['PATH'])) return;
$i = 0;
while (!flock($file,$mode+LOCK_NB)) {
sleep(1);
$i++;
if ($i>=10) {
@fclose($file);
die('Access to file '.$filename.' blocked! Try again later');
}
}
}
?>
$config['forum_dir']='z:/home/test2.ru/www/test-exbb/';
$modconfig['news_fm_num']=4;
$forum_list_file=$config['forum_dir'].'forum'.$modconfig['news_fm_num'].'/list.php';
$forum_list=get_file($forum_list_file);
ksort($forum_list);
reset($forum_list);
$ids=array_reverse(array_keys($forum_list));
$frm_cnt=count($forum_list);
print_r($this_news);//line 12
//Функции
function get_file($filename) {
$fp = fopen($filename,'r');
fnsp_lock_file($fp,$filename);
$filesize = filesize($filename);
$filesize = ($filesize ===0) ? 1:$filesize-8;
fseek($fp,8);
$str = fread($fp,$filesize);
fclose($fp);
return (!empty($str))?unserialize($str):array();
}
function fnsp_lock_file(&$file,$filename,$mode = LOCK_SH) {
if (preg_match('/[c-z]:\\\.*/i', $_SERVER['PATH'])) return;
$i = 0;
while (!flock($file,$mode+LOCK_NB)) {
sleep(1);
$i++;
if ($i>=10) {
@fclose($file);
die('Access to file '.$filename.' blocked! Try again later');
}
}
}
?>
Добавил пару функций, чтоб они работали.
Выдаёт ошибку:
//Notice: Undefined variable: this_news in z:\home\test2.ru\www\news-awer.php on line 12
Но если поменять print_r($this_news);//line 12
на например print_r($forum_list); то действительно работает. Только надо ещё понять
что выводить, как и зачем.
А вобщем то мы изобретаем велосипед.
Уже созданы моды Новости форума на странице сайта и Объявлений на страницах сайта.
Именно с первого брал эти две функции.
Другое дело что эти моды ещё не доведены до совершенства.
9. awep - 22 Июня, 2007 - 08:51:37 - перейти к сообщению
Судя по всему, ты не знаешь, что вообще хранится в файлах форума.
Для начала сделай бэкап форума и просмотри что где и как хранится. Сразу даю подсказку: в основном данные хранятся в виде сериализованного массива, который можно считать функцией get_file из lib.php. Посмотри и все станет ясно.
Если не станет - объясню подробней.
CODE:
ОТкуда ты вообще берешь $this_news? У тебя их еще нет, а ты их выводишь. Перебирай циклом переменную $forum_list и уже в цикле просматривай что там - поймешь. Не ленись!$forum_list_file=$config['forum_dir'].'forum'.$modconfig['news_fm_num'].'/list.php';
$forum_list=get_file($forum_list_file);
ksort($forum_list);
reset($forum_list);
$ids=array_reverse(array_keys($forum_list));
$frm_cnt=count($forum_list);
print_r($this_news);//line 12
$forum_list=get_file($forum_list_file);
ksort($forum_list);
reset($forum_list);
$ids=array_reverse(array_keys($forum_list));
$frm_cnt=count($forum_list);
print_r($this_news);//line 12
Цитата:
Не хочешь - не изобретай. Каждый делает все под себя, а моды ориентированы под конкретно одни цели.А вобщем то мы изобретаем велосипед.
Для начала сделай бэкап форума и просмотри что где и как хранится. Сразу даю подсказку: в основном данные хранятся в виде сериализованного массива, который можно считать функцией get_file из lib.php. Посмотри и все станет ясно.
Если не станет - объясню подробней.
10. SlyFox - 23 Июня, 2007 - 12:01:52 - перейти к сообщению
Идея показалась интересной. Сделал некий набросок, вполне рабочий...
Я вобще-то не кодер, и РНР знаю посредственно достаточно, если кто решиться на варианты оптимизации, то хорошо. Насущный вопросв такой - как заставить этот код воспринимать BB-коды, которые, понятное дело есть в темах, которые скрипт выводит, но отображает их простым текстом. Что ему прикрутить, чем обработать код на выходе?
CODE:
<?
include('common.php');
$vars = parsed_vars();
$title_page = $exbb['boardname'].' :: Новости сайта';
include('./templates/'.$exbb['default_style'].'all_header.tpl');
include('./templates/'.$exbb['default_style'].'logos.tpl');
//<!-- NEWS -->
print("<div id='navstrip' align='left'><a href='index.php'>$exbb[boardname]</a> » Новости сайта</div>");
$forumid = 15;
$config['forum_dir'] = $exbb['home_path'].'forum'.$forumid.'/';
$forum_list_file=$config['forum_dir'].'list.php';
$forum_list=get_file($forum_list_file);
ksort($forum_list);
reset($forum_list);
//$ids=array_reverse(array_keys($forum_list));
$ids=array_reverse($forum_list);
$iii=0;
foreach($ids as $key => $id)
{
$name = $ids[$iii]['name'];
$author = '<a href="'.$exbb['boardurl'].'/profile.php?action=show&member='.$ids[$iii]['a_id'].'">'.$ids[$iii]['author'].'</a>';
$date = $ids[$iii]['date'];
$date = date(" d.m.Y H:i",$date);
$id = $ids[$iii]['id'];
$posts = $ids[$iii]['posts'];
$comment = '<a href="'.$exbb['boardurl'].'/topic.php?forum='.$forumid.'&topic='.$id.'">Обсуждение</a> ('.$posts.')';
$this_news_file=$config['forum_dir'].$id.'-thd.php';
$this_news=get_file($this_news_file);
foreach($this_news as $news_text)
{
$post = $news_text['post'];
break;
}
print("<table class='tableborder' width='100%' border='0' cellspacing='1' cellpadding='4'>");
print("<tr><td class='maintitle' align='left'><img src='./templates/InvisionExBB/im/nav_m.gif' border='0' alt='>' width='8' height='8' /> $name</th>");
print("</td>");
print("</td></tr>");
print("<tr><td class='row4'>$post</td></tr>");
print("<tr><td class='darkrow2'>Отправлено: $date | Автор: $author | $comment</td></tr>");
print("</table>");
print("<br>");
$iii++;
}
//<!-- NEWS -->
include('./templates/'.$exbb['default_style'].'footer.tpl');
include('page_tail.php');
?>
<?
include('common.php');
$vars = parsed_vars();
$title_page = $exbb['boardname'].' :: Новости сайта';
include('./templates/'.$exbb['default_style'].'all_header.tpl');
include('./templates/'.$exbb['default_style'].'logos.tpl');
//<!-- NEWS -->
print("<div id='navstrip' align='left'><a href='index.php'>$exbb[boardname]</a> » Новости сайта</div>");
$forumid = 15;
$config['forum_dir'] = $exbb['home_path'].'forum'.$forumid.'/';
$forum_list_file=$config['forum_dir'].'list.php';
$forum_list=get_file($forum_list_file);
ksort($forum_list);
reset($forum_list);
//$ids=array_reverse(array_keys($forum_list));
$ids=array_reverse($forum_list);
$iii=0;
foreach($ids as $key => $id)
{
$name = $ids[$iii]['name'];
$author = '<a href="'.$exbb['boardurl'].'/profile.php?action=show&member='.$ids[$iii]['a_id'].'">'.$ids[$iii]['author'].'</a>';
$date = $ids[$iii]['date'];
$date = date(" d.m.Y H:i",$date);
$id = $ids[$iii]['id'];
$posts = $ids[$iii]['posts'];
$comment = '<a href="'.$exbb['boardurl'].'/topic.php?forum='.$forumid.'&topic='.$id.'">Обсуждение</a> ('.$posts.')';
$this_news_file=$config['forum_dir'].$id.'-thd.php';
$this_news=get_file($this_news_file);
foreach($this_news as $news_text)
{
$post = $news_text['post'];
break;
}
print("<table class='tableborder' width='100%' border='0' cellspacing='1' cellpadding='4'>");
print("<tr><td class='maintitle' align='left'><img src='./templates/InvisionExBB/im/nav_m.gif' border='0' alt='>' width='8' height='8' /> $name</th>");
print("</td>");
print("</td></tr>");
print("<tr><td class='row4'>$post</td></tr>");
print("<tr><td class='darkrow2'>Отправлено: $date | Автор: $author | $comment</td></tr>");
print("</table>");
print("<br>");
$iii++;
}
//<!-- NEWS -->
include('./templates/'.$exbb['default_style'].'footer.tpl');
include('page_tail.php');
?>
Я вобще-то не кодер, и РНР знаю посредственно достаточно, если кто решиться на варианты оптимизации, то хорошо. Насущный вопросв такой - как заставить этот код воспринимать BB-коды, которые, понятное дело есть в темах, которые скрипт выводит, но отображает их простым текстом. Что ему прикрутить, чем обработать код на выходе?