Войти

Показать полную графическую версию : оператор If... Else


Pandora
25-07-2005, 16:53
Здравствуйте. Сеществует файл index.php

<?php
//....другие новости вида n04 или какого-либо другого
$n04="новость 4";
$n03="новость 3";
$n02="новость 2";
$n01="новость 1";

$default="<h2>Новости</h2>
$n04
$n03
$n02
<br><a href=\"index.php?id=archive\" title=\"Архив\">Архив</a>";

$archive="<h2>Архив</h2>
$n04
$n03
$n02
$n01
";

if(!array_key_exists('id',$_GET)) //Проверка переменной, если нет, то default
{$_GET['id']='default';}

switch ($_GET['id']) {
case 'archive': echo "$archive"; break;

default: //если переменная name не задана
echo "$default"; break;}
?>

Как сделать, чтобы по умолчанию по ссылке http://www.my_syte/index.php
грузились только последние 3 новости, а по сслылке
http://www.my_syte/index.php?id=archive все новости, которые есть, для того
чтобы не вписывать постоянно в $default и $archive новые переменные.
Заранее благодарен.

vadimiron
25-07-2005, 19:20
Есть такая конструкция: isset($var), возвращает TRUE, если переменная установлена, то есть

if (isset($_GET['id'])) echo "все новости";
else echo "только 3";

Я бы посоветовал бы более конкретные переменные передовать, например $news_number, то есть кол-во новостей на вывод
Если переменная не установлена (!isset($var)), то стандартный случай, если же да, то только определённое кол-во новостей, если же -1, то все новости из базы

Pandora
27-07-2005, 07:01
Более читабельный первоначальный код:

<?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;
}
?>

vadimiron

Есть такая конструкция: isset($var), возвращает TRUE, если переменная установлена

Это существует и работает нормально.
Самая большая проблема - как определить последние 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;
}
?>

XCodeR
27-07-2005, 10:52
Если новости берутся из БД MYSQL использую LIMIT и ORDER BY DESC.
или новости хранить в массиве(списке)... тогда переворачиваем массив и выводим первые 3 элемента.

vadimiron
27-07-2005, 13:04
Самая большая проблема - как определить последние 3 новости или последнюю новость,
она ведь может быть и news_05 и news_06 и т.д.
Я не очень понимаю, как Вы управляете нововстями?? То есть где текст новости сохранён, и как вы их получаете в скрипт из сохраннёного вида?? Почему текст новостей у вас в отдельных переменных???

XCodeR
27-07-2005, 17:11
if (isset($_GET['id']))
можно обойтись и без isset
if(@$var)
вернет true если переменная определена и содержит любое значение отличное от 0.

Pandora
28-07-2005, 20:04
Нужна была примерно такая конструкция. Правда тема топика получилась
немного не в тему. Сорри. Тогда еще было непонятно как реализовать.

<?php
Error_Reporting(E_ALL & ~E_NOTICE); //Денвер
$news[1122452295] = "новость 5";
$news[1122452294] = "новость 4";
$news[1122452293] = "новость 3";
$news[1122452292] = "новость 2";
$news[1122452291] = "новость 1";
$conunt = 0;
if(!isset($_GET['arhive']))
{
foreach($news as $line)
{
if($count>=3) break;
echo $line."<br>";
$count++;
}
}
else
{
foreach($news as $line)
{
echo $line."<br>";
}
}
?>

теперь другая проблема.
Как можно сделать так, чтобы выводило на той странице, где 3 новости под
ними ссылку на архив. Примерного такого вида:
<a href="index.php?archive" title="Архив">Архив</a>
Чтобы получить:
index.php

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

index.php?archive

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

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

XCodeR
28-07-2005, 22:17
не понял вопроса...
а просто в конец кода добавить echo, никак?
зачем ссылку в цикл пихать?

Pandora
29-07-2005, 07:42
а просто в конец кода добавить echo, никак?
зачем ссылку в цикл пихать?

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

Pandora
29-07-2005, 08:43
Такая конструкция, при которой ссылка не появляется на index.php?archive
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
$news[1122452295] = "новость 5";
$news[1122452294] = "новость 4";
$news[1122452293] = "новость 3";
$news[1122452292] = "новость 2";
$news[1122452291] = "новость 1";
$conunt = 0;
if(!isset($_GET['arhive']))
{
foreach($news as $line)
{
if($count>=3) break;
echo $line."<br>";
$count++;
}
echo "<a href=\"index.php?arhive\" title=\"Архив\">Архив</a>";
}
else
{
// Выводим все новости
foreach($news as $line)
{
echo $line."<br>";
}
}
?>

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




© OSzone.net 2001-2012