管理メニュー画面のカスタマイズ

Events happening in the community are now at Drupal community events on www.drupal.org.
darta's picture

皆様はじめまして。

Drupalを最近はじめまして、本を見ながら苦戦させて頂いております。

コンテンツの管理にて登録済みのノード一覧が表示されますが、
ここに投稿時間を表示させたい場合、どのように手を入れていけばよいか
助言頂けますでしょうか。
(viewsモジュールは使用しない方向でお願いします)

また、作成済みコンテンツ(ノード)の複製を考えているのですが、
実現できるモジュールはありますでしょうか。

よろしくお願いします。

Comments

darta さん、 コンテンツの管理にて登録済みのノード一

jun784's picture

darta さん、

コンテンツの管理にて登録済みのノード一覧が表示されますが、
ここに投稿時間を表示させたい場合、どのように手を入れていけばよいか
助言頂けますでしょうか。
(viewsモジュールは使用しない方向でお願いします)

Viewsを使用しないとの事なので、

直接node.admin.incを弄ってみます。

node.admin.inc

以下のコードの
//ここから
//ここまで
を追加してみてください。

前後位置は検索と行数を参考に探してくださいね。

function node_admin_nodes() {
  ...
492行  $form['status'][$node->nid] =  array('#value' => ($node->status ? t('published') : t('not published')));
 //ここから
 $form['created'][$node->nid] =  array('#value' => date('Y/m/d H:i:s',$node->created));
  $form['changed'][$node->nid] =  array('#value' => date('Y/m/d H:i:s',$node->changed));
 //ここまで
  ...
}

