Browse Source

Добавлен Модуль Архив новостей

master
SVarlamov 9 years ago
commit
c116d722c1
  1. 15
      README.md
  2. 93
      admin/admin_archive_edit.tpl
  3. 106
      admin/admin_archive_list.tpl
  4. 8
      admin/index.php
  5. 253
      class.newsarchive.php
  6. 8
      index.php
  7. 8
      lang/index.php
  8. 35
      lang/ru.txt
  9. 208
      module.php
  10. 42
      sql.php
  11. 48
      templates/archive_result.tpl
  12. 8
      templates/index.php
  13. 18
      templates/public_archive.tpl

15
README.md

@ -0,0 +1,15 @@
## newsarchive
# Модуль Архив новостей v1.3
## Данный модуль предзназначен для организации архива документов по выбранным рубрикам в системе.
* Параметры модуля позволяют определить возможность показа пустых месяцев и ежедневное меню навигации.
## Перед копированием модуля в папку modules, удалите файл README.md, копируйте только корневую папку newsarchive со всем ее содержимым внутри!
## Changelog:
02.05.2014 - версия 1.3

93
admin/admin_archive_edit.tpl

@ -0,0 +1,93 @@
<script type="text/javascript" language="JavaScript">
$(document).ready(function(){ldelim}
$(".EditArchive").click( function(e) {ldelim}
e.preventDefault();
var user_group = $('#edit_archive #newsarchive_name').fieldValue();
var title = '{#ARCHIVE_NAME#}';
var text = '{#ARCHIVE_ENTER_NAME#}';
if (user_group == ""){ldelim}
jAlert(text,title);
{rdelim}else{ldelim}
$.alerts._overlay('show');
$("#edit_archive").submit();
{rdelim}
{rdelim});
{rdelim});
</script>
<div class="title"><h5>{#ARCHIVE_EDIT#}</h5></div>
<div class="widget" style="margin-top: 0px;">
<div class="body">
{#ARCHIVE_EDIT_TIP#}
</div>
</div>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
<li class="firstB"><a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a></li>
<li><a href="index.php?do=modules&amp;cp={$sess}">{#MODULES_SUB_TITLE#}</a></li>
<li><a href="index.php?do=modules&action=modedit&mod=newsarchive&moduleaction=1&cp={$sess}">{#ARCHIVE_LIST#}</a></li>
<li><strong class="code">{$archives->newsarchive_name|escape:html|stripslashes}</strong></li>
</ul>
</div>
</div>
<div class="widget first">
<div class="head">
<h5 class="iFrames">{#ARCHIVE_EDIT#}</h5>
<div class="num"><a class="basicNum" href="index.php?do=modules&action=modedit&mod=newsarchive&moduleaction=1&cp={$sess}">{#ARCHIVE_RETURN#}</a></div>
</div>
<form method="post" action="index.php?do=modules&action=modedit&mod=newsarchive&moduleaction=saveedit&cp={$sess}" id="edit_archive" class="mainForm">
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
<col width="250" />
<col />
<thead>
<tr>
<td>{#ARCHIVE_PARAMS#}</td>
<td>{#ARCHIVE_DATAS#}</td>
</tr>
</thead>
<tr>
<td>{#ARCHIVE_ITEM_NAME#}</td>
<td><div class="pr12"><input name="newsarchive_name" type="text" id="newsarchive_name" value="{$archives->newsarchive_name|escape:html|stripslashes}" size="40"></div></td>
</tr>
<tr>
<td>{#ARCHIVE_RUBS_SELECT#}</td>
<td>
<select name="newsarchive_rubrics[]" size="8" multiple="multiple" class="select" style="width:200px">
{foreach from=$newsarchive_rubrics item=rubric}
<option value="{$rubric->Id}" {if $rubric->sel}selected="selected"{else}{/if}>{$rubric->rubric_title|escape:html}</option>
{/foreach}
</select>
</td>
</tr>
<tr>
<td>{#ARCHIVE_SHOW_DAYS#}</td>
<td>
<input name="newsarchive_show_days" type="radio" value="1" {if $archives->newsarchive_show_days == 1}checked="checked"{/if}> <label>{#ARCHIVE_YES#}</label>
<input name="newsarchive_show_days" type="radio" value="0" {if $archives->newsarchive_show_days == 0}checked="checked"{/if}> <label>{#ARCHIVE_NO#}</label>
</td>
</tr>
<tr>
<td>{#ARCHIVE_SHOW_EMPTY#}</td>
<td>
<input name="newsarchive_show_empty" type="radio" value="1" {if $archives->newsarchive_show_empty == 1}checked="checked"{/if}> <label>{#ARCHIVE_YES#}</label>
<input name="newsarchive_show_empty" type="radio" value="0" {if $archives->newsarchive_show_empty == 0}checked="checked"{/if}> <label>{#ARCHIVE_NO#}</label>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" class="basicBtn EditArchive" value="{#ARCHIVE_BUTTON_SAVE#}" /></td>
</tr>
<input type="hidden" name="id" value="{$archives->id}" />
</table>
</form>
</div>

106
admin/admin_archive_list.tpl

@ -0,0 +1,106 @@
<script type="text/javascript" language="JavaScript">
$(document).ready(function(){ldelim}
$(".AddArchive").click( function(e) {ldelim}
e.preventDefault();
var user_group = $('#add_archive #newsarchive_name_new').fieldValue();
var title = '{#ARCHIVE_NAME#}';
var text = '{#ARCHIVE_ENTER_NAME#}';
if (user_group == ""){ldelim}
jAlert(text,title);
{rdelim}else{ldelim}
$.alerts._overlay('show');
$("#add_archive").submit();
{rdelim}
{rdelim});
{rdelim});
</script>
<div class="title"><h5>{#ARCHIVE_LIST#}</h5></div>
<div class="widget" style="margin-top: 0px;">
<div class="body">
{#ARCHIVE_LIST_TIP#}
</div>
</div>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
<li class="firstB"><a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a></li>
<li><a href="index.php?do=modules&amp;cp={$sess}">{#MODULES_SUB_TITLE#}</a></li>
<li>{#ARCHIVE_LIST#}</li>
</ul>
</div>
</div>
<div class="widget first">
<ul class="tabs">
<li class="activeTab"><a href="#tab1">{#ARCHIVE_LISTS#}</a></li>
<li><a href="#tab2">{#ARCHIVE_ADD#}</a></li>
</ul>
<div class="tab_container">
<div id="tab1" class="tab_content" style="display: block;">
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic mainForm">
<col width="20" />
<col width="250" />
<col />
<col width="150" />
<col width="20" />
<col width="20" />
<thead>
<tr>
<td>Id</td>
<td>{#ARCHIVE_NAME#}</td>
<td>{#ARCHIVE_USE_RUBRIKS#}</td>
<td>{#ARCHIVE_TAG#}</td>
<td colspan="2">{#ARCHIVE_ACTIONS#}</td>
</tr>
</thead>
{if $archives}
{foreach from=$archives item=archive}
<tr>
<td>{$archive->id}</td>
<td><strong><a class="topleftDir link" title="{#ARCHIVE_EDIT_HINT#}" href="index.php?do=modules&action=modedit&mod=newsarchive&moduleaction=edit&cp={$sess}&id={$archive->id}">{$archive->newsarchive_name|escape:html|stripslashes}</a></strong></td>
<td align="center"><strong>{if !$archive->rubric_title}{#ARCHIVE_NO_RUBRIKS#}{else}{$archive->rubric_title}{/if}</strong></td>
<td><div class="pr12"><input name="textfield" type="text" value="[mod_newsarchive:{$archive->id}]" readonly /></div></td>
<td align="center">
<a class="topleftDir icon_sprite ico_setting" title="{#ARCHIVE_EDIT_HINT#}" href="index.php?do=modules&action=modedit&mod=newsarchive&moduleaction=edit&cp={$sess}&id={$archive->id}"></a>
</td>
<td align="center">
<a class="topleftDir ConfirmDelete icon_sprite ico_delete" title="{#ARCHIVE_DELETE_HINT#}" href="index.php?do=modules&action=modedit&mod=newsarchive&moduleaction=del&cp={$sess}&id={$archive->id}"></a>
</td>
</tr>
{/foreach}
{else}
<tr>
<td colspan="6">
<ul class="messages">
<li class="highlight yellow">{#ARCHIVE_NO_ITEMS#}</li>
</ul>
</td>
</tr>
{/if}
</table>
</div>
<div id="tab2" class="tab_content" style="display: none;">
<form action="index.php?do=modules&action=modedit&mod=newsarchive&moduleaction=add&cp={$sess}" method="post" class="mainForm" id="add_archive">
<div class="rowElem">
<label>{#ARCHIVE_NAME#}</label>
<div class="formRight">
<input name="newsarchive_name_new" type="text" id="newsarchive_name_new" value="" placeholder="{#ARCHIVE_NAME#}" style="width: 400px" />
&nbsp;
<input type="button" class="basicBtn AddArchive" value="{#ARCHIVE_BUTTON_ADD#}" />
</div>
<div class="fix"></div>
</div>
</form>
</div>
</div>
<div class="fix"></div>
</div>

8
admin/index.php

@ -0,0 +1,8 @@
<?php
/**
* Файл-заглушка, предназначенный для запрета показа списка файлов в текущей директории,
* если через адресную строку браузера было прямое общращение к данной директории.
*/
header('Location:/');
exit;
?>

253
class.newsarchive.php

@ -0,0 +1,253 @@
<?php
/**
* AVE.cms - Модуль Архив новостей
*
* @filesource
*/
/**
* Класс работы с архивом новостей
*
* @package AVE.cms
* @subpackage module_Newsarchive
* @author Arcanum
* @since 2.0
*/
class Newsarchive
{
/**
* Метод, отвечающий за вывод списка всех архивов в Панели управления
*
* @param string $tpl_dir - путь к папке с шаблонами
*/
function newsarchiveList($tpl_dir, $adm_tpl_dir)
{
global $AVE_DB, $AVE_Template;
$archives = array();
$ids = array();
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module_newsarchive");
while ($row = $sql->FetchRow())
{
array_push($archives, $row);
}
$cnt = count($archives);
for ($i=0; $i< $cnt; $i++)
{
$ids[] = explode(',', $archives[$i]->newsarchive_rubrics);
}
$sql = $AVE_DB->Query("
SELECT
Id,
rubric_title
FROM " . PREFIX . "_rubrics
");
while ($row = $sql->FetchRow())
{
for ($i=0; $i< $cnt; $i++)
{
if (in_array($row->Id, $ids[$i]))
{
@$archives[$i]->rubric_title = strstr($archives[$i]->rubric_title . ', ' . $row->rubric_title, ' ');
}
}
}
$AVE_Template->assign('archives', $archives);
$AVE_Template->assign('content', $AVE_Template->fetch($adm_tpl_dir . 'admin_archive_list.tpl'));
}
/**
* Метод, отвечающий за схранение изменений в списке всех архивов в Панели управления
*
*/
function newsarchiveListSave()
{
global $AVE_DB;
foreach ((array)$_POST['newsarchive_name'] as $id => $newsarchive_name)
{
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_newsarchive
SET newsarchive_name = '" . $newsarchive_name . "'
WHERE id = '" . (int)$id . "'
");
}
header('Location:index.php?do=modules&action=modedit&mod=newsarchive&moduleaction=1&cp=' . SESSION);
exit;
}
/**
* Метод, отвечающий за вывод списка месяцев в публичной части сайта (Основная функция вывода)
*
* @param string $tpl_dir - путь к папке с шаблонами
* @param int $id - идентификатор архива новостей
*/
function newsarchiveShow($tpl_dir, $id)
{
global $AVE_DB, $AVE_Template;
$months = array('','Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь');
$mid = array('','01','02','03','04','05','06','07','08','09','10','11','12');
$dd = array();
$doctime = get_settings('use_doctime')
? ("AND document_published <= " . time() . " AND (document_expire = 0 OR document_expire >= " . time() . ")") : '';
$row = $AVE_DB->Query("
SELECT
newsarchive_rubrics,
newsarchive_show_empty
FROM " . PREFIX . "_module_newsarchive
WHERE id = '" . $id . "'
")->FetchRow();
$query = $AVE_DB->Query("
SELECT
MONTH(FROM_UNIXTIME(document_published)) AS `month`,
YEAR(FROM_UNIXTIME(document_published)) AS `year`,
COUNT(*) AS nums
FROM " . PREFIX . "_documents
WHERE rubric_id IN (" . $row->newsarchive_rubrics . ")
AND Id != '1'
AND Id != '" . PAGE_NOT_FOUND_ID . "'
AND document_deleted = '0'
AND document_status = '1'
AND document_published > UNIX_TIMESTAMP(DATE_FORMAT((CURDATE() - INTERVAL 15 YEAR),'%Y-%m-01'))
" . $doctime . "
GROUP BY `year`,`month`
ORDER BY `year` DESC,`month` DESC
");
while ($res = $query->FetchRow())
{
$res->mid = $mid[$res->month];
$res->month = $months[$res->month];
array_push($dd, $res);
}
$AVE_Template->assign('archiveid', $id);
$AVE_Template->assign('newsarchive_show_empty', $row->newsarchive_show_empty);
$AVE_Template->assign('months', $dd);
if (file_exists($tpl_dir . 'public_archive-'. $id .'.tpl')) {
$AVE_Template->display($tpl_dir . 'public_archive-'. $id .'.tpl');
} else {
$AVE_Template->display($tpl_dir . 'public_archive.tpl');
}
}
/**
* Метод, отвечающий за добавление нового архива в Панели управления
*
*/
function newsarchiveNew()
{
global $AVE_DB;
$AVE_DB->Query("
INSERT
INTO " . PREFIX . "_module_newsarchive
SET
id = '',
newsarchive_name = '" . $_POST['newsarchive_name_new'] . "',
newsarchive_rubrics = '',
newsarchive_show_days = '1',
newsarchive_show_empty = ''
");
header('Location:index.php?do=modules&action=modedit&mod=newsarchive&moduleaction=edit&cp=' . SESSION . '&id=' . $AVE_DB->InsertId());
exit;
}
/**
* Метод, отвечающий за вывод данных для редактирования выбранного архива
*
* @param string $tpl_dir - путь к папке с шаблонами
*/
function newsarchiveEdit($tpl_dir, $adm_tpl_dir)
{
global $AVE_DB, $AVE_Template;
$id = intval($_GET['id']);
$archives = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_newsarchive
WHERE id = '" . $id . "'
")->FetchRow();
$ids = @explode(',', $archives->newsarchive_rubrics);
$sql = $AVE_DB->Query("
SELECT
Id,
rubric_title
FROM " . PREFIX . "_rubrics
");
$newsarchive_rubrics = array();
while ($row = $sql->FetchRow())
{
if (in_array($row->Id, $ids))
{
$row->sel = 1;
array_push($newsarchive_rubrics, $row);
}
else
{
$row->sel = 0;
array_push($newsarchive_rubrics, $row);
}
}
$AVE_Template->assign('archives', $archives);
$AVE_Template->assign('newsarchive_rubrics', $newsarchive_rubrics);
$AVE_Template->assign('content', $AVE_Template->fetch($adm_tpl_dir . 'admin_archive_edit.tpl'));
}
/**
* Метод, отвечающий за сохранение изменений для редактируемого архива
*
*/
function newsarchiveSave()
{
global $AVE_DB;
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_newsarchive
SET
newsarchive_name = '" . $_POST['newsarchive_name'] . "',
newsarchive_rubrics = '" . implode(',', (array)$_POST['newsarchive_rubrics']) . "',
newsarchive_show_days = '" . $_POST['newsarchive_show_days'] . "',
newsarchive_show_empty = '" . $_POST['newsarchive_show_empty'] . "'
WHERE
id = '" . intval($_POST['id']) . "'
");
header('Location:index.php?do=modules&action=modedit&mod=newsarchive&moduleaction=1&cp=' . SESSION);
exit;
}
/**
* Метод, отвечающий за удаление выбранного архива из Панели управления
*
*/
function newsarchiveDelete()
{
global $AVE_DB;
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_module_newsarchive
WHERE id = '" . intval($_GET['id']) . "'
");
header('Location:index.php?do=modules&action=modedit&mod=newsarchive&moduleaction=1&cp=' . SESSION);
exit;
}
}
?>

8
index.php

@ -0,0 +1,8 @@
<?php
/**
* Файл-заглушка, предназначенный для запрета показа списка файлов в текущей директории,
* если через адресную строку браузера было прямое общращение к данной директории.
*/
header('Location:/');
exit;
?>

8
lang/index.php

@ -0,0 +1,8 @@
<?php
/**
* Файл-заглушка, предназначенный для запрета показа списка файлов в текущей директории,
* если через адресную строку браузера было прямое общращение к данной директории.
*/
header('Location:/');
exit;
?>

35
lang/ru.txt

@ -0,0 +1,35 @@
ARCHIVE_EDIT = "Редактирование архива"
ARCHIVE_EDIT_TIP = "В данном разделе вы можете установить необходимые параметры для архива. Параметр "Показывать пустые месяцы" определяет будут ли показаны в Публичной части сайта те месяцы, в которых отсутствуют документы. Параметр "Показывать дни" определяет будет ли показан список дней для выбранного месяца. Параметр "Рубрики для сбора данных" определяет те рубрики, из которых будет формироваться данный архив документов. Для выбора нескольких рубрик зажмите клавишу CTRL."
ARCHIVE_ENTER_NAME = "Пожалуйста, укажите название архива"
ARCHIVE_ITEM_NAME = "Название архива:"
ARCHIVE_RUBS_SELECT = "Рубрики для сбора данных:"
ARCHIVE_SHOW_DAYS = "Показывать дни?"
ARCHIVE_SHOW_EMPTY = "Показывать пустые месяцы?"
ARCHIVE_BUTTON_SAVE = "Сохранить изменения"
ARCHIVE_BUTTON_ADD = "Добавить архив"
ARCHIVE_YES = "Да"
ARCHIVE_NO = "Нет"
ARCHIVE_LIST = "Архив документов"
ARCHIVE_LIST_TIP = "В данном разделе приведен список всех архивов в системе."
ARCHIVE_NAME = "Название архива"
ARCHIVE_TAG = "Системный тег"
ARCHIVE_USE_RUBRIKS = "Включает рубрики"
ARCHIVE_ACTIONS = "Действия"
ARCHIVE_NO_RUBRIKS = "Рубрики не выбраны"
ARCHIVE_EDIT_HINT = "Редактировать данный архив"
ARCHIVE_DELETE_HINT = "Удалить данный архив"
ARCHIVE_NO_ITEMS = "В настоящий момент архивов нет"
ARCHIVE_ADD = "Добавить новый архив"
ARCHIVE_FROM = "Архив за"
ARCHIVE_YEAR = "года"
ARCHIVE_DAYS = "Календарные дни:"
ARCHIVE_NOT_FOUND = "Документов не найдено"
ARCHIVE_TITLE = "Архив документов"
ARCHIVE_DOC_NAME = "Название документа"
ARCHIVE_PUBLIC_DATE = "Дата публикации"
ARCHIVE_IN_RUBRIC = "В рубрике"
ARCHIVE_ALL_DAY = "Все"
ARCHIVE_RETURN = "Вернуться к списку всех архивов"
ARCHIVE_LISTS = "Список всех архивов"
ARCHIVE_PARAMS = "Параметр"
ARCHIVE_DATAS = "Значение"

208
module.php

@ -0,0 +1,208 @@
<?php
/**
* AVE.cms - Модуль Архив новостей
*
* @package AVE.cms
* @subpackage module_Newsarchive
* @author Arcanum
* @since 2.0
* @filesource
*/
if (!defined('BASE_DIR')) exit;
if (defined('ACP'))
{
$modul['ModuleName'] = 'Архив документов';
$modul['ModuleSysName'] = 'newsarchive';
$modul['ModuleVersion'] = '1.3';
$modul['ModuleDescription'] = 'Данный модуль предзназначен для организации архива документов по выбранным рубрикам в системе. Параметры модуля позволяют определить возможность пока пустых месяцев и ежедневное меню навигации.';
$modul['ModuleAutor'] = 'AVE.CMS Team';
$modul['ModuleCopyright'] = '&copy; 2007-2014 AVE.cms';
$modul['ModuleIsFunction'] = 1;
$modul['ModuleTemplate'] = 1;
$modul['ModuleAdminEdit'] = 1;
$modul['ModuleFunction'] = 'mod_newsarchive';
$modul['ModuleTag'] = '[mod_newsarchive:XXX]';
$modul['ModuleTagLink'] = null;
$modul['ModuleAveTag'] = '#\\\[mod_newsarchive:(\\\d+)]#';
$modul['ModulePHPTag'] = "<?php mod_newsarchive(''$1''); ?>";
}
/**
* Обработка тега модуля
*
* @param int $newsarchive_id - идентификатор архива
*/
function mod_newsarchive($newsarchive_id)
{
global $AVE_Template;
$newsarchive_id = preg_replace('/\D/', '', $newsarchive_id);
if (is_numeric($newsarchive_id) && $newsarchive_id > 0)
{
require_once(BASE_DIR . '/modules/newsarchive/class.newsarchive.php');
$Newsarchive = new Newsarchive;
$tpl_dir = BASE_DIR . '/modules/newsarchive/templates/';
$lang_file = BASE_DIR . '/modules/newsarchive/lang/' . $_SESSION['user_language'] . '.txt';
$AVE_Template->config_load($lang_file, 'admin');
$Newsarchive->newsarchiveShow($tpl_dir, $newsarchive_id);
}
}
/**
* Выборка докуметов из БД на основании Месяца, Года и Дня
* День необязательный параметр
*
* @param int $newsarchive_id идентификатор архива
* @param int $month месяц
* @param int $year год
* @param int $day день
*/
function show_by($newsarchive_id, $month, $year, $day = 0)
{
global $AVE_DB, $AVE_Template;
if(defined('MODULE_CONTENT')) return;
$assign = array();
$tpl_dir = BASE_DIR . '/modules/newsarchive/templates/';
$adm_tpl_dir = BASE_DIR . '/modules/newsarchive/admin/';
$lang_file = BASE_DIR . '/modules/newsarchive/lang/' . $_SESSION['user_language'] . '.txt';
$AVE_Template->config_load($lang_file, 'admin');
// Определяем, пришел ли в запросе номер дня
$db_day = (is_numeric($day) && $day != 0) ? "AND DAYOFMONTH(FROM_UNIXTIME(a.document_published)) = '" . $day . "'" : '';
// Выбираем все параметры для запроса с текущим ID
$newsarchive = $AVE_DB->Query("
SELECT *
FROM ".PREFIX."_module_newsarchive
WHERE id = '" . (int)$newsarchive_id . "'
")->FetchRow();
// Формирование условий сортировки выводимых документов
$db_sort = 'ORDER BY a.document_published ASC';
if(isset($_REQUEST['sort']))
{
switch($_REQUEST['sort'])
{
case 'title': $db_sort = 'ORDER BY a.document_title ASC'; break;
case 'title_desc': $db_sort = 'ORDER BY a.document_title DESC'; break;
case 'date': $db_sort = 'ORDER BY a.document_published ASC'; break;
case 'date_desc': $db_sort = 'ORDER BY a.document_published DESC'; break;
case 'rubric': $db_sort = 'ORDER BY b.rubric_title ASC'; break;
case 'rubric_desc': $db_sort = 'ORDER BY b.rubric_title DESC'; break;
default: $db_sort = 'ORDER BY a.document_published ASC'; break;
}
}
$doctime = get_settings('use_doctime')
? ("AND document_published <= " . time() . " AND (document_expire = 0 OR document_expire >= " . time() . ")") : '';
// Выбираем из БД документы. которые соответствуют условиям для запроса и модуля
$query = $AVE_DB->Query("
SELECT
a.Id,
a.rubric_id,
a.document_title,
a.document_alias,
a.document_published,
b.rubric_title
FROM
" . PREFIX . "_documents as a,
" . PREFIX . "_rubrics as b
WHERE rubric_id IN (" . $newsarchive->newsarchive_rubrics . ")
AND MONTH(FROM_UNIXTIME(a.document_published)) = '" . (int)$month . "'
AND YEAR(FROM_UNIXTIME(a.document_published))= '" . (int)$year . "'
" . $db_day . "
AND a.rubric_id = b.Id
AND a.Id != '". PAGE_NOT_FOUND_ID . "'
AND document_deleted != '1'
AND document_status != '0'
" . $doctime . "
" . $db_sort . "
");
// Заполняем массив докуметов результатами из БД
$documents = array();
while($doc = $query->FetchRow())
{
$doc->document_alias = rewrite_link('index.php?id=' . $doc->Id . '&amp;doc=' . (empty($doc->document_alias) ? prepare_url($doc->document_title) : $doc->document_alias));
array_push($documents, $doc);
}
// Формируем меню навигации по дням
$day_in_month = date('t', mktime(0, 0, 0, (int)$month, 1, (int)$year));
$m_arr = array(null, 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь');
$assign['newsarchive'] = $newsarchive;
$assign['documents'] = $documents;
$assign['days'] = range(1, $day_in_month);
$assign['month_name'] = $m_arr[(int)$month];
$assign['year'] = (int)$year;
$assign['month'] = (int)$month;
$assign['day'] = (int)$day;
$AVE_Template->assign($assign);
define('MODULE_TITLE', $AVE_Template->get_config_vars('ARCHIVE_FROM') . ' ' . $m_arr[(int)$month] . ', ' . (int)$year . ' ' . $AVE_Template->get_config_vars('ARCHIVE_YEAR'));
if (file_exists($tpl_dir . 'archive_result-'. (int)$newsarchive_id .'.tpl')) {
define('MODULE_CONTENT', $AVE_Template->fetch($tpl_dir . 'archive_result-'. (int)$newsarchive_id .'.tpl'));
}else{
define('MODULE_CONTENT', $AVE_Template->fetch($tpl_dir . 'archive_result.tpl'));
}
}
// Включаем проверку входных данных и показываем результаты в зависимости от запроса
if (isset($_GET['module']) && $_GET['module'] == 'newsarchive' && !empty($_GET['month']) && !empty($_GET['year']))
{
show_by($_GET['id'], $_GET['month'], $_GET['year'], isset($_GET['day']) ? $_GET['day'] : 0);
}
// Кусок кода, отвечающий за управление модулем в админке
if (defined('ACP') && !empty($_REQUEST['moduleaction']))
{
require_once(BASE_DIR . '/modules/newsarchive/class.newsarchive.php');
$Newsarchive = new Newsarchive;
$tpl_dir = BASE_DIR . '/modules/newsarchive/templates/';
$adm_tpl_dir = BASE_DIR . '/modules/newsarchive/admin/';
$lang_file = BASE_DIR . '/modules/newsarchive/lang/' . $_SESSION['admin_language'] . '.txt';
$AVE_Template->config_load($lang_file);
switch($_REQUEST['moduleaction'])
{
case '1':
$Newsarchive->newsarchiveList($tpl_dir, $adm_tpl_dir);
break;
case 'add':
$Newsarchive->newsarchiveNew();
break;
case 'del':
$Newsarchive->newsarchiveDelete();
break;
case 'savelist':
$Newsarchive->newsarchiveListSave();
break;
case 'edit':
$Newsarchive->newsarchiveEdit($tpl_dir, $adm_tpl_dir);
break;
case 'saveedit':
$Newsarchive->newsarchiveSave();
break;
}
}
?>

42
sql.php

@ -0,0 +1,42 @@
<?php
/**
* AVE.cms - Модуль Архив новостей
*
* @package AVE.cms
* @subpackage module_Newsarchive
* @filesource
*/
/**
* mySQL-запросы для установки, обновления и удаления модуля
*/
$module_sql_install = array();
$module_sql_deinstall = array();
$module_sql_update = array();
$module_sql_deinstall[] = "DROP TABLE IF EXISTS CPPREFIX_module_newsarchive;";
$module_sql_install[] = "CREATE TABLE CPPREFIX_module_newsarchive (
`id` mediumint(5) unsigned NOT NULL auto_increment,
`newsarchive_name` char(255) NOT NULL default '',
`newsarchive_rubrics` char(255) NOT NULL default '',
`newsarchive_show_days` enum('1','0') NOT NULL default '1',
`newsarchive_show_empty` enum('1','0') NOT NULL default '1',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
// Обновление модуля
$module_sql_update[] = "
UPDATE
`CPPREFIX_module`
SET
ModuleAveTag = '" . $modul['ModuleAveTag'] . "',
ModulePHPTag = '" . $modul['ModulePHPTag'] . "',
ModuleVersion = '" . $modul['ModuleVersion'] . "'
WHERE
ModuleSysName = '" . $modul['ModuleSysName'] . "'
LIMIT 1;
";
?>

48
templates/archive_result.tpl

@ -0,0 +1,48 @@
<h2>{#ARCHIVE_FROM#} {$month_name}, {$year} {#ARCHIVE_YEAR#}</h2><br /> <br />
{if $newsarchive->newsarchive_show_days == 1}
<div>{#ARCHIVE_DAYS#}</div>
<table width="100%" cellpadding="2" cellspacing="2">
<tr>
{if $day == 0}
<td>{#ARCHIVE_ALL_DAY#}</td>
{else}
<td><a href="index.php?module=newsarchive&id={$newsarchive->id}&amp;month={$month}&amp;year={$year}">{#ARCHIVE_ALL_DAY#}</a></td>
{/if}
{foreach from=$days item=month_day}
{if $day == $month_day}
<td>{$month_day|string_format:"%02d"}</td>
{else}
<td><a href="index.php?module=newsarchive&id={$newsarchive->id}&amp;day={$month_day}&amp;month={$month}&amp;year={$year}">{$month_day|string_format:"%02d"}</a></td>
{/if}
{/foreach}
</tr>
</table>
{/if}
{if !$documents}
<strong>{#ARCHIVE_NOT_FOUND#}</strong>
{else}
<table width="100%" cellpadding="0" cellspacing="2">
<tr class="arc_header">
{if $day == 0}
<td><a href="index.php?module=newsarchive&id={$newsarchive->id}&amp;month={$month}&amp;year={$year}&amp;sort=title{if $smarty.request.sort=='title'}_desc{/if}">{#ARCHIVE_DOC_NAME#}</a></td>
<td><a href="index.php?module=newsarchive&id={$newsarchive->id}&amp;month={$month}&amp;year={$year}&amp;sort=date{if $smarty.request.sort=='date'}_desc{/if}">{#ARCHIVE_PUBLIC_DATE#}</a></td>
<td><a href="index.php?module=newsarchive&id={$newsarchive->id}&amp;month={$month}&amp;year={$year}&amp;sort=rubric{if $smarty.request.sort=='rubric'}_desc{/if}">{#ARCHIVE_IN_RUBRIC#}</a></td>
{else}
<td><a href="index.php?module=newsarchive&id={$newsarchive->id}&amp;day={$day}&amp;month={$month}&amp;year={$year}&amp;sort=title{if $smarty.request.sort=='title'}_desc{/if}">{#ARCHIVE_DOC_NAME#}</a></td>
<td><a href="index.php?module=newsarchive&id={$newsarchive->id}&amp;day={$day}&amp;month={$month}&amp;year={$year}&amp;sort=date{if $smarty.request.sort=='date'}_desc{/if}">{#ARCHIVE_PUBLIC_DATE#}</a></td>
<td><a href="index.php?module=newsarchive&id={$newsarchive->id}&amp;day={$day}&amp;month={$month}&amp;year={$year}&amp;sort=rubric{if $smarty.request.sort=='rubric'}_desc{/if}">{#ARCHIVE_IN_RUBRIC#}</a></td>
{/if}
</tr>
{foreach from=$documents item=document}
<tr>
<td><a href="{$document->document_alias}">{$document->document_title}</a></td>
<td>{$document->document_published|date_format:$DATE_FORMAT|pretty_date}</td>
<td>{$document->rubric_title}</td>
</tr>
{/foreach}
</table>
{/if}

8
templates/index.php

@ -0,0 +1,8 @@
<?php
/**
* Файл-заглушка, предназначенный для запрета показа списка файлов в текущей директории,
* если через адресную строку браузера было прямое общращение к данной директории.
*/
header('Location:/');
exit;
?>

18
templates/public_archive.tpl

@ -0,0 +1,18 @@
<div class="mod_searchbox">
<strong>{#ARCHIVE_TITLE#}</strong><br />
<br />
{assign var="cur_year" value=""}
{foreach from=$months item=items}
{if $items->year!=$cur_year}{assign var="cur_year" value=$items->year}
<h3>{$items->year}</h3>
{/if}
{if $items->nums != 0}
<span style="line-height:25px;"><a href="index.php?module=newsarchive&id={$archiveid}&amp;month={$items->mid}&amp;year={$items->year}">{$items->month}, {$items->year}</a> <small>({$items->nums})</small></span><br />
{else}
{if $newsarchive_show_empty == 1}
<span style="line-height:25px;"><a href="index.php?module=newsarchive&id={$archiveid}&amp;month={$items->mid}&amp;year={$items->year}">{$items->month}, {$items->year}</a> <small>(0)</small></span><br />
{/if}
{/if}
{/foreach}
</div>
Loading…
Cancel
Save