Вот захотелось набраться наглости и сделать в панели редактирования документа дополнительное поле, позволяющее редактировать дату создания документа (createdon). Создавая документ задним числом, вы просто редактируете дату его создания, а по умолчанию естественно задается текущая дата. Итак нужно выполнить следующие шаги:
- в manager/actions/mutate_content.dynamic.php меняем
на// retain form values if template was changed
// edited to convert pub_date and unpub_date
// sottwell 02-09-2006
if ($formRestored == true || isset ($_REQUEST['newtemplate'])) {
$content = array_merge($content, $_POST);
$content["content"] = $_POST["ta"];
if (empty ($content["pub_date"])) {
unset ($content["pub_date"]);
} else {
$pub_date = $content['pub_date'];
list ($d, $m, $Y, $H, $M, $S) = sscanf($pub_date, "%2d-%2d-%4d %2d:%2d:%2d");
$pub_date = strtotime("$m/$d/$Y $H:$M:$S");
$content['pub_date'] = $pub_date;
}
if (empty ($content["unpub_date"])) {
unset ($content["unpub_date"]);
} else {
$unpub_date = $content['unpub_date'];
list ($d, $m, $Y, $H, $M, $S) = sscanf($unpub_date, "%2d-%2d-%4d %2d:%2d:%2d");
$unpub_date = strtotime("$m/$d/$Y $H:$M:$S");
$content['unpub_date'] = $unpub_date;
}
}// retain form values if template was changed
// edited to convert pub_date and unpub_date
// sottwell 02-09-2006
if ($formRestored == true || isset ($_REQUEST['newtemplate'])) {
$content = array_merge($content, $_POST);
$content["content"] = $_POST["ta"];
if (empty ($content["pub_date"])) {
unset ($content["pub_date"]);
} else {
$pub_date = $content['pub_date'];
list ($d, $m, $Y, $H, $M, $S) = sscanf($pub_date, "%2d-%2d-%4d %2d:%2d:%2d");
$pub_date = strtotime("$m/$d/$Y $H:$M:$S");
$content['pub_date'] = $pub_date;
}
if (empty ($content["unpub_date"])) {
unset ($content["unpub_date"]);
} else {
$unpub_date = $content['unpub_date'];
list ($d, $m, $Y, $H, $M, $S) = sscanf($unpub_date, "%2d-%2d-%4d %2d:%2d:%2d");
$unpub_date = strtotime("$m/$d/$Y $H:$M:$S");
$content['unpub_date'] = $unpub_date;
}
if (empty ($content["createdon"])) {
unset ($content["createdon"]);
} else {
$createdon = $content['createdon'];
list ($d, $m, $Y, $H, $M, $S) = sscanf($createdon, "%2d-%2d-%4d %2d:%2d:%2d");
$createdon = strtotime("$m/$d/$Y $H:$M:$S");
$content['createdon'] = $createdon;
}
} - добавляем в manager/actions/mutate_content.dynamic.php до строки 700(приблизительно, строка содержит <input name="pub_date">
<tr>
<td><span class="warning">Дата создания</span></td>
<td>
<?php
$timestamp = time();
?>
<input name="createdon" value="<?php echo $content['createdon']=="0" || !isset($content['createdon']) ? strftime("%d-%m-%Y %H:%M:%S", $timestamp) : strftime("%d-%m-%Y %H:%M:%S", $content['createdon']); ?>" onblur="documentDirty=true;" />
<a onclick="documentDirty=false; cal0.popup();" onmouseover="window.status='<?php echo $_lang['select_date']; ?>'; return true;" onmouseout="window.status=''; return true;" style="cursor:pointer; cursor:hand"><img src="media/style/<?php echo $manager_theme ? "$manager_theme/":""; ?>images/icons/cal.gif" width="16" height="16" border="0" alt="<?php echo $_lang['select_date']; ?>" /></a>
</td>
</tr> - добавляем в manager/actions/mutate_content.dynamic.php в самый конец файла, в после строки
... следующий код:<script type="text/javascript">
var cal0 = new calendar1(document.forms['mutate'].elements['createdon'], document.getElementById("pub_date_show"));
cal0.path="<?php echo str_replace("index.php", "media/", $_SERVER["PHP_SELF"]); ?>";
cal0.year_scroll = true;
cal0.time_comp = true; - добавляем в manager/processors/save_content.processor.php после строки "$hidemenu = intval($_POST['hidemenu']);":
$createdon = $_POST['createdon'];
list ($d, $m, $Y, $H, $M, $S) = sscanf($createdon, "%2d-%2d-%4d %2d:%2d:%2d"); //added by yentsun
$createdon = mktime($H, $M, $S, $m, $d, $Y); - в manager/processors/save_content.processor.php меняем sql-запрос, начинающийся с INSERT на
, блок$sql = "INSERT INTO $tblsc (introtext,content, pagetitle, longtitle, type, description, alias, link_attributes, isfolder, richtext, published, parent, template, menuindex, searchable, cacheable, createdby, createdon, editedby, editedon, publishedby, publishedon, pub_date, unpub_date, contentType, content_dispo, donthit, menutitle, hidemenu)
VALUES('" . $introtext . "','" . $content . "', '" . $pagetitle . "', '" . $longtitle . "', '" . $type . "', '" . $description . "', '" . $alias . "', '" . $link_attributes . "', '" . $isfolder . "', '" . $richtext . "', '" . $published . "', '" . $parent . "', '" . $template . "', '" . $menuindex . "', '" . $searchable . "', '" . $cacheable . "', '" . $modx->getLoginUserID() . "', " . $createdon . ", '" . $modx->getLoginUserID() . "', " . time() . ", " . $publishedby . ", " . $publishedon . ", '$pub_date', '$unpub_date', '$contentType', '$contentdispo', '$donthit', '$menutitle', '$hidemenu')";
на$sql = "UPDATE $tblsc SET introtext='$introtext', content='$content', pagetitle='$pagetitle', longtitle='$longtitle', type='$type', description='$description', alias='$alias', link_attributes='$link_attributes',
isfolder=$isfolder, richtext=$richtext, published=$published, pub_date=$pub_date, unpub_date=$unpub_date, parent=$parent, template=$template, menuindex='$menuindex',
searchable=$searchable, cacheable=$cacheable, editedby=" . $modx->getLoginUserID() . ", editedon=" . time() . ", publishedon=$publishedon, publishedby=$publishedby, contentType='$contentType', content_dispo='$contentdispo', donthit='$donthit', menutitle='$menutitle', hidemenu='$hidemenu' WHERE id=$id;";
(добавляем в хвост запроса строку createdon='$createdon')$sql = "UPDATE $tblsc SET introtext='$introtext', content='$content', pagetitle='$pagetitle', longtitle='$longtitle', type='$type', description='$description', alias='$alias', link_attributes='$link_attributes',
isfolder=$isfolder, richtext=$richtext, published=$published, pub_date=$pub_date, unpub_date=$unpub_date, parent=$parent, template=$template, menuindex='$menuindex',
searchable=$searchable, cacheable=$cacheable, editedby=" . $modx->getLoginUserID() . ", editedon=" . time() . ", publishedon=$publishedon, publishedby=$publishedby, contentType='$contentType', content_dispo='$contentdispo', donthit='$donthit', menutitle='$menutitle', hidemenu='$hidemenu', createdon='$createdon' WHERE id=$id;";
-----------------
Хотите запечатлеть важнейшие моменты в жизни? Воспользуйтесь свадебной фотографией Марины Салмановой.
12 комментариев:
О ура! Наконец-то личный блог про MODx. Пасибо - будем заглядовать
Поле с датой-то добавилось, но в ней выставляется 01-01-1970 03:00:00. При этом сортировка (в вызове стоит sortBy=`createdon`) происходит совершенно кувырком вне всякой логики. Например, есть три документа: 1, 2, 3. Я хочу расположить их в порядке 3,2,1. Меняю даты: соответственно, более ранний должен быть последним, а созданный недавно - первым. В итоге получаю что угодно, только не то, что нужно. Так вот.
Очень жаль что не заработало, видимо где то в статье я допустил ошибку. Вот, однако, файлы, взятые с работающего сервера (архив распаковать в корневую папку), MODx версии 0.9.6.1, американский сервер, поэтому в коде дописаны некоторые штуки для учета временной разницы: http://s31183.gridserver.com/createdon_field.rar
Спасибо, Макс. Заплатка вроде как работает. Я бегло протестил на локалхосте, вроде фурычит. Конечно, там у меня только три тестовых документа, не знаю, будет ли это работать с большим числом документов. Смущает дата создания. Надо как-то настроить собственный часовой пояс юзера, а то по умолчанию дата выставляется на 12 часов вперёд )) Но главное, что цель в общем достигнута. Отличная работа, спасибо.
все работает и сортируется, дата вставляется нужная. Спасибо!
Работает нормально, но при пересохранении документа, автоматически прибавляется один день. Как это вылечить?
если честно, я настраивал этот скрипт для работы на американском сервере и должен был (не помню где точно) прибавлять (или убавлять) 11 часов. Однако перед выкладыванием сюда, я эти прибавления убрал. Может где-то забыл... попробую найти
Спасибо, в архиве rar, в файле mutate_content.dynamic.php, в строках 716 и 717, надо убрать +39600. Теперь не прибавляет.
А кто-нибудь ставил на 0963 ?
Подскажите какие надо внести изменения...
Who knows where to download XRumer 5.0 Palladium?
Help, please. All recommend this program to effectively advertise on the Internet, this is the best program!
Попробовал, с первого раза не прокатило. Возился 2 часа, потом исправил запросе $sql = "UPDATE $tblsc переменную на $sql = "UPDATE $tbl_site_content и все заработало. Исправлял ТОЛЬКО В ЭТОМ ЗАПРОСЕ. Правда календарик не всплывает, да и фиг с ним. Руками подставить можно. Автору респект за титанический труд!
Отправить комментарий