• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Хак Вывод архива 1 категории

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.524
Не так давно ко мне обратился челвоек и заказал модуль. Т.к. я просрочил срок выполнения, денег не взял, но и код выкладываю в публичный доступ. Хотя за такое и денег брать стыдно.

Суть:
Человеку потребовалось выводить архив (блок на сайте в формате Месяц-Год) только из 1 категории. Соответсвенно при клике на месяц выдавать список новостей тоже из 1 категории.

Реализуем для ДЛЕ 9.7:
Файл \engine\modules\calendar.php ищем (213 строка) :
Код:
$db->query( "SELECT DATE_FORMAT(date,'%b %Y') AS m_date, COUNT(id) AS cnt FROM " . PREFIX . "_post WHERE approve=1" . $where_date . " ЦРУGROUP BY m_date ORDER BY date desc" );
Заменяем на:
Код:
$db->query( "SELECT DATE_FORMAT(date,'%b %Y') AS m_date, COUNT(id) AS cnt FROM " . PREFIX . "_post WHERE approve=1" . $where_date . " AND `category` = 2 GROUP BY m_date ORDER BY date desc" );
Файл \engine\engine.php ищем (514 строка) :
Код:
				$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}date >= '{$year}-{$month}-01'AND date < '{$year}-{$month}-01' + INTERVAL 1 MONTH AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
				$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post where {$stop_list}date >= '{$year}-{$month}-01'AND date < '{$year}-{$month}-01' + INTERVAL 1 MONTH AND approve=1" . $where_date;
Заменяем на:
Код:
				$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}date >= '{$year}-{$month}-01' AND `category` = 2 AND date < '{$year}-{$month}-01' + INTERVAL 1 MONTH AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
				$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post where {$stop_list}date >= '{$year}-{$month}-01' AND `category` = 2 AND date < '{$year}-{$month}-01' + INTERVAL 1 MONTH AND approve=1" . $where_date;
Т.е. в запросы добавляем AND `category` = 2, де 2 - нужная нам категория.

Обновляем кэш, готово.

Решение сделано за 10 минут, буду доделовать. Выложил по 2 причинам:
1) Не удобно задерживать заказ и дальше
2) Интересны Ваши идеи по доработке

Известные ошибки и недоработки:
1) Категория задаётся жёстко, а не в конфиге
2) Работает только если выключены мультикатегории
3) Не выводит статьи из подкатегорий

Дорабатывать буду как появится больше свободного времени. Ориентир - следующая неделя. Хотя слово "дорабатывать" тут не подходит, скорее делать по человечески, а не экстренный вариант.
 
Раз уж речь про архив, скажу свою хотелку:
Мне нужно, чтобы в блоке "Архив новостей" не показывались месяцы, то есть чтобы не было ничего ДО ТОГО, как юзер не нажмет на ссылку "Показать/скрыть весь архив"
Я понял, что за это отвечает файл calendar.php и методом тыка добился нужного, я изменил сначение "6" на "0" на 236 строке:
$db->free();

$i = count( $news_archive );

if( $i > 6 ) {
$news_archive[6] = "<div id=\"dle_news_archive\" style=\"display:none;\">" . $news_archive[6];
$news_archive[] = "</div><div id=\"dle_news_archive_link\" ><br /><a class=\"archives\" onclick=\"$('#dle_news_archive').toggle('blind',{},700); return false;\" href=\"#\">" . $lang['show_archive'] . "</a></div>";
}

if( $i ) $tpl->result['archive'] = implode( "<br />", $news_archive );
else $tpl->result['archive'] = "";

create_cache( "archives", $tpl->result['archive'], $config['skin'] );
}

}
?>
Выделил жирным 6-ки, которые я изменил на 0. И все получилось.
Но вот проблема - хостер отрубил сайт чз сутки за перегруз, и думаю что после этой манипуляции. Подскажите, как реализовать по-человечески?
 
Нет, хостер за такое не мог отрубить... Вы всего лишь добавили display:none; к выводимому контенту и всё.
 
Вы уверены? А может там получился какой-то незавершаемый цикл? Может 0 вместо 6 нельзя ставить?
А вы не подскажите более элегантное решение? версия дле 9.5
Я просто хотел, чтобы была незаметная кнопка "архив" по нажатию на которую уже бы список выдвигался. Могу 5$ подкинуть на чай.
 
Более элегантная - спрятать через CSS то, что уже генерируется в ДЛЕ...
Открываем /engine/modules/calendar.php и удаляем к чертям:
PHP:
		if( $i > 6 ) {
			$news_archive[6] = "<div id=\"dle_news_archive\" style=\"display:none;\">" . $news_archive[6];
			$news_archive[] = "</div><div id=\"dle_news_archive_link\" ><br /><a class=\"archives\" onclick=\"$('#dle_news_archive').toggle('blind',{},700); return false;\" href=\"#\">" . $lang['show_archive'] . "</a></div>";
		}
В main.tpl вставляем обычный спойлер...
 
Такс, убрал код как ты сказал. При этом весь календарь отобразился(все месяцы столбцом).
А вот спойлер в main.tpl это я недопонял.
Еще что то нет ссылки "начать переписку" при нажатии на твой профиль:confused:
 
Такс, убрал код как ты сказал. При этом весь календарь отобразился(все месяцы столбцом).
А вот спойлер в main.tpl это я недопонял.
Всё верно. Покажется весь календарь... Дальше берём в main.tpl и добавляем спойлер вот таким методом:
HTML:
<div class="title_spoiler">
<img id="image-spdle_news_archive" style="vertical-align: middle;border: none;" alt="" src="/dle/templates/Default/dleimages/spoiler-plus.gif" />&nbsp;<a href="javascript:ShowOrHide('spdle_news_archive')">Показать / Скрыть архив</a>
</div>
<div id="spdle_news_archive" class="text_spoiler" style="display:none;">{archives}</div>
Еще что то нет ссылки "начать переписку" при нажатии на твой профиль:confused:
Очень много флуда было в ЛС, посему эту функцию для себя отключил. Если хотите что-то заказать - в подписи есть ICQ. По остальным вопросам - только форум.
 
Назад
Сверху