|
|
|
|
|
для: cheops
(07.12.2004 в 11:51)
| | Самым быстрым, но не самым элегантным и производительным способом решить проблему пропущенных месяцев будет вставить лишние SQL-запросы-проверки на манер:
<?php
include "config.php";
// Выясним для начала самую первую и самую последнюю
// дату новости в базе данных
$query = "SELECT MIN(time) AS min, MAX(time) AS max FROM themes";
$mm = mysql_query($query);
if(!$mm) exit(mysql_erorr());
$minmax = mysql_fetch_array($mm);
// Первая дата - переводим в секунды с 1 января 1970 года
$mintime = strtotime($minmax['min']);
// Последняя дата - переводим в секунды с 1 января 1970 года
$maxtime = strtotime($minmax['max']);
// Цикл по годам
for($i = date("Y",$mintime); $i<=date("Y",$maxtime); ++$i)
{
// Печатаем год
echo "$i :";
// Выводим месяцы
$begin = 1;
$end = 12;
// Если это первый год, то месяцы
// отсчитываем не сначала года
if($i == date("Y",$mintime)) $begin = date("n", $mintime);
// Если это последний год, то месяцы
// отсчитываем не до конца
if($i == date("Y",$maxtime)) $end = date("n", $maxtime);
// В цикле выводим ссылки
for($k = $begin; $k<=$end; ++$k)
{
$query = "SELECT COUNT(*) FROM themes WHERE YEAR(time) = $i AND MONTH(time) = $k";
$tot = mysql_query($query);
if(!$tot) exit(mysql_error());
if(mysql_result($tot,0)>0) echo "<a href=index.php?year=$i&month=$k>".convert_month($k)."</a> ";
}
echo "<br>";
}
// Возвращаем месяц по номеру
function convert_month($m)
{
$month = array(1=>"Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь");
return $month[$m];
}
?>
|
| |
|
|
|
|
|
|
|
для: BAHO
(30.12.2004 в 09:34)
| | Я сегодня отпишусь, но наверное уже только вечером... | |
|
|
|
|
|
|
|
для: BAHO
(29.12.2004 в 11:13)
| | пробовал ввести в цикл месяцев запрос к базе, но что-то не получается | |
|
|
|
|
|
|
|
для: cheops
(28.12.2004 в 22:57)
| | к сожалению, месяц не один, а бывает штуки 3-4, а что мол так и так не очень подходит. придётся всётаки воротить, вот только как? в скрипте сверху я пытался исключить переменную $k, если ей нет соответствия в базе, но всё равно не получается | |
|
|
|
|
|
|
|
для: BAHO
(28.12.2004 в 19:54)
| | Это нужно уже на базу данных завязываться, т.е. переделать весь скрипт... будем всё курочить? Или всё-таки, если нет новостей, то можно оставить вежливое сообщением, что мол так и так, но новостей в этом месяце не было... Это я к чему, вы говорили, что новостей обычно много и если это только один такой аномальный месяц, то это будет выглядеть нормально... | |
|
|
|
|
|
|
|
для: cheops
(08.12.2004 в 16:13)
| | Теперь такая проблема, как мне выкинуть месяцы из цикла месяцов, которых нет в базе, т.е. если у меня нет ни одной новости за июнь, то и в цикле месяцев июня не будет | |
|
|
|
|
|
|
|
для: BAHO
(08.12.2004 в 16:01)
| | Лучше избегать называть столбцы названиями ключевых слов MySQL - в принципе это будет работать иногда когда анализатор отличит названия столбца от типа или названия функции, но часть клиентов (вроде phpMyAdmin) очень любят ключевые слова переводить в верхний регистр... Короче можно приобрести много трудноотыскиваемых жучков... | |
|
|
|
|
|
|
|
для: cheops
(08.12.2004 в 14:46)
| | я не знаю, в чём была фишка и почему из-за имени столбца ничего не работало, но всё заработало!
ОГРОМНОЕ ВАС СПАСИБО! | |
|
|
|
|
|
|
|
для: BAHO
(08.12.2004 в 08:33)
| | Попробуйте заменить имя столбца date на какое-нибудь другое - скорее всего из-за этого не работает. | |
|
|
|
|
|
|
|
для: cheops
(07.12.2004 в 23:48)
| |
CREATE TABLE 'ks_news' (
'id' int(11) NOT NULL auto_increment,
'date' date default '0000-00-00',
'title' varchar(100) NOT NULL default '',
'news' text,
'goarch' varchar(20) NOT NULL default '',
'arch_news' text,
PRIMARY KEY ('id')
);
INSERT INTO 'ks_news' VALUES (1, '2004-04-10', 'Название новости', 'Новость', 'qwerty', Новость в архиве');
|
| |
|
|
|
|