function theme_node_admin_nodes($form) {
  ...
559行   $header = array($select_header, t('Title'), t('Type'), t('Author'), t('Status'));
 //ここから
 $header[] = t('Created');
  $header[] = t('Changed');
 //ここまで
  ...
576行   $row[] = drupal_render($form['status'][$key]);
 //ここから
 $row[] = drupal_render($form['created'][$key]);
  $row[] = drupal_render($form['changed'][$key]);
 //ここまで
 ...

また、作成済みコンテンツ(ノード)の複製を考えているのですが、
実現できるモジュールはありますでしょうか。

自分はインストールしたことはありませんが、
node cloneモジュールで、できませんでしょうか?
http://drupal.org/project/node_clone

不備やご不明な点、間違っている所等あれば連絡ください。

できました

darta's picture

jun784 さん

返信ありがとうございます。
無事に表示することができました。

node.admin.incの編集でも問題なかったのですね・・・

この画面をhookしてどのように表示させるかで、
取得内容から編集しなければいけないので、
同じような処理を複製して、別モジュールを作成しなければ・・
など、頭を固くして考えてしまっていました・・・・

自分はインストールしたことはありませんが、
node cloneモジュールで、できませんでしょうか?
http://drupal.org/project/node_clone

こんなモジュールあったのですね。
自分の検索が甘かったです・・・
早速入れて試してみたいと思います

Re:できました

jun784's picture

darta さん、よかったです!

この画面をhookしてどのように表示させるかで、
取得内容から編集しなければいけないので、
同じような処理を複製して、別モジュールを作成しなければ・・
など、頭を固くして考えてしまっていました・・・・

メインのモジュールをいじくるのもスマートでは無いので、
やはりhookでしたいですね。
するとすれば、node_form_node_admin_filter_form_alterでthemeを独自モジュールで上書きして上げればいいと思います。

モジュールですが、自分はここのWikiをよく参照させていただいてます。
http://www10.atwiki.jp/drupal/pages/37.html

またグループで質問させて頂いたりするのもいいですね!

Re2:できました

darta's picture

jun784 さんありがとうございます。

メインのモジュールをいじくるのもスマートでは無いので、
やはりhookでしたいですね。
するとすれば、node_form_node_admin_filter_form_alterでthemeを独自モジュールで上書きして上げればいいと思います。

なるほど。ここがどうすればいいのか分からずに、
いたところです。
node.admin.incの修正で表示自体はできましたが、
hookでも実現できればと思い・・・もう少々お付き合いお願いできますでしょうか。

node.admin.incの修正では、node_admin_nodes()とtheme_node_admin_nodes()に
手を入れたかと思います

node_form_node_admin_filter_form_alterを利用した独自モジュールとなると
SQL取得~画面表示部分を書いて上書きするということでしょうか。
「themeを独自モジュールで」とありましたので、thrme_node...かと思ったのですが、
日付が取れてないよなと、こんがらがってしまっているところです。

よろしくお願いします。

がんばって書いてみました。

jun784's picture

hookでも実現できればと思い・・・もう少々お付き合いお願いできますでしょうか。

module を書いてみました。

nodeoverview.info

name = Node over view
description = "Adds Postdate & Changed Date to Node Overview"
core = 6.x

nodeoverview.module

<?php
// $Id: $

/
* @file
* Adds Postdate & Changed Date to Node Overview
*/


/

* Implementation of hook_theme().
*/
function nodeoverview_theme() {
  return array(
    'nodeoverview_admin_nodes' => array(
      'arguments' => array('form' => NULL),
    ),
  );
}

/
* Implementation of hook_form_alter().
*/
function nodeoverview_form_node_admin_content_alter($form, $form_state) {
  $nodes_id = $form['admin']['nodes']['#options'];
  $form['admin']['#theme'] = 'nodeoverview_admin_nodes';
  foreach($nodes_id as $node_id => $val) {
    $node = node_load(array('nid' => $node_id));
    $form['admin']['created'][$node_id] =  array('#value' => date('Y/m/d H:i:s',$node->created));
    $form['admin']['changed'][$node_id] =  array('#value' => date('Y/m/d H:i:s',$node->changed));
  }
}

/

* Theme node administration overview.
*
* @ingroup themeable
*/

function theme_nodeoverview_admin_nodes($form) {
  // If there are rows in this form, then $form['title'] contains a list of
  // the title form elements.
  $has_posts = isset($form['title']) && is_array($form['title']);
  $select_header = $has_posts ? theme('table_select_header_cell') : '';
  $header = array($select_header, t('Title'), t('Type'), t('Author'), t('Status'));
  $header[] = t('Created');
  $header[] = t('Changed');
  if (isset($form['language'])) {
    $header[] = t('Language');
  }
  $header[] = t('Operations');
  $output = '';

  $output .= drupal_render($form['options']);
  if ($has_posts) {
    foreach (element_children($form['title']) as $key) {
      $row = array();
      $row[] = drupal_render($form['nodes'][$key]);
      $row[] = drupal_render($form['title'][$key]);
      $row[] = drupal_render($form['name'][$key]);
      $row[] = drupal_render($form['username'][$key]);
      $row[] = drupal_render($form['status'][$key]);
      $row[] = drupal_render($form['created'][$key]);
      $row[] = drupal_render($form['changed'][$key]);
      if (isset($form['language'])) {
        $row[] = drupal_render($form['language'][$key]);
      }
      $row[] = drupal_render($form['operations'][$key]);
      $rows[] = $row;
    }

  }
  else {
    $rows[] = array(array('data' => t('No posts available.'), 'colspan' => '6'));
  }

  $output .= theme('table', $header, $rows);
  if ($form['pager']['#value']) {
    $output .= drupal_render($form['pager']);
  }

  $output .= drupal_render($form);

  return $output;
}
  1. nodeoverview_themeでthemeを定義します。
  2. nodeoverview_form_node_admin_content_alterで、投稿日時、更新日時の追加及びテーマの上書き
  3. theme_nodeoverview_admin_nodesでテンプレートを出力

基本はalterで追加、変更だけですねー。
と、実はdevelでtheme_registerをするのを忘れてnodeoverview_themeで大分ハマりました・・・。

darta's picture

jun784 さん

モジュールまで書いてくださってありがとうございます。
本来ならば、自分で書いていかなければいけないところを・・・

まずはコピペでインストールさせて頂いたところ、
表示の方が変わりました(コメントの所だけ*を入れ直しました)

あとは、なぜこうなっているのかを、自分自身理解してみます

また質問させて頂くこともあるかと思いますが、今後ともよろしくお願いします。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week