Автором страницы в GetSimple CMS считается пользователь, создавший или сохранивший страницу последним. Именем автора страницы является логин пользователя, который автоматически сохраняется в XML-документе страницы в поле author
. Стандартная функция, возвращающая значение поля author
для текущей страницы, отсутствует, поэтому для получения автора страницы в шаблоне оформления, следует обратиться к глобальной переменной $data_index->author
. При этом в GetSimple CMS предусмотрена возможность задания расширенного набора данных для пользователей - стандартно в GetSimple CMS 3.3.16 можно задать полное имя и адрес электронной почты. Имея доступ к этим данным, можно не ограничиваться только логином, а выводить расширенную информацию об авторе страницы в шаблоне оформления. Для этого потребуется добавить собственные функции в тему оформления.
Предлагаю рассмотреть примеры реализации таких функций: функция get_page_author_name()
возвращает полное имя автора текущей страницы, функция get_page_author_email()
возвращает адрес его электронной почты.
/**
* Get Page Author Name
*
* @uses $data_index
* @uses GSUSERSPATH
* @uses strip_decode
* @author Dmitry Yakovlev
*
* @param bool $echo Optional, default is true. False will 'return' value
* @return string Echos or returns page author name based on param $echo
*/
function get_page_author_name($echo = true) {
global $data_index;
$author = strip_decode($data_index->author);
$usrFile = GSUSERSPATH.$author.'.xml';
if (file_exists($usrFile)) {
$data = getXML($usrFile);
$name = stripslashes($data->NAME);
} else {
$name = '';
}
if ($echo) {
echo $name;
} else {
return $name;
}
}
/**
* Get Page Author Email
*
* @uses $data_index
* @uses GSUSERSPATH
* @uses strip_decode
* @author Dmitry Yakovlev
*
* @param bool $echo Optional, default is true. False will 'return' value
* @param bool $obfuscate Optional, default is false. True will obfuscate value
* @return string Echos obfuscated or returns clean page author email based on param $echo
*/
function get_page_author_email($echo = true, $obfuscate = false) {
global $data_index;
$author = strip_decode($data_index->author);
$usrFile = GSUSERSPATH.$author.'.xml';
if (file_exists($usrFile)) {
$data = getXML($usrFile);
$email = stripslashes($data->EMAIL);
} else {
$email = '';
}
if ($email && $obfuscate) {
$obfuscated = '';
foreach(str_split($email) as $letter) {
switch(rand(1, 3)) {
case 1:
$obfuscated .= $letter;
break;
case 2:
$obfuscated .= '&#' . ord($letter) . ';';
break;
case 3:
$obfuscated .= '&#x' . dechex(ord($letter)) . ';';
break;
}
}
$email = $obfuscated;
}
if ($echo) {
echo $email;
} else {
return $email;
}
}
Минус реализации приведённых функций - обращение к файлу XML-документа пользователя GetSimple CMS, соответствующего автору страницы, выполняется при вызове каждой из них. Этот момент можно оптимизировать, использовав глобальную переменную темы оформления, сохранив в неё XML-объект при первом обращении к XML-документу. Кроме того, так как существует возможность добавлять при помощи плагинов собственные поля для расширения описания пользователя, удобно использовать функцию, возвращающую значение поля по его имени.
/**
* Get Page Author Profile Field
*
* @uses $data_index
* @uses $data_author
* @uses GSUSERSPATH
* @uses strip_decode
* @author Dmitry Yakovlev
*
* @param string $field Required. Name of author profile field
* @param bool $echo Optional, default is true. False will 'return' value
* @return string Echos or returns author profile field value on param $echo
*/
function get_page_author_field($field, $echo = true) {
global $data_index;
global $data_author;
$value = '';
if (!$data_author) {
$author = strip_decode($data_index->author);
$usrFile = GSUSERSPATH.$author.'.xml';
if (file_exists($usrFile)) {
$data_author = getXML($usrFile);
unset($data_author->PWD);
}
}
if ($data_author) {
$value = stripslashes($data_author->$field);
}
if ($echo) {
echo $value;
} else {
return $value;
}
}
Теперь функцию для получения адреса электронной почты автора можно переписать так:
/**
* Get Page Author Email
*
* @uses get_page_author_field
* @author Dmitry Yakovlev
*
* @param bool $echo Optional, default is true. False will 'return' value
* @param bool $obfuscate Optional, default is false. True will obfuscate value
* @return string Echos obfuscated or returns clean page author email based on param $echo
*/
function get_page_author_email($echo = true, $obfuscate = false) {
$email = get_page_author_field('EMAIL', false);
if ($email && $obfuscate) {
$obfuscated = '';
foreach(str_split($email) as $letter) {
switch(rand(1, 3)) {
case 1:
$obfuscated .= $letter;
break;
case 2:
$obfuscated .= '&#' . ord($letter) . ';';
break;
case 3:
$obfuscated .= '&#x' . dechex(ord($letter)) . ';';
break;
}
}
$email = $obfuscated;
}
if ($echo) {
echo $email;
} else {
return $email;
}
}
Используя рассмотренные функции, вывести расширенную информацию о странице можно так:
<p>Page was updated: <?php get_page_date('Y-m-d'); ?> by <a href="mailto:<?php get_page_author_email(true, true); ?>"><?php get_page_author_field('NAME', true); ?></a></p>