Знакомая каждому опытному пользователю функция GetSimple CMS get_page_content()
выводит содержание страницы в шаблоне оформления. Но при разработке возможны варианты, когда требуется не вывести содержание, а сохранить его в переменную для дальнейшего использования.
Первый вариант, приходящий в голову - использовать глобальную переменную $content
. До вызова функции get_page_content()
в этой глобальной переменной хранится “сырое” содержание страницы - содержание в том виде, в котором оно было сохранено в XML-документе страницы. Поэтому оно может отличаться от ожидаемого, что можно проверить при помощи следующего PHP-кода:
<?php var_dump($content); ?>
Это происходит потому что функция get_page_content()
не просто выводит содержимое глобальной переменной $content
, но и выполняет ряд дополнительных действий:
- вызывает хук content-top;
- вызывает функцию
strip_decode()
; - вызывает фильтр content;
- вызывает функцию
strip_content()
; - вызывает хук content-bottom.
Для того, чтобы вместо вывода сохранить результат выполнения функции get_page_content()
в переменой, следует использовать контроль вывода:
<?php
ob_start();
get_page_content();
$content = ob_get_contents();
ob_end_clean();
?>
В результате выполнения кода в переменной $content
будет сохранён полный вывод функции get_page_content()
. Включение в него результата вызова хуков content-top и content-bottom может быть нежелательно, поэтому предлагаю использовать следующую универсальную функцию.
<?php
/**
* Return Page Content
*
* @param boolean $hook Enable or disable hooks
* @uses $content
* @uses exec_action
* @uses exec_filter
* @uses strip_decode
*
* @return string Content of the page
*/
function return_page_content($hook = true) {
global $content;
ob_start();
get_page_content();
if ($hook) exec_action('content-top');
$content = strip_decode($content);
$content = exec_filter('content', $content);
if(getDef('GSCONTENTSTRIP', true)) $content = strip_content($content);
echo $content;
if ($hook) exec_action('content-bottom');
$content = ob_get_contents();
ob_end_clean();
return $content;
}
?>
Приведённая функция, так же, как функция get_page_content()
, изменяет глобальную переменную $content
, поэтому в шаблоне оформления должна вызываться только одна из них и только один раз.