@ -659,6 +659,8 @@
*/
*/
function _main_content ($rubTmpl)
function _main_content ($rubTmpl)
{
{
Debug::startTime('MAINCONTENT');
// Проверяем теги полей в шаблоне рубрики на условие != ''
// Проверяем теги полей в шаблоне рубрики на условие != ''
if (defined('USE_GET_FIELDS') & & USE_GET_FIELDS)
if (defined('USE_GET_FIELDS') & & USE_GET_FIELDS)
{
{
@ -748,6 +750,14 @@
$main_content
$main_content
);
);
// GetDocumentsField
$main_content = preg_replace_callback(
'/\[tag:docs:([0-9]+)(|:([a-zA-Z0-9-_]+))+?\]/',
function ($match) {
return get_document($match[1], $match[3]);
},
$main_content
);
$main_content = str_replace('[tag:docdate]', translate_date(strftime(DATE_FORMAT, $this->curentdoc->document_published)), $main_content);
$main_content = str_replace('[tag:docdate]', translate_date(strftime(DATE_FORMAT, $this->curentdoc->document_published)), $main_content);
$main_content = str_replace('[tag:doctime]', translate_date(strftime(TIME_FORMAT, $this->curentdoc->document_published)), $main_content);
$main_content = str_replace('[tag:doctime]', translate_date(strftime(TIME_FORMAT, $this->curentdoc->document_published)), $main_content);
@ -766,6 +776,8 @@
//-- Кеширование скомпилированного документа
//-- Кеширование скомпилированного документа
$this->setCompileDocument($main_content);
$this->setCompileDocument($main_content);
$GLOBALS['block_generate']['DOCUMENT']['MAINCONTENT'] = Debug::endTime('MAINCONTENT');
return $main_content;
return $main_content;
}
}
@ -801,15 +813,22 @@
return false;
return false;
$cache['id'] = (int)$cache['id'];
$cache['id'] = (int)$cache['id'];
$cache['id'] = 'documents/' . (floor($cache['id'] / 1000)) . '/' . $cache['id'];
$cache['dir'] = 'documents/' . (floor($cache['id'] / 1000)) . '/' . $cache['id'];
$cache['compile_id'] = 'compile/' . (floor($cache['id'] / 1000)) . '/' . $cache['id'];
$cache['file'] = $this->_get_cache_hash() . '.compiled';
$cache['file'] = $this->_get_cache_hash() . '.compiled';
$cache['compile_file'] = $this->_get_cache_hash() . '.php';
if (! $cache['file'])
if (! $cache['file'])
return false;
return false;
$cache['dir'] = BASE_DIR . '/tmp/cache/sql/' . (trim($cache['id']) > ''
$cache['dir'] = BASE_DIR . '/tmp/cache/sql/' . (trim($cache['dir']) > ''
? trim($cache['id']) . '/'
? trim($cache['dir']) . '/'
: substr($cache['file'], 0, 2) . '/' . substr($cache['file'], 2, 2) . '/' . substr($cache['file'], 4, 2) . '/');
$cache['compile_dir'] = BASE_DIR . '/tmp/cache/sql/' . (trim($cache['compile_id']) > ''
? trim($cache['compile_id']) . '/'
: substr($cache['file'], 0, 2) . '/' . substr($cache['file'], 2, 2) . '/' . substr($cache['file'], 4, 2) . '/');
: substr($cache['file'], 0, 2) . '/' . substr($cache['file'], 2, 2) . '/' . substr($cache['file'], 4, 2) . '/');
return $cache;
return $cache;
@ -900,6 +919,108 @@
}
}
function checkAcceptCache ()
{
$isAjax = isAjax();
$page = get_current_page();
$array = ['module', 'sysblock', 'request', 'page', 'apage', 'artpage'];
foreach ($array AS $k => $v)
{
if (in_array($v, $_REQUEST))
return false;
}
if ( ($isAjax == true) || ($page != 1) )
return false;
return true;
}
function setCompileContent ($content)
{
$cache = $this->_get_cache_id();
if (! $cache)
return false;
//-- Удаляем файл, если существует
if (file_exists($cache['compile_dir'] . $cache['file']))
unlink($cache['compile_dir'] . $cache['file']);
if ($this->checkAcceptCache() == false)
return false;
// Если включен DEV MODE, то отключаем кеширование запросов
if (defined('DEV_MODE') AND DEV_MODE)
return false;
if (UGROUP == 1 & & (defined('CACHE_DOC_FULL_ADMIN') & & CACHE_DOC_FULL_ADMIN == false))
return false;
//-- Кэширование разрешено
if (defined('CACHE_DOC_FULL') & & CACHE_DOC_FULL)
{
//-- Если нет папки, создаем
if (! is_dir($cache['compile_dir']))
@mkdir($cache['compile_dir'], 0766, true);
//-- Сохраняем скомпилированный шаблон в кэш
file_put_contents($cache['compile_dir'] . $cache['compile_file'], $content);
$GLOBALS['block_generate']['COMPILE']['SET'] = true;
}
return true;
}
function getCompileContent ()
{
if ($this->checkAcceptCache() == false)
return false;
$cache = $this->_get_cache_id();
if (! $cache)
return false;
$content = false;
//-- Если нет папки, создаем
if (! is_dir($cache['compile_dir']))
@mkdir($cache['compile_dir'], 0766, true);
// Наличие файла
if (file_exists($cache['compile_dir'] . $cache['compile_file']))
{
// Получаем время создания файла
$file_time = filemtime($cache['compile_dir'] . $cache['compile_file']);
// Получаем время для проверки
$cache_time = $this->curentdoc->rubric_changed;
if (! $cache_time || $cache_time > $file_time)
{
unlink ($cache['compile_dir'] . $cache['compile_file']);
}
else if (defined('CACHE_DOC_FULL') & & CACHE_DOC_FULL)
{
$content = file_get_contents($cache['compile_dir'] . $cache['compile_file']);
$GLOBALS['block_generate']['COMPILE']['GET'] = true;
}
}
else
{
$content = false;
}
return $content;
}
/**
/**
* Метод, предназначенный для обработки системных тегов модулей. Здесь подключаются только те файлы модулей,
* Метод, предназначенный для обработки системных тегов модулей. Здесь подключаются только те файлы модулей,
* системные теги которых обнаружены в шаблоне при парсинге. Также формирует массив всех установленных модулей
* системные теги которых обнаружены в шаблоне при парсинге. Также формирует массив всех установленных модулей
@ -1048,14 +1169,49 @@
* @param int $id идентификатор документа
* @param int $id идентификатор документа
* @param int $rub_id идентификатор рубрики
* @param int $rub_id идентификатор рубрики
*/
*/
function coreSiteFetch($id, $rub_id = '')
function coreSiteFetch ($id, $rub_id = '')
{
{
global $AVE_DB;
global $AVE_DB, $AVE_Module ;
Debug::startTime('DOC_' . $id);
Debug::startTime('DOC_' . $id);
$cacheCompile = false;
// Определяем рубрику
define('RUB_ID', ! empty ($rub_id)
? $rub_id
: $this->curentdoc->rubric_id);
$main_content = '';
$main_content = '';
if ((defined('CACHE_DOC_FULL') & & CACHE_DOC_FULL) & & isAjax() == false)
{
if ($out = $this->getCompileContent())
{
foreach ($AVE_Module->moduleListGet() as $row)
{
// Проверяем, существует ли для данного модуля файл module.php в его персональной директории
$mod_file = BASE_DIR . '/modules/' . $row['ModuleSysName'] . '/module.php';
if (is_file($mod_file))
include_once($mod_file);
}
$this->_coreRubricPermissionFetch(RUB_ID);
// Выполняем Код рубрики До загрузки документа
ob_start();
eval(' ?>' . $this->curentdoc->rubric_start_code . '<?php ' );
ob_end_clean();
$cacheCompile = true;
}
//$out = '';
}
if (! $out)
{
// Если происходит вызов модуля, получаем соответствующие мета-теги и получаем шаблон модуля
// Если происходит вызов модуля, получаем соответствующие мета-теги и получаем шаблон модуля
if (isset($_REQUEST['module']) & & ! empty($_REQUEST['module']))
if (isset($_REQUEST['module']) & & ! empty($_REQUEST['module']))
{
{
@ -1097,11 +1253,6 @@
if (! is_numeric($_REQUEST['request']) & & preg_match('/^[A-Za-z0-9-_]{1,20}$/i', $_REQUEST['request']) !== 1)
if (! is_numeric($_REQUEST['request']) & & preg_match('/^[A-Za-z0-9-_]{1,20}$/i', $_REQUEST['request']) !== 1)
$this->_coreErrorPage404();
$this->_coreErrorPage404();
// Определяем рубрику
define('RUB_ID', ! empty ($rub_id)
? $rub_id
: $this->curentdoc->rubric_id);
// Проверяем разрешение на внешнее обращение
// Проверяем разрешение на внешнее обращение
if (! $this->_requestGet($_REQUEST['request'], 'request_external'))
if (! $this->_requestGet($_REQUEST['request'], 'request_external'))
$this->_coreErrorPage404();
$this->_coreErrorPage404();
@ -1133,11 +1284,6 @@
if (! $this->_coreDocumentIsPublished())
if (! $this->_coreDocumentIsPublished())
$this->_coreErrorPage404();
$this->_coreErrorPage404();
// Определяем права доступа к документам рубрики
define('RUB_ID', ! empty ($rub_id)
? $rub_id
: $this->curentdoc->rubric_id);
$this->_coreRubricPermissionFetch(RUB_ID);
$this->_coreRubricPermissionFetch(RUB_ID);
// Выполняем Код рубрики До загрузки документа
// Выполняем Код рубрики До загрузки документа
@ -1304,8 +1450,8 @@
if (defined('RUB_ID'))
if (defined('RUB_ID'))
{
{
$replace = [
$replace = [
'[tag:rubheader]' => $this->curentdoc->rubric_header_template . '[tag:rubheader]' ,
'[tag:rubheader]' => $this->curentdoc->rubric_header_template,
'[tag:rubfooter]' => $this->curentdoc->rubric_footer_template . '[tag:rubfooter]'
'[tag:rubfooter]' => $this->curentdoc->rubric_footer_template
];
];
$out = str_replace(array_keys($replace), array_values($replace), $out);
$out = str_replace(array_keys($replace), array_values($replace), $out);
@ -1445,7 +1591,7 @@
getSiteUrl(),
getSiteUrl(),
get_home_link(),
get_home_link(),
(isset($this->curentdoc->document_meta_robots) ? $this->curentdoc->document_meta_robots : ''),
(isset($this->curentdoc->document_meta_robots) ? $this->curentdoc->document_meta_robots : ''),
canonical(isset ($this->curentdoc->document_alias) ? ABS_PATH . $this->curentdoc->document_alias : ''),
canonical(isset ($this->curentdoc->document_alias) ? getSiteUrl() . str_replace('//', '/', ABS_PATH . $this->curentdoc->document_alias) : ''),
(isset($this->curentdoc->Id) ? $this->curentdoc->Id : ''),
(isset($this->curentdoc->Id) ? $this->curentdoc->Id : ''),
(isset($this->curentdoc->document_parent) ? $this->curentdoc->document_parent : '')
(isset($this->curentdoc->document_parent) ? $this->curentdoc->document_parent : '')
);
);
@ -1597,6 +1743,12 @@
$GLOBALS['block_generate']['DOCUMENT']['FETCH'] = Debug::endTime('DOC_' . $id);
$GLOBALS['block_generate']['DOCUMENT']['FETCH'] = Debug::endTime('DOC_' . $id);
if ($cacheCompile == false)
{
$this->setCompileContent($out);
}
}
// Выводим собранный документ
// Выводим собранный документ
echo $out;
echo $out;
}
}