|
|
|
| Мой код вот такой:
<?php
///////////////////////////////////////////////////
// Блок "Новости"
// 2003-2006 (C) IT-студия SoftTime (http://www.softtime.ru)
// Симдянов И.В. (simdyanov@softtime.ru)
// Голышев С.В. (softtime@softtime.ru)
///////////////////////////////////////////////////
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Новости</title>
<link rel="StyleSheet" type="text/css" href="news.css">
</head>
<?php
// Выставляем уровень обработки ошибок (http://www.softtime.ru/info/articlephp.php?id_article=23)
Error_Reporting(E_ALL & ~E_NOTICE);
// Этот файл выводит первые $pnumber новостей
// Устанавлинваем соединение с базой данных
require_once("../config.php");
?>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<p class="zagblock">НОВОСТИ</p>
<?php
// Выясняем общее количество новостей в базе данных, для того чтобы
// правильно отображать ссылки на последующие новости.
$tot = mysql_query("SELECT count(*) FROM news WHERE hide='show' AND putdate <= NOW()");
if ($tot)
{
$total = mysql_result($tot,0);
// Если в базе новостей меньше чем $pnumber
// выводим их без вывода ссылки "Все новости".
if($pnumber < $total) echo "<p class='linkblock'><a href=news.php class='linkblock'>Все новости</a>";
}
else puterror("Ошибка при обращении к блоку новостей");
// Запрашиваем все видимые новости, т.е. те, у которых в базе данных hide='show',
// если это поле будет равно 'hide', новость не будет отображаться на странице
// Переменная хранит число сообщений выводимых на станице
$num = 3;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT * FROM news");
$posts = mysql_num_rows($result);
// Находим общее число страниц
$total = floor (($posts - 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы
$page = floor ($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("SELECT `news`.`id_news` AS `id_news`,
`news`.`name` AS `name`,
`news`.`body` AS `body`,
`news`.`intro` AS `intro`,
DATE_FORMAT(putdate,'%d.%m.%Y') AS putdate_format,
`news`.`url` AS `url`,
`news`.`url_text` AS `url_text`,
`news`.`url_pict` AS `url_pict`,
`news`.`cat_id` AS `cat_id`,
`news`.`autor` AS `autor`,
`cat`.`cat_name` AS `cat_name`
FROM `news`,`cat`
WHERE `news`.`cat_id`=`cat`.`cat_id` AND hide='show' AND putdate <= NOW()
ORDER BY putdate DESC
LIMIT $start, $num");
// В цикле переносим результаты запроса в массив $postrow
echo "<table>";
while ( $postrow = mysql_fetch_array($result))
{
// Выводим заголовок новости
echo "<tr><td><a class=anewsblock href=news.php?id_news=".$postrow['id_news']."><p class=newsblockzag><b>".$postrow['name']."</b></p></a></td></tr>";
echo "<tr><td><p id=bottom_text>Категория: <b>".$postrow['cat_name']."</b> | Создано:<em class=datanews> ".$postrow['putdate_format']."</em></p></td></tr>";
// Выводим анонс
echo "<tr><td class=newsblock>".$postrow['intro'];
echo "<tr><td><br /><p id=bottom_text>Автор: <b>".$postrow['autor']."</b> | <a class=anewsblock href=news.php?id_news=".$postrow['id_news'].">Подробнее...</a></td></tr>";
}
echo "</table><br /> <br />";
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a class=page_nav href= ./index.php?page=1>Начало</a>
<a class=page_nav href= ./index.php?page='. ($page - 1) .'><</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <a class=page_nav href= ./index.php?page='. ($page + 1) .'>></a>
<a class=page_nav href= ./index.php?page=' .$total. '>Конец</a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a class=page_nav href= ./index.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a class=page_nav href= ./index.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a class=page_nav href= ./index.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a class=page_nav href= ./index.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
// Вывод меню
echo '<center><div class=page_div>';
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
echo ' (Всего: '.$total.')';
echo '</div></center>';
?>
<br /> <br />
|
Вопрос в следующем. Каким образом мне сделать сортировку по категориям, т.е. по cat_name?
Что за мега скрипт должен быть... Заранее спасибо. | |
|
|
|
|
|
|
|
для: maxfade
(01.05.2007 в 14:06)
| | ????
Так сортируйте по cut_name, а не по putdate ... ;) | |
|
|
|
|
|
|
|
для: ddhvvn
(01.05.2007 в 14:13)
| | Мне надо отсортировать одновременно по cat_name и putedate. Я просто не очень сильно еще разбираюсь в PHP.
И еще, как я понимаю мне надо передавать значение cat_name в зависимости от того, что нажмешь, допустим - Категория Новости, у нее cat_id=1. Передачу осуществляьт как я понимаю сделав переменную типа $sort = $_GET['cat_id']; , далее $sort подставить в:
...
ORDER BY $sort DESC
...
|
Правильно?
Напишите небольшой пример, желательно с использованием того, что написано выше... | |
|
|
|
|
|
|
|
для: maxfade
(01.05.2007 в 14:38)
| |
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("SELECT `news`.`id_news` AS `id_news`,
`news`.`name` AS `name`,
`news`.`body` AS `body`,
`news`.`intro` AS `intro`,
DATE_FORMAT(putdate,'%d.%m.%Y') AS putdate_format,
`news`.`url` AS `url`,
`news`.`url_text` AS `url_text`,
`news`.`url_pict` AS `url_pict`,
`news`.`cat_id` AS `cat_id`,
`news`.`autor` AS `autor`,
`cat`.`cat_name` AS `cat_name`
FROM `news`,`cat`
WHERE `news`.`cat_id`=`cat`.`cat_id` AND hide='show' AND putdate <= NOW()
ORDER BY cat_name, putdate DESC LIMIT $start, $num");
|
Пробуйте... | |
|
|
|
|
|
|
|
для: ddhvvn
(01.05.2007 в 14:55)
| | Это понятно, а как мне заставить выводиться определенную категорию по cat_name, причем с с ортировкой по дате? Остальные категории при этом скрывать? | |
|
|
|
|
|
|
|
для: maxfade
(01.05.2007 в 16:34)
| | Так у Вас же это все уже сделано!
Ведь выборка приозводится по cat_name!
А, нет по cat_id...
Так по чем надо? по cat_id или по cat_name?
Какой-то запутанный скрипт... :-/ | |
|
|
|
|
|
|
|
для: ddhvvn
(01.05.2007 в 16:38)
| | Просто в скрипте идет объединение таблиц. Название категории берется из отдельной таблицы, соответственно у этих таблиц одинаковые значение по cat_id. И значение таблицы 1 сопоставляется со значением таблицы 2 по cat_id, ели оно равно, то подставляется значение cat_name из 2-й таблицы.
Вот дампы таблиц:
Структура таблицы `cat`
--
CREATE TABLE `cat` (
`cat_id` int(11) NOT NULL auto_increment,
`cat_name` tinytext NOT NULL,
PRIMARY KEY (`cat_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=6 ;
--
-- Дамп данных таблицы `cat`
--
INSERT INTO `cat` VALUES (1, 'Новости');
INSERT INTO `cat` VALUES (2, 'Рассказы');
INSERT INTO `cat` VALUES (3, 'Анекдоты');
INSERT INTO `cat` VALUES (4, 'Стрим');
|
Структура таблицы `news`
--
CREATE TABLE `news` (
`id_news` int(11) NOT NULL auto_increment,
`cat_id` int(11) NOT NULL default '0',
`autor` tinytext NOT NULL,
`name` tinytext NOT NULL,
`body` text NOT NULL,
`intro` text NOT NULL,
`putdate` datetime NOT NULL default '0000-00-00 00:00:00',
`url` tinytext NOT NULL,
`url_text` tinytext NOT NULL,
`url_pict` tinytext NOT NULL,
`hide` enum('show','hide') NOT NULL default 'show',
PRIMARY KEY (`id_news`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=15 ;
|
Необходимо следующее, допустим на страничке идет название статьи, категория и тело. Необходимо чтобы, при нажатии на значение категории открывалась новая страничка с выборкой по данной категории.
Вот это как раз меня и интересует. | |
|
|
|
|
|
|
|
для: maxfade
(01.05.2007 в 16:59)
| | Неужели никто не подскажет? | |
|
|
|
|
|
|
|
для: maxfade
(02.05.2007 в 11:01)
| | ORDER BY cat_name ASC, putdate DESC | |
|
|
|