");
$field_value = preg_replace('/ +/', ' ', $field_value);
$field_value = trim($field_value);
$maxlength = abs($maxlength);
}
// ToDo - сделать настройки окончаний
if ($maxlength != 0)
{
$field_value = mb_substr($field_value, 0, $maxlength) . ((strlen($field_value) > $maxlength) ? '... ' : '');
}
}
else
return false;
}
return $field_value;
}
function showteaser($id, $tparams = '')
{
$item = showrequestelement($id, '', $tparams);
$item = str_replace('[tag:path]', ABS_PATH, $item);
$item = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $item);
return $item;
}
// Функция получения уникальных параметров для каждого тизера
function f_params_of_teaser($id_param_array,$num)
{
global $params_of_teaser;
return $params_of_teaser[$id_param_array][$num];
}
// Функция получения элемента запроса
function showrequestelement($mixed, $template = '', $tparams = '')
{
global $AVE_DB, $req_item_num, $params_of_teaser, $use_cache;
if (is_array($mixed))
$mixed = $mixed[1];
$row = (is_object($mixed) ? $mixed : $AVE_DB->Query("
SELECT
a.*
FROM
" . PREFIX . "_documents AS a
WHERE
a.Id = '" . intval($mixed) . "'
GROUP BY
a.Id
LIMIT 1
")->FetchRow());
if(! $row)
return '';
$tparams_id = '';
if ($tparams != '')
{
$tparams_id = $row->Id.md5($tparams); // Создаем уникальный id для каждого набора параметров
$params_of_teaser[$tparams_id] = array(); // Для отмены лишних ворнингов
$tparams = trim($tparams,'[]:'); // Удаляем: слева ':[', справа ']'
$params_of_teaser[$tparams_id] = explode('|',$tparams); // Заносим параметры в массив уникального id
}
$template = ($template > '' ? $template : $AVE_DB->Query(
"SELECT rubric_teaser_template FROM " . PREFIX . "_rubrics WHERE Id='" . intval($row->rubric_id) . "'"
)->GetCell());
$cachefile_docid = BASE_DIR . '/cache/sql/request/' . $row->Id . '/request-' . md5($template) . '.cache';
if(! file_exists($cachefile_docid))
{
$template = preg_replace("/\[tag:if_notempty:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/u", '<'.'?php if((htmlspecialchars(request_get_document_field(\'$1\', '.$row->Id.', \'$2\', '.(int)$row->rubric_id.'), ENT_QUOTES)) != \'\') { '.'?'.'>', $template);
$template = preg_replace("/\[tag:if_empty:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/u", '<'.'?php if((htmlspecialchars(request_get_document_field(\'$1\', '.$row->Id.', \'$2\', '.(int)$row->rubric_id.'), ENT_QUOTES)) == \'\') { '.'?'.'>', $template);
$template = str_replace('[tag:if:else]', '', $template);
$template = str_replace('[tag:/if]', '', $template);
// Парсим теги визуальных блоков
$item = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $template);
// Парсим теги системных блоков
$item = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_sysblock', $item);
$item = preg_replace_callback(
'/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/',
create_function(
'$m',
'return request_get_document_field($m[1], ' . $row->Id . ', $m[2], ' . (int)$row->rubric_id . ');'
),
$item
);
// Возвращаем поле из БД документа
$item = preg_replace_callback('/\[tag:doc:([a-zA-Z0-9-_]+)\]/u',
function ($match) use ($row)
{
return isset($row->{$match[1]})
? $row->{$match[1]}
: null;
},
$item
);
// Если пришел вызов на активацию языковых файлов
$item = preg_replace_callback(
'/\[tag:langfile:([a-zA-Z0-9-_]+)\]/u',
function ($match)
{
global $AVE_Template;
return $AVE_Template->get_config_vars($match[1]);
},
$item
);
$item = str_replace('[tag:path]', ABS_PATH, $item);
$item = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false)
? DEFAULT_THEME_FOLDER
: THEME_FOLDER)
. '/', $item);
// Watermarks
$item = preg_replace_callback(
'/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/',
create_function(
'$m',
'watermarks($m[1], $m[2], $m[3]);'
),
$item
);
// Удаляем ошибочные теги полей документа в шаблоне рубрики
$item = preg_replace('/\[tag:doc:\d*\]/', '', $item);
$item = preg_replace('/\[tag:langfile:\d*\]/', '', $item);
$item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $item);
if ($tparams != '')
{
// Заменяем tparam в тизере
// $item = preg_replace('/\[tparam:([0-9]+)\]/', '<'.'?php echo $params_of_teaser["'.$tparams_id.'"][$1]'.'?'.'>', $item); // косячная версия, пока оставил
$item = preg_replace_callback(
'/\[tparam:([0-9]+)\]/',
create_function(
'$m',
'return f_params_of_teaser('.$tparams_id.', $m[1]);'
),
$item
);
}
else
{
// Если чистый запрос тизера, просто вытираем tparam
$item = preg_replace('/\[tparam:([0-9]+)\]/', '', $item);
}
// Блок для проверки передачи параметров тизеру
/*
if (count($params_of_teaser[$tparams_id]))
{
Debug::echo($params_of_teaser);
Debug::echo($row_Id_mas);
Debug::echo($item, true);
}
*/
$item = str_replace('[tag:domain]', getSiteUrl(), $item);
$link = rewrite_link('index.php?id=' . $row->Id . '&doc=' . (empty($row->document_alias) ? prepare_url($row->document_title) : $row->document_alias));
$item = str_replace('[tag:link]', $link, $item);
$item = str_replace('[tag:docid]', $row->Id, $item);
$item = str_replace('[tag:docitemnum]', $req_item_num, $item);
$item = str_replace('[tag:adminlink]', 'index.php?do=docs&action=edit&rubric_id=' . $row->rubric_id . '&Id=' . $row->Id . '&cp=' . session_id() . '', $item);
$item = str_replace('[tag:doctitle]', stripslashes(htmlspecialchars_decode($row->document_title)), $item);
$item = str_replace('[tag:docparent]', $row->document_parent, $item);
$item = str_replace('[tag:doclang]', $row->document_lang, $item);
$item = str_replace('[tag:docdate]', pretty_date(strftime(DATE_FORMAT, $row->document_published)), $item);
$item = str_replace('[tag:doctime]', pretty_date(strftime(TIME_FORMAT, $row->document_published)), $item);
$item = str_replace('[tag:humandate]', human_date($row->document_published), $item);
$item = preg_replace_callback(
'/\[tag:date:([a-zA-Z0-9-. \/]+)\]/',
create_function('$m','return translate_date(date($m[1], '.$row->document_published.'));
'),
$item
);
if (preg_match('/\[tag:docauthor]/u', $item))
{
$item = str_replace('[tag:docauthor]', get_username_by_id($row->document_author_id), $item);
}
$item = str_replace('[tag:docauthorid]', $row->document_author_id, $item);
$item = preg_replace_callback(
'/\[tag:docauthoravatar:(\d+)\]/',
create_function(
'$m',
'return getAvatar('.intval($row->document_author_id).', $m[1]);'
),
$item
);
if (isset($use_cache) && $use_cache == 1)
{
// Кеширование элементов запроса
if(! file_exists(dirname($cachefile_docid)))
@mkdir(dirname($cachefile_docid), 0777, true);
file_put_contents($cachefile_docid, $item);
}
}
else
{
$item = file_get_contents($cachefile_docid);
}
$item = str_replace('[tag:docviews]', $row->document_count_view, $item);
$item = str_replace('[tag:doccomments]', isset($row->nums) ? $row->nums : '', $item);
unset($row);
return $item;
}
/**
* Обработка тега запроса.
* Возвращает список документов удовлетворяющих параметрам запроса
* оформленный с использованием шаблона
*
* @param int $id идентификатор запроса
* @return string
*/
function request_parse($id, $params = array())
{
global $AVE_Core, $AVE_DB, $request_documents;
// Если id пришёл из тега, берём нужную часть массива
if (is_array($id))
$id = $id[1];
$t = array();
$a = array();
$v = array();
// Получаем информацию о запросе
$request = $AVE_DB->Query("
SELECT
*
FROM
" . PREFIX . "_request
WHERE
" . (is_numeric($id) ? 'Id' : 'request_alias') . " = '" . $id . "'
")->FetchRow();
// Выходим, если нет запроса
if (! is_object($request))
return '';
// Фиксируем время начала генерации запроса
Debug::startTime('request_' . $id);
// Массив для полей SELECT
$request_select = array();
// Массив для присоединения таблиц JOIN
$request_join = array();
// Массив для добавления условий WHERE
$request_where = array();
// Массив для сортировки результатов ORDER BY
$request_order = array();
// Массив для сортировки результатов ORDER BY
$request_order_fields = array();
$request_order_str = '';
$request_select_str = '';
// Сортировка по полям из переданных параметров
if (empty($params['SORT']) && ! empty($_REQUEST['requestsort_' . $id]) && ! is_array($_REQUEST['requestsort_' . $id]))
{
// Разрешаем перебор полей для сортировки через ";"
$sort = explode(';', $_REQUEST['requestsort_'.$id]);
foreach($sort as $v)
{
$v1 = explode('=', $v);
// Если хотим сортировку DESC то пишем alias = 0
$params['SORT'][$v1[0]] = (isset($v1[1]) && $v1[1] == 0
? 'DESC'
: 'ASC');
}
}
// Сортировка по полям
if (! empty($params['SORT']) && is_array($params['SORT']))
{
foreach($params['SORT'] as $fid => $sort)
{
if (is_numeric($fid))
$fid = (int)get_field_num($request->rubric_id, $fid);
if ((int)$fid > 0)
{
$sort = strtolower($sort);
$request_join[$fid] = " if (preg_match('t[]'))?>=(! isset(\$t[$fid])) ? \"LEFT JOIN " . PREFIX . "_document_fields AS t$fid ON (t$fid.document_id = a.Id AND t$fid.rubric_field_id='$fid')\" : ''?>";
$asc_desc = strpos(strtolower($sort),'asc') !== false ? 'ASC' : 'DESC';
$request_order['field-'.$fid] = "t$fid.field_value " . $asc_desc;
$request_order_fields[] = $fid;
}
else
{
$asc_desc = strpos(strtolower($sort),'asc') !== false ? 'ASC' : 'DESC';
$request_order[$param] = "$fid " . $asc_desc;
}
}
}
// Сортировка по полю из настроек (только если не передана другая в параметрах)
elseif ($request->request_order_by_nat)
{
$fid = (int)$request->request_order_by_nat;
// Добавляем с учётом переменной $t из условий, чтобы не выбирать те же таблиы заново - это оптимизирует время
$request_join[$fid] = "= (! isset(\$t[$fid])) ? \"LEFT JOIN " . PREFIX . "_document_fields AS t$fid ON (t$fid.document_id = a.Id AND t$fid.rubric_field_id='$fid')\" : ''?>";
$request_order['field-' . $fid] = "t$fid.field_value " . $request->request_asc_desc;
$request_order_fields[] = $fid;
}
// Вторичная сортировка по параметру документа - добавляем в конец сортировок
if (! empty($params['RANDOM']))
{
$request_order['sort'] = ($params['RANDOM'] == 1)
? 'RAND()'
: '';
}
elseif ($request->request_order_by)
{
$request_order['sort'] = ($request->request_order_by == 'RAND()')
? 'RAND()'
: 'a.' . $request->request_order_by . ' ' . $request->request_asc_desc;
}
// Заменяем field_value на field_number_value во всех полях для сортировки, если поле числовое
if (! empty($request_order_fields))
{
$sql_numeric = $AVE_DB->Query("
SELECT
Id
FROM
" . PREFIX . "_rubric_fields
WHERE
Id IN (" . implode(',', $request_order_fields) . ")
AND
rubric_field_numeric = '1'
");
if ($sql_numeric->_result->num_rows > 0)
{
while ($fid = (int)$sql_numeric->FetchRow()->Id)
$request_order['field-' . $fid] = str_replace('field_value','field_number_value', $request_order['field-' . $fid]);
}
}
// Статус: если в параметрах, то его ставим. иначе выводим только активные доки
$request_where[] = "a.document_status = '" . ((isset($params['STATUS']))
? (int)$params['STATUS']
: '1') . "'";
// Не выводить текущий документ
if ($request->request_hide_current)
$request_where[] = "a.Id != '" . get_current_document_id() . "'";
// Язык
if ($request->request_lang)
$request_where[] = "a.document_lang = '" . $_SESSION['user_language'] . "'";
// Дата публикации документов
if (get_settings('use_doctime'))
$request_where[] = "a.document_published <= UNIX_TIMESTAMP() AND (a.document_expire = 0 OR a.document_expire >= UNIX_TIMESTAMP())";
// Условия запроса
// если используется выпадающий список, получаем строку без сохранения
if (! empty($_POST['req_' . $id]) || !empty($_SESSION['doc_' . $AVE_Core->curentdoc->Id]['req_' . $id]))
$where_cond = request_get_condition_sql_string($request->Id, false);
// если условия пустые, получаем строку с сохранением её в бд
elseif (! $request->request_where_cond)
$where_cond = request_get_condition_sql_string($request->Id, true);
// иначе, берём из запроса
else $where_cond = unserialize($request->request_where_cond);
$where_cond['from'] = (isset($where_cond['from']))
? str_replace('%%PREFIX%%', PREFIX, $where_cond['from'])
: '';
if (isset($where_cond['where'])) $request_where[] = $where_cond['where'];
// Родительский документ
if (isset($params['PARENT']) && (int)$params['PARENT'] > 0)
$request_where[] = "a.document_parent = '" . (int)$params['PARENT'] . "'";
// Автор
// Если задано в параметрах
if (isset($params['USER_ID']))
$user_id = (int)$params['USER_ID'];
// Если стоит галка, показывать только СВОИ документы в настройках
// Аноним не увидит ничего, так как 0 юзера нет
elseif ($request->request_only_owner == '1')
$user_id = (int)$_SESSION['user_id'];
// Если что-то добавили, пишем
if (isset($user_id))
$request_where[] = "a.document_author_id = '" . $user_id . "'";
// Произвольные условия WHERE
if (isset($params['USER_WHERE']) && $params['USER_WHERE'] > '')
{
if (is_array($params['USER_WHERE']))
$request_where = array_merge($request_where,$params['USER_WHERE']);
else
$request_where[] = $params['USER_WHERE'];
}
// Готовим строку с условиями
array_unshift($request_where,"
a.Id != '1' AND a.Id != '" . PAGE_NOT_FOUND_ID . "' AND
a.rubric_id = '" . $request->rubric_id . "' AND
a.document_deleted != '1'");
$request_where_str = '(' . implode(') AND (',$request_where) . ')';
// Количество выводимых доков
$params['LIMIT']=(! empty($params['LIMIT'])
? $params['LIMIT']
: (!empty($_REQUEST['requestlimiter_'.$id])
? $_REQUEST['requestlimiter_'.$id]
: (int)$request->request_items_per_page));
$limit = (isset($params['LIMIT']) && is_numeric($params['LIMIT']) && $params['LIMIT'] > '')
? (int)$params['LIMIT']
: (int)$request->request_items_per_page;
$start = (isset($params['START']))
? (int)$params['START']
: (($request->request_show_pagination == 1)
? get_current_page('apage') * $limit - $limit
: 0);
$limit_str = ($limit > 0)
? "LIMIT " . $start . "," . $limit
: '';
// Готовим строку с сортировкой
if ($request_order)
$request_order_str = "ORDER BY " . implode(', ',$request_order);
// Готовим строку с полями
if ($request_select)
$request_select_str = ',' . implode(",\r\n",$request_select);
unset($a, $t, $v);
// Составляем запрос к БД
$sql = " ?>
SELECT STRAIGHT_JOIN SQL_CALC_FOUND_ROWS
a.Id,
a.rubric_id,
a.document_title,
a.document_parent,
a.document_alias,
a.document_published,
a.document_expire,
a.document_changed,
a.document_author_id,
a.document_in_search,
a.document_status,
a.document_count_print,
a.document_count_view,
a.document_linked_navi_id,
a.document_lang
" . $request_select_str . "
FROM
" . $where_cond['from'] . "
" . (isset($params['USER_FROM']) ? $params['USER_FROM'] : '') . "
" . PREFIX . "_documents AS a
" . implode(' ', $request_join) . "
" . (isset($params['USER_JOIN']) ? $params['USER_FROM'] : '') . "
WHERE
" . $request_where_str . "
GROUP BY a.Id
" . $request_order_str . "
" . $limit_str . "
";
$sql_request = eval2var($sql);
unset($sql);
// Убираем дубли в выборе полей
foreach(array_keys($request_join) AS $key)
{
$search = PREFIX . '_document_fields AS t' . $key . ',';
if (preg_match('/' . $search . '/', $sql_request) > 0)
{
$sql_request = str_replace($search, '', $sql_request);
}
}
// Если просили просто показать сформированный запрос
if ((isset($params['DEBUG']) && $params['DEBUG'] == 1) || $request->request_show_sql == 1)
{
$return = Debug::_print($sql_request);
return $return;
}
// Выполняем запрос к бд
$sql = $AVE_DB->Query($sql_request, (int)$request->request_cache_lifetime, 'rub_' . $request->rubric_id);
// Если просили просто вернуть запрос, возвращаем результат
if (isset($params['RETURN_SQL']) && $params['RETURN_SQL'] == 1)
return $sql;
// Если есть вывод пагинации, то выполняем запрос на получение кол-ва элементов
if ($request->request_show_pagination == 1 || (isset($params['SHOW']) && $params['SHOW'] == 1))
{
$num_items = $AVE_DB->NumAllRows($sql_request, (int)$request->request_cache_lifetime, 'rub_' . $request->rubric_id);
}
else
{
$num_items = $AVE_DB->GetFoundRows();
}
unset($sql_request);
// Приступаем к обработке шаблона
$main_template = $request->request_template_main;
//-- Если кол-во элементов больше 0
if ($num_items > 0)
{
$main_template = preg_replace('/\[tag:if_empty](.*?)\[\/tag:if_empty]/si', '', $main_template);
$main_template = str_replace (array('[tag:if_notempty]','[/tag:if_notempty]'), '', $main_template);
}
else
{
$main_template = preg_replace('/\[tag:if_notempty](.*?)\[\/tag:if_notempty]/si', '', $main_template);
$main_template = str_replace (array('[tag:if_empty]','[/tag:if_empty]'), '', $main_template);
}
$pagination = '';
// Кол-во страниц
$num_pages = ($limit > 0)
? ceil($num_items / $limit)
: 0;
// Собираем пагинацию, еслиесть указание ее выводить
if ($request->request_show_pagination == 1 || (isset($params['SHOW']) && $params['SHOW'] == 1))
{
// Если в запросе пришел номер страницы и он больше, чем кол-во страниц
// Делаем перенаправление
if (isset($_REQUEST['apage']) && is_numeric($_REQUEST['apage']) && $_REQUEST['apage'] > $num_pages)
{
$redirect_link = rewrite_link('index.php?id=' . $AVE_Core->curentdoc->Id
. '&doc=' . (empty($AVE_Core->curentdoc->document_alias)
? prepare_url($AVE_Core->curentdoc->document_title)
: $AVE_Core->curentdoc->document_alias)
. ((isset($_REQUEST['artpage']) && is_numeric($_REQUEST['artpage']))
? '&artpage=' . $_REQUEST['artpage']
: '')
. ((isset($_REQUEST['page']) && is_numeric($_REQUEST['page']))
? '&page=' . $_REQUEST['page']
: ''));
header('Location:' . $redirect_link);
exit;
}
// Запоминаем глобально
@$GLOBALS['page_id'][$_REQUEST['id']]['apage'] = (@$GLOBALS['page_id'][$_REQUEST['id']]['apage'] > $num_pages
? @$GLOBALS['page_id'][$_REQUEST['id']]['apage']
: $num_pages);
$pagination = '';
if ($num_pages > 1)
{
$queries = '';
// Добавляем GET-запрос в пагинацию если пришло ADD_GET
// или указанов настройках запроса
if ($request->request_use_query == 1 || (isset($params['ADD_GET']) && $params['ADD_GET'] == 1))
$queries = ($_SERVER['QUERY_STRING'])
? '?' . $_SERVER['QUERY_STRING']
: '';
$pagination = 'index.php?id='
. $AVE_Core->curentdoc->Id
. '&doc=' . (empty($AVE_Core->curentdoc->document_alias)
? prepare_url($AVE_Core->curentdoc->document_title)
: $AVE_Core->curentdoc->document_alias)
. '&apage={s}'
. ((isset($_REQUEST['artpage']) && is_numeric($_REQUEST['artpage']))
? '&artpage=' . $_REQUEST['artpage']
: '')
. ((isset($_REQUEST['page']) && is_numeric($_REQUEST['page']))
? '&page=' . $_REQUEST['page']
: '')
// Добавляем GET-запрос в пагинацию
. clean_php($queries)
;
// ID пагинации
$pagination_id = (isset($params['PAGINATION']) && $params['PAGINATION'] > 0)
? $params['PAGINATION']
: $request->request_pagination;
// Собираем пагинацию
$pagination = AVE_Paginations::getPagination($num_pages, 'apage', $pagination, $pagination_id);
// Костыли для Главной страницы
$pagination = str_ireplace('"//"', '"/"', str_ireplace('///', '/', rewrite_link($pagination)));
$pagination = str_ireplace('"//' . URL_SUFF . '"', '"/"', $pagination);
}
}
// Элементы запроса
$rows = array();
// id найденных документов
$request_documents = array();
while ($row = $sql->FetchRow())
{
// Собираем Id документов
array_push($request_documents, $row->Id);
// Собираем оставшуюся информацию
array_push($rows, $row);
}
// Обрабатываем шаблоны элементов
$items = '';
$x = 0;
$items_count = count($rows);
global $req_item_num, $use_cache;
$use_cache = $request->request_cache_elements;
$item = '';
foreach ($rows as $row)
{
$x++;
$last_item = ($x == $items_count ? true : false);
$item_num = $x;
$req_item_num = $item_num;
$item = showrequestelement($row, $request->request_template_item);
$item = '<'.'?php $item_num='.var_export($item_num,1).'; $last_item='.var_export($last_item,1).'?'.'>'.$item;
$item = 'Id . ';?>' . $item;
$item = str_replace('[tag:if_first]', '<'.'?php if(isset($item_num) && $item_num===1) { ?'.'>', $item);
$item = str_replace('[tag:if_not_first]', '<'.'?php if(isset($item_num) && $item_num!==1) { ?'.'>', $item);
$item = str_replace('[tag:if_last]', '<'.'?php if(isset($last_item) && $last_item) { ?'.'>', $item);
$item = str_replace('[tag:if_not_last]', '<'.'?php if(isset($item_num) && !$last_item) { ?'.'>', $item);
$item = preg_replace('/\[tag:if_every:([0-9-]+)\]/u', '<'.'?php if(isset($item_num) && !($item_num % $1)){ '.'?'.'>', $item);
$item = preg_replace('/\[tag:if_not_every:([0-9-]+)\]/u', '<'.'?php if(isset($item_num) && ($item_num % $1)){ '.'?'.'>', $item);
$item = str_replace('[tag:/if]', '<'.'?php } ?>', $item);
$item = str_replace('[tag:if_else]', '<'.'?php }else{ ?>', $item);
$items .= $item;
}
// Обрабатываем теги запроса
// Парсим теги визуальных блоков
$main_template = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $main_template);
// Парсим теги системных блоков
$main_template = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_sysblock', $main_template);
//-- Заменяем тег пагинации на пагинацию
$main_template = str_replace('[tag:pages]', $pagination, $main_template);
$main_template = preg_replace_callback(
'/\[tag:date:([a-zA-Z0-9-. \/]+)\]/',
create_function('$m','return translate_date(date($m[1], '.$AVE_Core->curentdoc->document_published.'));
'),
$main_template
);
$main_template = str_replace('[tag:humandate]', human_date($AVE_Core->curentdoc->document_published), $main_template);
$main_template = str_replace('[tag:docdate]', pretty_date(strftime(DATE_FORMAT, $AVE_Core->curentdoc->document_published)), $main_template);
$main_template = str_replace('[tag:doctime]', pretty_date(strftime(TIME_FORMAT, $AVE_Core->curentdoc->document_published)), $main_template);
$main_template = str_replace('[tag:domain]', getSiteUrl(), $main_template);
if (preg_match('/\[tag:docauthor]/u', $item))
{
$main_template = str_replace('[tag:docauthor]', get_username_by_id($AVE_Core->curentdoc->document_author_id), $main_template);
}
//-- Общее число элементов запроса
$main_template = str_replace('[tag:doctotal]', $num_items, $main_template);
//-- Показано элементов запроса на странице
$main_template = str_replace('[tag:doconpage]', $x, $main_template);
//-- Номер страницы пагинации
$main_template = str_replace('[tag:pages:curent]', get_current_page('apage'), $main_template);
//-- Общее кол-во страниц пагинации
$main_template = str_replace('[tag:pages:total]', $num_pages, $main_template);
$main_template = str_replace('[tag:pagetitle]', stripslashes(htmlspecialchars_decode($AVE_Core->curentdoc->document_title)), $main_template);
$main_template = str_replace('[tag:alias]', (isset($AVE_Core->curentdoc->document_alias) ? $AVE_Core->curentdoc->document_alias : ''), $main_template);
// Возвращаем параметр документа из БД
$main_template = preg_replace_callback('/\[tag:doc:([a-zA-Z0-9-_]+)\]/u',
function ($match)
{
return isset($row->{$match[1]})
? $row->{$match[1]}
: null;
},
$main_template
);
// Если пришел вызов на активацию языковых файлов
$main_template = preg_replace_callback(
'/\[tag:langfile:([a-zA-Z0-9-_]+)\]/u',
function ($match)
{
global $AVE_Template;
return $AVE_Template->get_config_vars($match[1]);
},
$main_template
);
// Вставляем элементы запроса
$return = str_replace('[tag:content]', $items, $main_template);
// Парсим тег [hide]
$return = parse_hide($return);
$return = str_replace('[tag:path]', ABS_PATH, $return);
$return = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $return);
// Парсим модули
$return = $AVE_Core->coreModuleTagParse($return);
// Фиксируем время генерации запроса
$GLOBALS['block_generate'][] = array('REQUEST_' . $id => Debug::endTime('request_' . $id));
// Статистика
if ($request->request_show_statistic)
$return .= "
Найдено: $num_items
Показано: $items_count
Время генерации: " . Debug::endTime('request_' . $id) . " сек
Пиковое значение: ".number_format(memory_get_peak_usage()/1024, 0, ',', ' ') . ' Kb
';
return $return;
}
/**
* Функция получения содержимого поля для обработки в шаблоне запроса
*
* Пример использования в шаблоне:
*
*
*
*
*
* @param int $rubric_id идентификатор поля, для [tag:rfld:12][150] $rubric_id = 12
* @param int $document_id идентификатор документа к которому принадлежит поле.
* @param int $maxlength необязательный параметр, количество возвращаемых символов.
* Если данный параметр указать со знаком минус
* содержимое поля будет очищено от HTML-тегов.
* @return string
*/
function request_get_document_field_value($rubric_id, $document_id, $maxlength = 0)
{
if (!is_numeric($rubric_id) || $rubric_id < 1 || !is_numeric($document_id) || $document_id < 1) return '';
$document_fields = get_document_fields($document_id);
$field_value = isset($document_fields[$rubric_id]) ? $document_fields[$rubric_id]['field_value'] : '';
if (!empty($field_value))
{
$field_value = strip_tags($field_value, '
');
$field_value = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $field_value);
}
if (is_numeric($maxlength) && $maxlength != 0)
{
if ($maxlength < 0)
{
$field_value = str_replace(array("\r\n", "\n", "\r"), ' ', $field_value);
$field_value = strip_tags($field_value, "");
$field_value = preg_replace('/ +/', ' ', $field_value);
$maxlength = abs($maxlength);
}
$field_value = mb_substr($field_value, 0, $maxlength) . (strlen($field_value) > $maxlength ? '... ' : '');
}
return $field_value;
}
?>