Модуль Похожие документы v1.26.0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
4.9 KiB

<?php
/**
* AVE.cms - Модуль Похожие документы
*
* @package AVE.cms
* @subpackage module_MoreDoc
* @filesource
*/
if(!defined('BASE_DIR')) exit;
if (defined('ACP'))
{
$modul['ModuleName'] = 'Ссылки по теме';
$modul['ModuleSysName'] = 'moredoc';
$modul['ModuleVersion'] = '1.0';
$modul['ModuleDescription'] = 'Данный модуль предназначен для вывода списка похожих документов относительно текущего. Связующим элементом документов является первое слово из поля Ключевые слова. Результат вывода кешируется средствами Smarty.<BR /><BR />Для вывода списка похожих документов используйте системный тег <strong>[mod_moredoc]</strong> (можно использовать как в документах так и шаблоне рубрики).';
$modul['ModuleAutor'] = 'AVE.CMS Team';
$modul['ModuleCopyright'] = '&copy; 2007-2013 AVE.CMS';
$modul['ModuleIsFunction'] = 1;
$modul['ModuleAdminEdit'] = 0;
$modul['ModuleFunction'] = 'mod_moredoc';
$modul['ModuleTag'] = '[mod_moredoc]';
$modul['ModuleTagLink'] = null;
$modul['ModuleAveTag'] = '#\\\[mod_moredoc]#';
$modul['ModulePHPTag'] = '<?php mod_moredoc(); ?>';
}
/**
* Функция обработки тега модуля
*
*/
function mod_moredoc()
{
global $AVE_Core, $AVE_DB, $AVE_Template;
require_once(BASE_DIR . '/functions/func.modulglobals.php');
set_module_globals('moredoc');
$AVE_Template->caching = true; // Включаем кеширование
$AVE_Template->cache_lifetime = 60*60*24; // Время жизни кеша 1 день в секундах
// $AVE_Template->cache_dir .= '/moredoc'; // Папка для кеша модуля
$tpl_dir = BASE_DIR . '/modules/moredoc/templates/'; // Указываем путь к шаблону модуля
// Если нету в кеше, то начинаем обрабатывать
if (!$AVE_Template->is_cached($tpl_dir . 'moredoc.tpl', $AVE_Core->curentdoc->Id))
{
$limit = 5; // Количество связных документов
$flagrubric = 1; // Учитывать или нет рубрику документа (0 - нет, 1 - да)
$moredoc = array();
// Проверяем, есть ли папка для кеша, если нет (первый раз) — создаем
if (!is_dir($AVE_Template->cache_dir))
{
$oldumask = umask(0);
@mkdir($AVE_Template->cache_dir, 0777);
umask($oldumask);
}
// Получаем ключевые слова, рубрику, извлекаем первое ключевое слово
$row = $AVE_DB->Query("
SELECT
rubric_id,
document_meta_keywords
FROM " . PREFIX . "_documents
WHERE Id = '" . $AVE_Core->curentdoc->Id . "'
LIMIT 1
")->FetchRow();
$keywords = explode(',',$row->document_meta_keywords);
$keywords = trim($keywords[0]);
if ($keywords != '')
{
$inrubric = $flagrubric ? ("AND rubric_id = '" . $row->rubric_id . "'") : '';
$doctime = get_settings('use_doctime')
? ("AND document_published <= " . time() . " AND (document_expire = 0 OR document_expire >= " . time() . ")") : '';
// Ищем документы где встречается такое-же слово
$sql = $AVE_DB->Query("
SELECT
Id,
document_expire,
document_title,
document_alias,
document_meta_description
FROM " . PREFIX . "_documents
WHERE document_meta_keywords LIKE '" . $keywords . "%'
AND Id != 1
AND Id != '" . PAGE_NOT_FOUND_ID . "'
AND Id != '" . $AVE_Core->curentdoc->Id . "'
AND document_status != '0'
AND document_deleted != '1'
" . $inrubric . "
" . $doctime . "
ORDER BY document_count_view DESC
LIMIT " . $limit
);
while ($row = $sql->FetchRow())
{
if ($doctime != '' && (time() + $AVE_Template->cache_lifetime) > $row->document_expire)
{
// Изменяем время жизни кеша так что-бы оно не превышало
// время окончания публикации попавших в выборку документов
$AVE_Template->cache_lifetime = $row->document_expire - time();
}
$row->document_link = rewrite_link('index.php?id=' . $row->Id . '&amp;doc=' . (empty($row->document_alias) ? prepare_url($row->document_title) : $row->document_alias));
array_push($moredoc, $row);
}
// Закрываем соединение
$sql->Close();
}
// Передаём переменную moredoc в шаблон
$AVE_Template->assign('moredoc', $moredoc);
}
// Выводим шаблон moredoc.tpl
$AVE_Template->display($tpl_dir . 'moredoc.tpl', $AVE_Core->curentdoc->Id);
$AVE_Template->caching = false; // Отключаем кеширование
}
?>