Наши заметки о MODx
В этом разделе мы будем собирать небольшую копилку секретов по работе с системой управления контентом сайта (CMS) MODx. Эти заметки ни в коем случае не претендуют на лавры документации. На нашем сайте тема MODx вообще занимает небольшой уголок, и эти материалы мы размещаем только потому, что по роду основной работы нам приходится оказывать техническую поддержку нескольким десяткам организаций, использующих наши прототипы сайтов. В то же время кое-что может пригодиться и другим людям.
Мы не претендуем на изложение "истины в последней инстанции". Наверняка в этих заметках гуру MODx найдут неточности и ошибки. Мы будем очень благодарны, если на это нам укажут в комментариях.
В заметках мы стараемся не просто сразу приводить готовое правильное решение, но и показываем, как мы набивали шишки в процессе поиска.

Как подменить имя автора и дату публикации


Довольно часто возникает необходимость изменить имя автора и дату публикации документа. Имя автора автоматически заносится по имени редактора, создавшего страницу и сохраняется в базе данных. Даты также хранятся в базе данных в виде даты создания (createdon), редактирования (editedon), начала публикации (pub_date) и снятия с публикации (unpub_date). Последние две даты обычно используются для автоматического показа или снятия с показа документа. А если мы пишем документ от чужого имени, да еще "задним числом"?

Для решения этой задачи мы сделали сниппет 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`! ]

Результат:

Это писал Сергей Зуев
29.01.2007


 

Вызов

 [ !ru_AuthorAndDate?tpl=`cad_author_and_date` ! ]

Результат:

Зуев С.А.
29.01.2007


Вызов

 [ !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;
?>
04-02-2008 15:09:10



    Содержание раздела «Подмена автора и даты»:
Комментарии любых посетителей

Написать комментарий


 
ShaggyDoc
Комментарий
А как же с UTF
Реплика №1: 03.01.2009, 13:08:10
Вот в исходнике str_replace. А не mbstr_replace?