Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод новостей сайта в зависимости от условия
 
 автор: KOTer   (27.07.2005 в 07:41)   письмо автору
 
 

Здравствуйте. Сеществует файл index.php:

<?php
$news_05
="новость 5";
$news_04="новость 4";
$news_03="новость 3";
$news_02="новость 2";
$news_01="новость 1";

if(!
array_key_exists('id',$_GET)) {$_GET['id']='default';}

switch (
$_GET['id']) {

case 
'archive': echo "<h2>Архив</h2>$news_04 $news_03 $news_02 $news_01"
break;

default: echo 
"<h2>Новости</h2> $news_04 $news_03 $news_02

<br><a href=\"index.php?id=archive\" title=\"Архив\">Архив</a>"

break; 
}
?>

Как сделать, чтобы по умолчанию по ссылке http://www.my_syte/index.php
грузились только последние 3 новости, а по сслылке
http://www.my_syte/index.php?id=archive все новости
Самая большая проблема - как определить последние 3 новости или последнюю новость,
она ведь может быть и news_05 и news_06 и т.д.
Как я понимаю, необходимо задать max, возможно через массив новостей и получить что-то вроде:

<?php
$news_05
="новость 5";
$news_04="новость 4";
$news_03="новость 3";
$news_02="новость 2";
$news_01="новость 1";

if(!
array_key_exists('id',$_GET)) {$_GET['id']='default';}

switch (
$_GET['id']) {

case 
'archive': echo "<h2>Архив</h2>$news_max.....$news_00"
break;

default: echo 
"<h2>Новости</h2> 3 последних переменных, т.е. $news_(max) $news_(max-1) $news_(max-2)

<br><a href=\"index.php?id=archive\" title=\"Архив\">Архив</a>"

break; 
}
?> 

Заранее благодарен.

   
 
 автор: Ziq   (27.07.2005 в 08:00)   письмо автору
 
   для: KOTer   (27.07.2005 в 07:41)
 

В данном случае нужно воспользоваться базой данных или в крайнем случае блокнотами. Смысл следующий создаешь папку news а в ней тексты типа "news".time()."txt", это будет выглядеть примерно так news1122436565.txt. Затем считываешь название всех файлов, которые начинаются с news и заносишь в массив (можно это сделать функцией readdir()). Сортируешь массив по убыванию и берешь первые три значения. Теперь дело техники в функцию fread() подставляешь название текста. и выводишь на экран. Вроде все

   
 
 автор: [CHOL]Scorpion   (27.07.2005 в 12:29)   письмо автору
 
   для: Ziq   (27.07.2005 в 08:00)
 

А ещё полезно почитать что такое массив и как он выглядит.

База или не база, всё в итоге всё равно ведь к массиву сводится. Ну вот и пойдём от этого.

1. Заменим искомый пример:

$news_05="новость 5"; 
$news_04="новость 4"; 
$news_03="новость 3"; 
$news_02="новость 2"; 
$news_01="новость 1"; 


на


$news[0]="новость 1"; 
$news[1]="новость 2"; 
$news[2]="новость 3"; 
$news[3]="новость 4"; 
$news[4]="новость 5";


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

Теперь, что выводим? Ну к примеру так:


if ($actual == "arhiv"){
    for ($i = 0; $i<count($news); $i++){
           echo ($news[$i]."<BR>");
    }
}
else{
   $start_index = count($news) - 3;
   for ($start_index; $start_index<count($news); $start_index++){
           echo ($start_index."<BR>");
   }
}

   
 
 автор: cheops   (27.07.2005 в 12:25)   письмо автору
 
   для: KOTer   (27.07.2005 в 07:41)
 

Нужно как-то привязать каждую новость к времени, например создав ассоциативный массив, где в качестве ключа будет выступать время новости в секундах, прошедших с 1 января 1970 года.
<?php
$news
[1122452298] = "новость 5"
$news[1122452298] = "новость 4"
$news[1122452298] = "новость 3"
$news[1122452298] = "новость 2"
$news[1122452298] = "новость 1";
?>

тогда массив $news можно сортировать по ключу, при помощи функции ksort() или kasort().
<?php
  ksort
($news);
  
// kasort($news);
?>

Тогда, если параметр id не опеределён - выводим только три новости из массива $news, а если определён - то все
<?php
  $conunt 
0;
  if(!isset(
$_GET['id']))
  {
     
// Выводим только три новости
     
foreach($news as $line)
     {
        if(
$count>=3) break;  // Преждевременный выход из цикла
        
echo $line."<br>";
        
$count++;
     }
  }
  else
  {
     
// Выводим все новости
     
foreach($news as $line)
     {
        echo 
$line."<br>";
     }
  }
?>

   
 
 автор: KOTer   (28.07.2005 в 20:04)   письмо автору
 
   для: cheops   (27.07.2005 в 12:25)
 

All. Спасибо за помощь.
Ziq
В принципе такая конструкция планируется, чтобы уйти от большого
количества файлов. Так что смысла возвращаться к множеству разрозненных
частей нет.
[CHOL]Scorpion
У меня что-то не получается, подскажи где что ни так (в голове наверно:))
Выводит в столбец 2 3 4 и всё. Пробовал менять и текст новости ("новость
N") и индекс ("$news[N]") - всё равно.
cheops
Как можно сделать так, чтобы выводило на той странице, где 3 новости под
ними ссылку на архив. Примерного такого вида:
<a href="index.php?archive" title="Архив">Архив</a>
Чтобы получить:
index.php

новость 5
новость 4
новость 3
Архив

index.php?archive

новость 5
новость 4
новость 3
новость 2
новость 1

А то куда не поставлю - всегда ссылка либо копируется несколько раз либо
"выскакивает" на странице index.php?archive

   
 
 автор: cheops   (28.07.2005 в 20:41)   письмо автору
 
   для: KOTer   (28.07.2005 в 20:04)
 

Для этого следует реорганизовать код следующим образом
<?php 
  $conunt 
0
  if(!isset(
$_GET['id'])) 
  { 
     
// Выводим только три новости 
     
foreach($news as $line
     { 
        if(
$count>=3) break;  // Преждевременный выход из цикла 
        
echo $line."<br>"
        
$count++; 
     } 
     echo 
"<a href=\"index.php?id=archive\" title=\"Архив\">Архив</a>";
  } 
  else 
  { 
     
// Выводим все новости 
     
foreach($news as $line
     { 
        echo 
$line."<br>"
     } 
  } 
?>

   
 
 автор: KOTer   (29.07.2005 в 08:46)   письмо автору
 
   для: cheops   (28.07.2005 в 20:41)
 

Спасибо!!!!
Проблема была где-то со скобкакми :)
Другой вопрос: возможно ли модернизировать данный скрипт под несколько страниц. например index.php?archive, index.php?megnew и т.д.

   
 
 автор: cheops   (29.07.2005 в 11:38)   письмо автору
 
   для: KOTer   (29.07.2005 в 08:46)
 

>Другой вопрос: возможно ли модернизировать данный скрипт под
>несколько страниц. например index.php?archive,
>index.php?megnew и т.д.
А чем эти страницы должны друг от друга отличаться?

   
 
 автор: [CHOL]Scorpion   (29.07.2005 в 12:19)   письмо автору
 
   для: cheops   (29.07.2005 в 11:38)
 

Однозначно: МОЖНО. Однако, перефразируя сопрос cheops: ЗАЧЕМ ???

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования