Стандартно в Друпале можно установить показ информации об авторе документа и времени создания документа, но нельзя вывести информацию о том когда и кем был последний раз документ изменён. Этот сниппет поможет решить эту проблему.
Код нужно вставит в файл node.tpl.php:
$nodeid = $node->nid;
if (isset($nodeid)) {
$result = db_query("
SELECT u.name AS last_editor, u.uid AS the_uid
FROM node_revisions nr, users u
WHERE nr.uid = u.uid
AND nr.nid = " .$nodeid. "
ORDER BY timestamp DESC
LIMIT 1");
$resultset = db_fetch_object($result);
print 'Последние изменения внёс «<a href="user/' .$resultset->the_uid. '">'
.$resultset->last_editor.'</a>» '.format_date($changed, 'custom', "j.m.Y");}
?>
Данный код выведет сообщение следующего вида:
Последние изменения внёс «<a href="/user/UID">ПСЕВДОНИМ</a>» 14.07.2007
Для использования русского алфавита нужно сохранять файл в кодировке UTF-8 без BOM.
В Друпал 6 работает нормально, а в 7 нет, да еще и вся верстка нарушается.
Подскажите пожалуйста, что нужно исправить для Друпал 7?
Комментарии
Никто не поможет? Кода то, всего несколько строчек.
Да, здесь надо написать по другому
Я удивляюсь, что еще не написали. Несколько лет искал такой сниппет, и нашел - когда перешел на Друпал 7. Так что не могу им воспользоватся. Когда много материала, то очень удобно с ним.
несколько лет нужно было не искать, а самому изучить api друпала и написать сниппет
$query->fields('nr', array('uid','timestamp'));
$query->condition('nid', $node->nid);
$result=$query->execute()->fetchAssoc();
$user = user_load($result['uid']);
$user_name = theme('username', array('account' => $user));
$format_date = format_date($result['timestamp'], 'custom', 'j.m.Y');
print 'Последние изменения внес ' . $user_name . ' ' . $format_date;
но в шаблон ноды такой сниппет вставлять не нужно, нужно в template.php файл темы добавить
$node = $variables['node'];
$query = db_select('node_revision', 'nr');
$query->fields('nr', array('uid','timestamp'));
$query->condition('nid', $node->nid);
$result=$query->execute()->fetchAssoc();
$user = user_load($result['uid']);
$user_name = theme('username', array('account' => $user));
$format_date = format_date($result['timestamp'], 'custom', 'j.m.Y');
$variables['last_update'] = 'Последние изменения внес ' . $user_name . ' ' . $format_date;
}
и потом в node.tpl.php в нужном месте
<?php print $last_update; ?>
drupby большое спасибо!
Вот только не понятно - куда вставлять? Вы привели три части кода.
Перепробовал кучу вариантов - ничего не получилось.
Такое выходит внизу или вверху страницы:
<?phpfunction ИМЯТЕМЫ_preprocess_node(&$variables) { $node = $variables['node']; $query = db_select('node_revision', 'nr'); $query->fields('nr', array('uid','timestamp')); $query->condition('nid', $node->nid); $result=$query->execute()->fetchAssoc(); $user = user_load($result['uid']); $user_name = theme('username', array('account' => $user)); $format_date = format_date($result['timestamp'], 'custom', 'j.m.Y'); $variables['last_update'] = 'Последние изменения внес ' . $user_name . ' ' . $format_date;?>
И такое:
<?phpNotice: Undefined variable: last_update в функции include() (строка 32 в файле Z:\home\site.ru\www\sites\all\themes\danland\node.tpl.php)?>
Подскажите пожалуйста поточнее, куда код вставлять.
заменить на имя используемой темы
Анатолий помогите пожалуйста. Ничего у меня с этим сниппетом не получилось.
Вы дали 3 кода.
1 код. Куда его вставлять: в какой файл и в каое место?
2 код. Куда его вставлять: в какой файл и в каое место?
3 код. В node.tpl.php в нужном месте. Можно это нужное место указать. Файл небольшой, вроде бы везде перепробовал, не получается. А может где и попал правильно, но из-за неправильного расположения предыдущего кода не получилось. Если укажете куда, могу выслать два своих шаблона.
нужно в template.php файл темы добавить
$node = $variables['node'];
$query = db_select('node_revision', 'nr');
$query->fields('nr', array('uid','timestamp'));
$query->condition('nid', $node->nid);
$result=$query->execute()->fetchAssoc();
$user = user_load($result['uid']);
$user_name = theme('username', array('account' => $user));
$format_date = format_date($result['timestamp'], 'custom', 'j.m.Y');
$variables['last_update'] = 'Последние изменения внес ' . $user_name . ' ' . $format_date;
}
и потом в node.tpl.php в нужном месте
<?php print $last_update; ?>
drupby вы писали:
нужно в template.php файл темы добавить
Добавил и получил внизу страницы:
<?phpfunction danland_preprocess_node(&$variables) { $node = $variables['node']; $query = db_select('node_revision', 'nr'); $query->fields('nr', array('uid','timestamp')); $query->condition('nid', $node->nid); $result=$query->execute()->fetchAssoc(); $user = user_load($result['uid']); $user_name = theme('username', array('account' => $user)); $format_date = format_date($result['timestamp'], 'custom', 'j.m.Y'); $variables['last_update'] = 'Последние изменения внес ' . $user_name . ' ' . $format_date;?>
и потом в node.tpl.php в нужном месте
Где ни вставлю, появляется сообщение:
<?phpNotice: Undefined variable: last_update в функции include() (строка 24 в файле Z:\home\мойсайт.ru\www\sites\all\themes\danland\node.tpl.php).?>
меняется только номер строки.
Может ошибка кода?
содержимое template.php полностью выложи сюда
должно быть так
function danland_page_class($sidebar_first, $sidebar_second) {
if ($sidebar_first && $sidebar_second) {
$id = 'layout-type-2';
}
else if ($sidebar_first || $sidebar_second) {
$id = 'layout-type-1';
}
if(isset($id)) {
print ' id="'. $id .'"';
}
}
function danland_preprocess_html(&$vars) {
// Add conditional CSS for IE6.
drupal_add_css(path_to_theme() . '/style.ie6.css', array('group' => CSS_THEME, 'browsers' => array('IE' => 'IE 6', '!IE' => FALSE), 'preprocess' => FALSE));
}
function danland_preprocess_maintenance_page(&$variables) {
if (!$variables['db_is_active']) {
unset($variables['site_name']);
}
drupal_add_css(drupal_get_path('theme', 'danland') . '/maintenance.css');
drupal_add_js(drupal_get_path('theme', 'danland') . '/scripts/jquery.cycle.all.js');
}
if (drupal_is_front_page()) {
drupal_add_js(drupal_get_path('theme', 'danland') . '/scripts/jquery.cycle.all.js');
}
function danland_preprocess_node(&$variables) {
$node = $variables['node'];
$query = db_select('node_revision', 'nr');
$query->fields('nr', array('uid','timestamp'));
$query->condition('nid', $node->nid);
$result=$query->execute()->fetchAssoc();
$user = user_load($result['uid']);
$user_name = theme('username', array('account' => $user));
$format_date = format_date($result['timestamp'], 'custom', 'j.m.Y');
$variables['last_update'] = 'Последние изменения внес ' . $user_name . ' ' . $format_date;
}
Прошу прощения, но я вставлял код в файл page.tpl.php, а не в template.php. При вставке в template.php все равно не работает.
template.php
<?php
// $Id: template.php,v 1.10.4.3 2010/12/14 03:30:39 danprobo Exp $
function danland_page_class($sidebar_first, $sidebar_second) {
if ($sidebar_first && $sidebar_second) {
$id = 'layout-type-2';
}
else if ($sidebar_first || $sidebar_second) {
$id = 'layout-type-1';
}
if(isset(
$id)) {print ' id="'. $id .'"';
}
}
function
danland_preprocess_html(&$vars) {// Add conditional CSS for IE6.
drupal_add_css(path_to_theme() . '/style.ie6.css', array('group' => CSS_THEME, 'browsers' => array('IE' => 'IE 6', '!IE' => FALSE), 'preprocess' => FALSE));
}
function
danland_preprocess_maintenance_page(&$variables) {if (!$variables['db_is_active']) {
unset($variables['site_name']);
}
drupal_add_css(drupal_get_path('theme', 'danland') . '/maintenance.css');
drupal_add_js(drupal_get_path('theme', 'danland') . '/scripts/jquery.cycle.all.js');
}
if (
drupal_is_front_page()) {drupal_add_js(drupal_get_path('theme', 'danland') . '/scripts/jquery.cycle.all.js');
}?>
node.tpl.php
<?php
// $Id: node.tpl.php,v 1.3.2.1 2010/11/11 13:52:44 danprobo Exp $
?>
<div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
<?php print render($title_prefix); ?>
<?php if (!$page): ?>
<h2<?php print $title_attributes; ?> class="title">
<a href="<?php print $node_url; ?>"><?php print $title; ?></a>
</h2>
<?php endif; ?>
<?php print render($title_suffix); ?>
<?php if ($display_submitted): ?>
<div class="meta submitted">
<?php print $user_picture; ?>
<?php
print t('published by !username on !datetime',
array('!username' => $name, '!datetime' => $date));
?>
</div>
<?php endif; ?>
<div class="content clearfix"<?php print $content_attributes; ?>>
<?php
hide($content['comments']);
hide($content['links']);
print render($content);
?>
</div>
<?php
if ($teaser || !empty($content['comments']['comment_form'])) {
unset($content['links']['comment']['#links']['comment-add']);
}
// Only display the wrapper div if there are links.
$links = render($content['links']);
if ($links):
?>
<div class="links">
<?php print $links; ?>
</div>
<?php endif; ?>
<?php print render($content['comments']); ?>
</div>?>
тяжелый случай, я смотрю
вот тебе node.tpl.php и template.php в архиве
drupby спасибо за труды, но не работает. Появляется вот это:
<?phpNotice: Undefined variable: last_update в функции include() (строка 47 в файле Z:\home\kniga3000.ru\www\sites\all\themes\danland\node.tpl.php).?>
Хотел на всякий случай прикрепить файл page.tpl.php (может что-то несовместимо), но здесь ява капризничает и не грузит ни в чистом виде, ни *zip/
кеш нужно чистить
Заработало, спасибо! А я локальный сервер перезагружал, cron, страницы обновлял. Вот я вас помучал.