Понадобилось сделать архив новостей.
Решил поиграться с "перекидыванием" новостей в архив.
Возился сегодня полдня - всё никак не получалось
А "получалось" вот что - список по датам выводится (т.е., система находит-таки записи в архиве), но при нажатии на ссылке получаем следующий текст:
В настоящее время архивных записей в этой категории не существует. Попробуйте зайти позже.
В итоге пришлось начать ковырять код - вот, что обнаружил в /components/com_content/content.php:
function showArchiveCategory(...) {
...
$query = "SELECT a.id"
. " FROM #__content as a"
. " WHERE a.state = -1"
. $check
;
$database->setQuery( $query );
$items = $database->loadObjectList();
$archives = count( $items );
далее вставляем дамп var_dump($database->getQuery()). смотрим:
SELECT a.id
FROM jos_content as a
WHERE a.state = -1
AND a.catid = 1
заглядываю в таблицу jos_content ("архивная" запись одна) - а там... catid=3
соответственно записей - нуль...
и такая ситуация как в 1.0.3, так и в 1.0.5
----------------------------------
оказалось, что текущий catid в $check меняется в зависимости от того, какое меню выбрано.
налицо явный глюк.
к сожаленю, удаление $check из запроса на результат не влияет... надо ещё копать...
поправьте меня, если я не прав....
Я этот глючем давно видел, но не разбирался с ним по причине отсутствия времени
цитата из: AndyR на Январь 18, 2006, 01:41:47 am
ну что жжж.. выкрутился пока что.
только мне всё равно не нравится подход к выводу архива...
пока решение такое:
/includes/sef.php
...
if ( (eregi('option=com_content',$string) || eregi('option=content',$string) ) && !eregi('task=new',$string) && !eregi('task=edit',$string) ) {
заменить на
if ( (eregi('option=com_content',$string) || eregi('option=content',$string) ) && !eregi('task=archivecategory',$string) && !eregi('task=new',$string) && !eregi('task=edit',$string) ) {
при выключенном SEF-е вроде всё работает нормально.
есть и второй вариант:
в /modules/mod_archive.php убрать SEF-преобразование relative в absolute
вместо
$link = sefRelToAbs('index.php?option=com_content&task=archivecategory&Itemid='. $Itemid .'&year='. $created_year .'&month='. $created_month .'&module=1');
написать
$link = 'index.php?option=com_content&task=archivecategory&Itemid='. $Itemid .'&year='. $created_year .'&month='. $created_month .'&module=1';
зы. возможно, это и решение(я), но только это больше похоже на затыкание дыры в SEF-е - он "не распознаёт" get-ы YEAR, MONTH, MODULE (возможно, что-то ещё) в $_REQUEST-е
я переделал mod_archive.php:
сделана правильная группировка по месяцу (раньше выводился месяц и год, но реально группировка была по полной дате)
defined( '_VALID_MOS' ) or die( 'Доступ запрещён' );
$count = intval( $params->def( 'count', 10 ) );
$query = "SELECT MONTH( created ) AS created_month, YEAR(created) AS created_year"
. " FROM #__content"
. " WHERE ( state = -1 AND checked_out = 0 AND sectionid > 0 )"
. " GROUP BY created_year DESC, created_month DESC"
. " LIMIT $count"
;
$database->setQuery( $query );
$rows = $database->loadObjectList();
?>
<ul>
<?php
foreach ( $rows as $row ) {
$created_month = mosFormatDate ( $row->created_month, "%m" );
$created_year = mosFormatDate ( $row->created_year, "%Y" );
$month_dig = (($created_month<10)?'0':'').$created_month;
$month_name = mosFormatDate ( $created_year."-".$month_dig."-01 00:00:00", "%B" );
$link = 'index.php?option=com_content&task=archivecategory&year='. $created_year .'&month='. $created_month .'&module=1';
$link = sefRelToAbs( $link );
$text = $month_name .', '. $created_year;
?>
<li>
<a href="<?=$link;?>"><?=$text;?></a>
</li>
<?php
}
?>
</ul>
зы. с архивом разобрался, кое-что сделал.
обидно, что это всё равно не то, что мне надо было...
может, кому пригодится?
Добрый день! Очень рад что, нашелся человек который тоже заинтересовался этим вопросом, я перерыл кучу информации. на разных сайтах- та же проблема и в других версия мамбы не только в джомле, такое ощущение, что никому возможность нормального полноценного архива вообще не нужна. Файловый архив- это другой вопрос компоенты и модули календарей, удобны по своему - но это тоже не архив- опционально. В принципе можно поробовать написать модуль для компонента content-view. Не ввиде календаря а виде архива, но оптья же этоне совсем то...
Я не очень силен к сож в программировании на пхп, но суть понимаю, знаю что такое sql - , тоже пытался ковырять архив но знаний и терпения не хватило.
я ещен е видел собственно нигде на сайтах или примерах mambo как вообще должен нормально работать архив?
Т.е. может ли он выводить новости в принципе, отсортированыене только по дате но и по категориям хотябы. чтобы это все в куче не валялось? Если вы еще занимаетесь этим вопросом буду рад с вами обсудить и вложить свое посильное участие в эту проблему...
icq 160090024
меня бы устроил архив, при условии, что по истечении даты публикации новость переносилась бы в архив автоматически.
если есть такой бот - подскажите.
нет - значит, напишу сам
зы. а эта тема ещё кому-то интересна?
цитата из: userxp на Январь 31, 2006, 11:31:33 am
цитата из: AndyR на Январь 31, 2006, 11:51:04 am
Я нашел ссылку по тому как автоматически убиратьновости с фронтенда, это не помещение их в архив но все равно возможно вам это немного поможет
http://ru-mambo.ru/smf/index.php/topic,11238.0.html
Вы можете дать ссылку на ваш сайт посомтреть как у вас архив работает?
за ссылку пасиба, почитаем, хотя это и не совсем то ,
ибо упомянутая проблема решается без вмешательства в код...
во-первых, ограничение кол-ва статей на фронтпейдже,
во-вторых, сроком действия.
цитата из: vitema на Январь 31, 2006, 01:40:34 pm
тю.. я посмотрел базу - оказалось, что написать такой бот как два пальца обосфальт
даж стыдно как-то стало
если будет сегодня свободное время, то сделаю, а то с этим по-сложнее
-----------------------------------------
в общем так: есть aplha-версия для J1.0.х (такой-себе драфтик)
пока без настроечных переменных (они есть, но в работе кода не учтены)
ну и не UTF-8 пока что
зато ещё есть пару идей для увеличения функционала
зы. файл сохранить и переименовать в .zip
archive mover.txt (1.51 KB - загружено 5 раз.)