Для решения этой задачи мы сделали сниппет ru_AuthorAndDate.
При вызове без параметров:
Зуев С.А.. 29.01.2007
Выводится имя редактора и дата последнего изменения. Такой вызов зашит в шаблон страниц этого сайта, результаты видны в самой нижней строке перед знаком копирайта.
Но в сниппет могут быть переданы аргументы:
dateFormat - строка формата вывода даты, например dateFormat=`%d-%m-%Y года`. По умолчанию принимается `%d-%m-%Y в %H:%M`;
usedDate - одна из возможных строк: `editedon` (по умолчанию), `createdon`, `pub_date`. Если хотим опубликовать документ "задним числом", устанавливает дату начала публикации, и передаем аргументом usedDate=`pub_date`;
tpl - имя чанка для вывода информации об авторе и дате. Чанк создается в обычном порядке, в нем могут быть использованы подстановки +Author+ и +Date+;
author - произвольная строка вместо имени автора из базы, author=`написал какой-то графоман`;
DateString - произвольная строка, заменяющая настоящую дату, например DateString=`когда сайт был без присмотра`.
Разумеется, вызовы сниппета с аргументами нужно делать в конетенте конкретной страницы.
Примеры:
Вызов
[ !ru_AuthorAndDate?tpl=`cad_author_and_date` &author=`Это писал Сергей Зуев` &usedDate=`pub_date`! ]
Результат:
Вызов
[ !ru_AuthorAndDate?tpl=`cad_author_and_date` ! ]
Результат:
Вызов
[ !ru_AuthorAndDate?author=`Написал какой-то графоман` &DateString=`пока сайт был без присмотра`! ]
Результат: Написал какой-то графоман. пока сайт был без присмотра
Для полного счастья приводим код сниппета:
<?php
/*
Позволяет выводить автора и дату в произвольном значении, по шаблону или по умолчанию
Аргументы?
dateFormat - строка вывода даты
usedDate - из возможных: editedon (по умолчанию) createdon pub_date
tpl - имя чанка для вывода
author - строка вместо имени автора из базы
DateString - строка, заменяющая настоящую дату
*/
if(!isset($dateFormat)) {
$dateFormat="%d-%m-%Y в %H:%M";
}
if(!isset($usedDate)) {
$usedDate='createdon';
}
if(!isset($tpl))
{
$template = "<strong></strong>. ";
} else {
$template = $modx->getChunk($tpl);
}
$docInfo = $modx->getDocument($modx->documentIdentifier);
$authorid = $docInfo['createdby'];
if(!isset($DateString)) {
$createdon = strftime($dateFormat, $docInfo[$usedDate]);
} else {
$createdon = $DateString;
}
$tbl = $modx->getFullTableName('user_attributes');
$query = "SELECT fullname FROM $tbl WHERE $tbl.id = $authorid";
$rs = $modx->dbQuery($query);
$limit = $modx->recordCount($rs);
if(!isset($author))
{
if($limit==1) {
$resourceauthor = $modx->fetchRow($rs);
$authorname = $resourceauthor['fullname'];
}
} else {
$authorname=$author;
}
if (!$authorname == ""){
$output = str_replace("",$authorname,$template);
$output = str_replace("",$createdon,$output);
}
return $output;
?>
Написать комментарий
Реплика №1: 03.01.2009, 13:08:10