Для мультиязычных сайтов исправлены ошибки при работе с модулями и выводом хлебных крошек.
This commit is contained in:
@@ -518,7 +518,7 @@
|
||||
return (isset($this->curentdoc->Id) && $this->curentdoc->Id == $page_not_found_id);
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Метод, предназначенный для получения МЕТА-тегов для различных модулей.
|
||||
* ToDo
|
||||
* @return boolean
|
||||
@@ -526,8 +526,8 @@
|
||||
function _coreModuleMetatagsFetch()
|
||||
{
|
||||
global $AVE_DB;
|
||||
|
||||
// Если в запросе не пришел параметр module, заврешаем работу
|
||||
|
||||
// Если в запросе не пришел параметр module, завершаем работу
|
||||
if (! isset($_REQUEST['module']))
|
||||
return false;
|
||||
|
||||
@@ -535,6 +535,7 @@
|
||||
SELECT
|
||||
1 AS Id,
|
||||
0 AS document_published,
|
||||
document_lang,
|
||||
document_meta_robots,
|
||||
document_meta_keywords,
|
||||
document_meta_description,
|
||||
@@ -545,6 +546,10 @@
|
||||
Id = 1
|
||||
")->FetchRow();
|
||||
|
||||
if (isset($this->curentdoc) && !isset($this->curentdoc->document_lang)) {
|
||||
$this->curentdoc->document_lang = $_SESSION['user_language'] ?? 'ru';
|
||||
}
|
||||
|
||||
return (isset($this->curentdoc->Id) && $this->curentdoc->Id == 1);
|
||||
}
|
||||
|
||||
@@ -759,8 +764,6 @@
|
||||
$main_content
|
||||
);
|
||||
|
||||
// ИСПРАВЛЕНИЕ DEPRECATED: strftime() заменена на date()
|
||||
|
||||
$main_content = str_replace('[tag:docdate]', ave_date_format(DATE_FORMAT, $this->curentdoc->document_published), $main_content);
|
||||
$main_content = str_replace('[tag:doctime]', ave_date_format(TIME_FORMAT, $this->curentdoc->document_published), $main_content);
|
||||
|
||||
@@ -793,7 +796,7 @@
|
||||
function _get_cache_hash ()
|
||||
{
|
||||
$hash = 'g-' . UGROUP; // Группа пользователей
|
||||
$hash .= 'r-' . RUB_ID; // ID Рубрики
|
||||
$hash .= 'r-' . (defined('RUB_ID') ? RUB_ID : 0);// ID Рубрики
|
||||
$hash .= 't-' . (isset($this->curentdoc->rubric_tmpl_id) ? $this->curentdoc->rubric_tmpl_id : '0'); // Шаблон рубрики
|
||||
//$hash .= 'u-' . get_redirect_link(); // ToDo
|
||||
|
||||
@@ -1187,24 +1190,41 @@
|
||||
? $rub_id
|
||||
: $this->curentdoc->rubric_id);*/
|
||||
|
||||
// Определяем рубрику
|
||||
/* // Определяем рубрику
|
||||
define('RUB_ID', ! empty ($rub_id)
|
||||
? $rub_id
|
||||
// ИСПРАВЛЕНИЕ: Проверяем, что $this->curentdoc является объектом
|
||||
: (is_object($this->curentdoc) ? $this->curentdoc->rubric_id : 0)
|
||||
);
|
||||
);*/
|
||||
|
||||
if (isset($_REQUEST['module']) && !empty($_REQUEST['module'])) {
|
||||
} else {
|
||||
if (!defined('RUB_ID')) {
|
||||
|
||||
define(
|
||||
'RUB_ID',
|
||||
!empty($rub_id)
|
||||
? $rub_id
|
||||
: (isset($this->curentdoc) && is_object($this->curentdoc)
|
||||
? $this->curentdoc->rubric_id
|
||||
: 0
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$main_content = '';
|
||||
|
||||
// ИСПРАВЛЕНИЕ: Инициализируем $out пустой строкой, чтобы избежать "Undefined variable $out"
|
||||
// Инициализируем $out пустой строкой, чтобы избежать "Undefined variable $out"
|
||||
// если условие кэша не выполняется (например, при AJAX запросе).
|
||||
$out = '';
|
||||
|
||||
if ((defined('CACHE_DOC_FULL') && CACHE_DOC_FULL) && isAjax() == false)
|
||||
{
|
||||
if ($out = $this->getCompileContent())
|
||||
|
||||
if ($out = $this->getCompileContent())
|
||||
{
|
||||
foreach ($AVE_Module->moduleListGet() as $row)
|
||||
foreach ($AVE_Module->moduleListGet() as $row)
|
||||
{
|
||||
// Проверяем, существует ли для данного модуля файл module.php в его персональной директории
|
||||
$mod_file = BASE_DIR . '/modules/' . $row['ModuleSysName'] . '/module.php';
|
||||
@@ -1214,7 +1234,7 @@
|
||||
}
|
||||
|
||||
$this->_coreRubricPermissionFetch(RUB_ID);
|
||||
|
||||
|
||||
// Выполняем Код рубрики До загрузки документа
|
||||
ob_start();
|
||||
eval(' ?>' . $this->curentdoc->rubric_start_code . '<?php ');
|
||||
@@ -1227,12 +1247,15 @@
|
||||
}
|
||||
|
||||
if (! $out)
|
||||
{
|
||||
// Если происходит вызов модуля, получаем соответствующие мета-теги и получаем шаблон модуля
|
||||
{
|
||||
|
||||
// Если происходит вызов модуля, получаем соответствующие мета-теги и получаем шаблон модуля
|
||||
if (isset($_REQUEST['module']) && ! empty($_REQUEST['module']))
|
||||
{
|
||||
$out = $this->_coreModuleMetatagsFetch();
|
||||
// връща в out шаблона
|
||||
$out = $this->_coreDocumentTemplateGet('', '', $this->_coreModuleTemplateGet());
|
||||
|
||||
}
|
||||
// Если происходит вызов системного блока
|
||||
elseif (isset($_REQUEST['sysblock']) && ! empty($_REQUEST['sysblock']))
|
||||
@@ -1465,7 +1488,7 @@
|
||||
unset ($this->curentdoc->rubric_template, $this->curentdoc->template);
|
||||
}
|
||||
//-- Конец вывода документа
|
||||
|
||||
|
||||
//Работа с условиями
|
||||
/*
|
||||
$out = preg_replace('/\[tag:if_exp:?(.*)\]/u', '<?php
|
||||
@@ -1483,6 +1506,7 @@
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
// Тут мы вводим в хеадер и футер иньекцию скриптов.
|
||||
if (defined('RUB_ID'))
|
||||
{
|
||||
@@ -1494,8 +1518,27 @@
|
||||
$out = str_replace(array_keys($replace), array_values($replace), $out);
|
||||
|
||||
unset ($replace);
|
||||
}
|
||||
}
|
||||
*/
|
||||
// Тут мы вводим в хеадер и футер иньекцию скриптов.
|
||||
$rubHeader = '';
|
||||
$rubFooter = '';
|
||||
|
||||
if (
|
||||
defined('RUB_ID') &&
|
||||
isset($this->curentdoc) &&
|
||||
is_object($this->curentdoc)
|
||||
) {
|
||||
$rubHeader = $this->curentdoc->rubric_header_template ?? '';
|
||||
$rubFooter = $this->curentdoc->rubric_footer_template ?? '';
|
||||
}
|
||||
|
||||
$out = str_replace(
|
||||
['[tag:rubheader]', '[tag:rubfooter]'],
|
||||
[$rubHeader, $rubFooter],
|
||||
$out
|
||||
);
|
||||
|
||||
// Парсим поля запроса
|
||||
$out = preg_replace_callback('/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/',
|
||||
function ($m) use ($id)
|
||||
@@ -1632,12 +1675,13 @@
|
||||
(isset($this->curentdoc->Id) ? $this->curentdoc->Id : ''),
|
||||
(isset($this->curentdoc->document_parent) ? $this->curentdoc->document_parent : '')
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
// Если пришел контент из модуля
|
||||
if (defined('MODULE_CONTENT'))
|
||||
{
|
||||
// парсинг тегов при выводе из модуля
|
||||
{
|
||||
// парсинг тегов при выводе из модуля
|
||||
$search[] = '[tag:maincontent]';
|
||||
$replace[] = MODULE_CONTENT;
|
||||
$search[] = '[tag:title]';
|
||||
@@ -1697,7 +1741,7 @@
|
||||
},
|
||||
$out
|
||||
);
|
||||
|
||||
|
||||
// Если пришел вызов на активацию языковых файлов
|
||||
$out = preg_replace_callback(
|
||||
'/\[tag:langfile:([a-zA-Z0-9-_]+)\]/u',
|
||||
@@ -1725,7 +1769,7 @@
|
||||
// Парсим тег версии системы
|
||||
$search[] = '[tag:version]';
|
||||
$replace[] = APP_NAME . ' v' . APP_VERSION ;
|
||||
|
||||
|
||||
// Парсим тег кол-ва просмотра данного документа
|
||||
$search[] = '[tag:docviews]';
|
||||
$replace[] = isset ($this->curentdoc->document_count_view) ? $this->curentdoc->document_count_view : '';
|
||||
@@ -1748,15 +1792,17 @@
|
||||
},
|
||||
$out
|
||||
);
|
||||
|
||||
|
||||
// Парсим теги языковых условий
|
||||
// Парсим теги языковых условий (Фикс для PHP 8.4)
|
||||
if (defined('RUB_ID'))
|
||||
{
|
||||
$out = preg_replace('/\[tag:lang:([a-zA-Z0-9-_]+)\]/', '<?php if ($AVE_Core->curentdoc->document_lang == "$1") { ?>', $out);
|
||||
// Используем ?? чтобы если свойства нет, PHP не ругался, а брал данные из сессии или пустую строку
|
||||
$out = preg_replace('/\[tag:lang:([a-zA-Z0-9-_]+)\]/', '<?php if (($AVE_Core->curentdoc->document_lang ?? $_SESSION["user_language"] ?? "") == "$1") { ?>', $out);
|
||||
}
|
||||
else
|
||||
{
|
||||
$out = preg_replace('/\[tag:lang:([a-zA-Z0-9-_]+)\]/', '<?php if ($_SESSION["user_language"] == "$1") { ?>', $out);
|
||||
$out = preg_replace('/\[tag:lang:([a-zA-Z0-9-_]+)\]/', '<?php if (($_SESSION["user_language"] ?? "") == "$1") { ?>', $out);
|
||||
}
|
||||
|
||||
$out = str_replace('[tag:/lang]', '<?php } ?>', $out);
|
||||
@@ -1766,7 +1812,7 @@
|
||||
{
|
||||
$out = preg_replace_callback('/\[tag:breadcrumb\]/', 'get_breadcrumb', $out);
|
||||
}
|
||||
|
||||
|
||||
// Парсим остальные теги основного шаблона
|
||||
$out = str_replace($search, $replace, $out);
|
||||
|
||||
@@ -1782,7 +1828,8 @@
|
||||
|
||||
if ($cacheCompile == false)
|
||||
{
|
||||
$this->setCompileContent($out);
|
||||
|
||||
$this->setCompileContent($out);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2131,14 +2178,11 @@
|
||||
|
||||
$GLOBALS['block_generate']['DOCUMENT']['URL_PARSE'] = Debug::endTime('URL_PARSE');
|
||||
|
||||
// ИСПРАВЛЕНИЕ: Используем оператор Nullsafe (?->)
|
||||
if ($redirect_alias?->document_alias)
|
||||
{
|
||||
$redirect_alias = ABS_PATH . $redirect_alias->document_alias . URL_SUFF;
|
||||
$redirect_alias = str_replace('//', '/', $redirect_alias);
|
||||
|
||||
// ДОПОЛНИТЕЛЬНОЕ ИСПРАВЛЕНИЕ: Безопасный доступ к document_alias_header
|
||||
// Это может быть причиной другой ошибки, если $redirect_alias->document_alias_header не существует
|
||||
$header_code = $redirect_alias->document_alias_header ?? 301;
|
||||
header('Location:' . $redirect_alias, true, $header_code);
|
||||
exit;
|
||||
|
||||
@@ -47,14 +47,38 @@
|
||||
|
||||
$noprint = null;
|
||||
|
||||
if ($bread_show_main)
|
||||
if ($bread_show_main)
|
||||
{
|
||||
$home_id = ($_SESSION['user_language'] == DEFAULT_LANGUAGE)
|
||||
? 1
|
||||
: $curent_document;
|
||||
// Главная страница — это всегда ID 1 для любого языка
|
||||
$home_id = 1;
|
||||
$lang = $_SESSION['user_language'] ?? null;
|
||||
if (
|
||||
$lang &&
|
||||
isset($_SESSION['accept_langs'][$lang]) &&
|
||||
$lang !== DEFAULT_LANGUAGE
|
||||
) {
|
||||
$alias = $_SESSION['accept_langs'][$lang];
|
||||
$sql = "
|
||||
SELECT *
|
||||
FROM " . PREFIX . "_documents
|
||||
WHERE document_alias = '" . $alias . "/'
|
||||
AND document_lang = '" . $lang . "'
|
||||
";
|
||||
|
||||
$data = $AVE_DB->Query($sql)->FetchRow();
|
||||
if (is_object($data)) {
|
||||
$home_id = $data->Id;
|
||||
}
|
||||
}
|
||||
|
||||
$lang_home_alias = getDocument($home_id);
|
||||
|
||||
// Если спец-заголовок для крошек пуст, берем основной заголовок документа
|
||||
// Это гарантирует, что <span itemprop="name"></span> не будет пустым
|
||||
$home_title = (empty($lang_home_alias->document_breadcrum_title))
|
||||
? stripslashes(htmlspecialchars_decode($lang_home_alias->document_title))
|
||||
: stripslashes(htmlspecialchars_decode($lang_home_alias->document_breadcrum_title));
|
||||
|
||||
$number = 1;
|
||||
|
||||
$search = [
|
||||
@@ -64,8 +88,8 @@
|
||||
];
|
||||
|
||||
$replace = [
|
||||
$lang_home_alias->document_breadcrum_title,
|
||||
$bread_show_host ? HOST . '/' . ltrim($lang_home_alias->document_alias, '/') : $lang_home_alias->document_alias,
|
||||
$home_title,
|
||||
$bread_show_host ? HOST . '/' . ltrim($lang_home_alias->document_alias, '/') : '/' .$lang_home_alias->document_alias,
|
||||
1
|
||||
];
|
||||
|
||||
@@ -78,7 +102,7 @@
|
||||
if ($bread_sepparator_use)
|
||||
$bread_crumb .= $bread_sepparator;
|
||||
|
||||
unset ($search, $replace, $link, $sql, $lang_home_alias);
|
||||
unset ($search, $replace, $link, $sql, $lang_home_alias, $home_title);
|
||||
}
|
||||
|
||||
if ($curent_document == 1 || $curent_document == PAGE_NOT_FOUND_ID)
|
||||
|
||||
Reference in New Issue
Block a user