Доброго времени суток! Описание: Имеется сайт, на котором добавляются и выводятся новости с использованием текстовых файлов. Каждая новость добавляется в отдельный файл. Скрипт добавления: Code: <?php $name='Название новости: '. $_POST['name']; $news='Новость'. $_POST['news']; $date=date("d.m.Y-G.i.s"); $handle = fopen("news$date.txt", "w+"); fwrite($handle, $name_prj."\r\n"); fwrite($handle, $news."\r\n"); $URL="...куда перейти после добавления"; header ("Location: $URL"); fclose($handle); ?> Раньше текстовые файлы просто сливались на комп и постились выборочно. Теперь же требуется, чтобы скрипт постил все новости. Скрипт вывода из одного файла: Code: <?php echo "<table>"; $file = file("news.txt"); foreach($file as $qk) { list($text1,$text2) = explode("=", $qk); echo "<tr><td>".$text1."</td></tr>"; } echo "</table>"; ?> Задача: Хотелось бы, чтобы скрипт сканировал папку с файлами и выводил все новости постранично (к примеру, по 10) по убыванию даты постинга. Извиняюсь, если сумбурно объяснил ситуацию. Если где-то есть подобная тема - просьба скинуть ее сюда. Заранее спасибо за ответ.
Когда новостей не много, то просканировать папку (scandir), реверснуть файлы(arsort) и вывести еще можно, но когда новостей будет ого-го то либо будут проблемы с оперативкой, либо с скоростью работы. Вообщем советую накатать скриптик который загонит твои новости в БД. Оттуда же и постраничную навигацию несложно сделать, вот как раз обсуждали http://forum.antichat.ru/thread161677.html
Хм... может и так.... Тем более, что у меня уже написан скрипт для этого... а скрипт постинга можно быстро переписать. Спасибо за ссылку, немного не то, но некоторые моменты использую.
Новостей особо немного, раз в две недели-месяц добавляются. Потому я просто не вижу смысла использовать БД - сервер грузить не будет. Насчет скандира и арсорта... не понимаю, как их можно прикрутить к readfile()? Сходу только одно приходит в голову: Code: <?php $dir='/news/'; $files=scandir($dir); print_r($files); ?> Но это только выводит список файлов, а не их содержимое... А если заменить print на readfile, то не работает. А надо, чтобы скрипт просканировал папку с текстами и вывел их содержимое на сайт, по 10 на страницу.
Ну так)) Список файлов в массиве, далее в цикле открываеш первых 10 файлов из массива, и выводиш на страничку, если страничка $page=2 то делаеш условие что вывод в цикле начинается с ключа [10] и заканчивается [20] елементарно =)
Возможно и элементарно, но я еще только учусь... Если не сложно, можете выложить пример такого скрипта?
Тестил на Win не уверен как на юниксах будет вести себя PHP: <?php $path = "news"; //Директория с файлами $dir=getcwd()."/".$path; //Получаем абсолютную директорию $files=scandir($dir); //Получаем список файлов // Тут смотри сам, я удалил из списка .. и . и сортировал, смотри сам как тебе нужно будет unset($files[0],$files[1]); sort($files); //---- chdir($path); //Переходи в папку с файлами для чтения $page = intval($_GET['page']); // Тут берем тек. страницу $onpage = 5; //Количество вывода на страницу $start = $page * $onpage; //Высчитываем с какого числа начинать чтение файлов for($i=$start;$i<$start+$onpage;$i++) { // Вывод if($i < count($files)) { echo "<p>"; $file = file($files[$i]); foreach($file as $qk) { list($text1,$text2) = explode("=", $qk); echo "<b>".$text1."</b><br><small>".$text2."</small>"; } echo "</p>"; } } // Выводим навигацию $cnts = count($files)/$onpage; // Определяем количество ссылок for($i=1;$i<$cnts;$i++) echo "<a href='".$_SERVER['PHP_SELFT']."?page=".$i."'>".$i."</a> "; ?>
[+] Проверяет тип файл или папка: [+] Проверяет что в адресную строку не вводиди всякую херь типа ?p=-100 иди ?p=a PHP: if(empty($_GET['p']) || $_GET['p'] < 0 || $_GET['p'] > $COUNT_PAGES || !intval($_GET['p'])) $_GET['p'] = 0; PHP: <?php if ($handle = opendir('./files')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $files[] = $file; } } closedir($handle); } /* config */ $COUNT_FILES_ON_PAGE = 7; ### $COUNT_FIELES = count($files); $COUNT_PAGES = intval($COUNT_FIELES / $COUNT_FILES_ON_PAGE); if(empty($_GET['p']) || $_GET['p'] < 0 || $_GET['p'] > $COUNT_PAGES || !intval($_GET['p'])) $_GET['p'] = 0; echo '<h2>Файлов в папке: '.$COUNT_FIELES.'</h2>'; echo 'Всего страниц: <b>'.($COUNT_PAGES +1).'</b><br>'; echo 'Файлов на страницу: <b>'.$COUNT_FILES_ON_PAGE.'</b><br>';; echo 'Текущая страница: <b>'.($_GET['p']+1).'</b><br>'; for ($i=0; $i<= $COUNT_PAGES;$i++) { echo '<a href="?p='.$i.'">['.($i+1).']</a> '; } echo '<hr>'; $START = $_GET['p'] * $COUNT_FILES_ON_PAGE; $END = $START + $COUNT_FILES_ON_PAGE; for ($i = $START; $i < $END; $i++) { if(key_exists($i,$files)) { if(is_file('./files/'.$files[$i])) echo $files[$i].' - [FILE]<br>'; if(is_dir('./files/'.$files[$i])) echo $files[$i].' - [DIR]<br>'; } } ?> ЗЫ LStr1ke опередил =( Когда я читал тему небыло поста твоего =(
LStr1ke, Да, этот скрипт - самое то! Использую его в качестве пособия, разберу по косточкам и постараюсь написать свой вариант. b3, Спасибо за свой вариант, но это немножко не то. Но тоже лишним не будет - пойдет в копилку пособий...