Сниппет Информация о последнем изменении страницы не работает. Решено

Аватар пользователя Sergey1917 Sergey1917 18 августа 2014 в 2:22

Стандартно в Друпале можно установить показ информации об авторе документа и времени создания документа, но нельзя вывести информацию о том когда и кем был последний раз документ изменён. Этот сниппет поможет решить эту проблему.

Код нужно вставит в файл node.tpl.php:

<?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?

Комментарии

Аватар пользователя Sergey1917 Sergey1917 21 августа 2014 в 0:07

Я удивляюсь, что еще не написали. Несколько лет искал такой сниппет, и нашел - когда перешел на Друпал 7. Так что не могу им воспользоватся. Когда много материала, то очень удобно с ним.

Аватар пользователя drupby drupby 21 августа 2014 в 2:36

"Sergey1917" wrote:
Я удивляюсь, что еще не написали. Несколько лет искал такой сниппет

несколько лет нужно было не искать, а самому изучить api друпала и написать сниппет

$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');
print 'Последние изменения внес ' . $user_name . ' ' . $format_date;

но в шаблон ноды такой сниппет вставлять не нужно, нужно в template.php файл темы добавить

function ИМЯТЕМЫ_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 в нужном месте

<?php print $last_update; ?>

Аватар пользователя Sergey1917 Sergey1917 21 августа 2014 в 3:13

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)?>

Подскажите пожалуйста поточнее, куда код вставлять.

Аватар пользователя Sergey1917 Sergey1917 21 августа 2014 в 11:24

Анатолий помогите пожалуйста. Ничего у меня с этим сниппетом не получилось.
Вы дали 3 кода.
1 код. Куда его вставлять: в какой файл и в каое место?
2 код. Куда его вставлять: в какой файл и в каое место?
3 код. В node.tpl.php в нужном месте. Можно это нужное место указать. Файл небольшой, вроде бы везде перепробовал, не получается. А может где и попал правильно, но из-за неправильного расположения предыдущего кода не получилось. Если укажете куда, могу выслать два своих шаблона.

Аватар пользователя drupby drupby 21 августа 2014 в 13:28

"Sergey1917" wrote:
Вы дали 3 кода.

нужно в template.php файл темы добавить

function ИМЯТЕМЫ_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 в нужном месте

<?php print $last_update; ?>

Аватар пользователя Sergey1917 Sergey1917 21 августа 2014 в 16:00

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).?>

меняется только номер строки.

Может ошибка кода?

Аватар пользователя drupby drupby 21 августа 2014 в 16:45

содержимое template.php полностью выложи сюда
должно быть так

<?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;
}

Аватар пользователя Sergey1917 Sergey1917 21 августа 2014 в 17:35

Прошу прощения, но я вставлял код в файл 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>?>

Аватар пользователя Sergey1917 Sergey1917 10 ноября 2015 в 11:49

drupby спасибо за труды, но не работает. Появляется вот это:
<?phpNotice: Undefined variable: last_update в функции include() (строка 47 в файле Z:\home\kniga3000.ru\www\sites\all\themes\danland\node.tpl.php).?>

Хотел на всякий случай прикрепить файл page.tpl.php (может что-то несовместимо), но здесь ява капризничает и не грузит ни в чистом виде, ни *zip/

Аватар пользователя Sergey1917 Sergey1917 21 августа 2014 в 19:18

Заработало, спасибо! А я локальный сервер перезагружал, cron, страницы обновлял. Вот я вас помучал.