Hatena::ブログ(Diary)

BUENA VISTA SOCIAL BLOG このページをアンテナに追加 RSSフィード Twitter

2011年05月20日

[][]Drupal7を使ってるよ

以下、インストールログ

  • 予めDrupal用のDBを作成しておく

とりあえずDB名は「drupal」にしておきましょう。

mysql -u root -p
create database drupal;
  • Drupal7のソースをDL
cd /usr/local/src
wget http://ftp.drupal.org/files/projects/drupal-7.0.tar.gz
  • 展開、フォルダ移動
tar -xvzf drupal-7.0.tar.gz
cp -r /usr/local/src/drupal-7.0 /var/www/drupal
chown -R apache:apache drupal
  • 日本語翻訳ファイルをDL
cd /var/www/drupal/profiles/standard/translations/
wget http://ftp.drupal.org/files/translations/7.x/drupal/drupal-7.0.ja.po
  • httpd.conf書き換え

Apacheの設定を見てください

所要時間20分くらい

[][]Drupal7のサイトトップ(Frontpage)にでるアイツを無くすモジュールを作った

Drupal導入当初のサイトトップは以下のように

f:id:hagimi:20110520154641p:image:w360

「ようこそ、記事を追加してね」みたいな内容が書かれてて

記事を追加して「フロントページへ掲載」ってやるとこんな感じ

f:id:hagimi:20110520154642p:image:w360

でも実際トップページを自由に作りたいのよって時にものすごい邪魔になる、っていうかブロックの設定でこの「Content」は外せない・・・

困った

そんなときは結構モジュールつくると簡単に出来ちゃうわけで・・・

と、いうわけで作ってみましょう。

フロントページにこのデフォルトのContentが出てくるのはなんでや、というところをまずは見ていきましょう。

Drupalフロントページデフォルトだと

http://sample.com/node

のページを見るようになってます。

このNodeモジュールのhook_menuを見てみましょう。

1938行目あたり

  <?php
  $items['node'] = array(
    'page callback' => 'node_page_default',
    'access arguments' => array('access content'),
    'menu_name' => 'navigation',
    'type' => MENU_CALLBACK,
  );

となっている部分。これがhttp://sample.com/nodeのページを生成するところ

んで、page collbackの「node_page_default」の関数を見てみると

<?php
/**
 * Menu callback; Generate a listing of promoted nodes.
 */
function node_page_default() {
  $select = db_select('node', 'n')
    ->fields('n', array('nid', 'sticky', 'created'))
    ->condition('promote', 1)
    ->condition('status', 1)
    ->orderBy('sticky', 'DESC')
    ->orderBy('created', 'DESC')
    ->extend('PagerDefault')
    ->limit(variable_get('default_nodes_main', 10))
    ->addTag('node_access');

  $nids = $select->execute()->fetchCol();

  if (!empty($nids)) {
    $nodes = node_load_multiple($nids);
    $build = node_view_multiple($nodes);

    // 'rss.xml' is a path, not a file, registered in node_menu().
    drupal_add_feed('rss.xml', variable_get('site_name', 'Drupal') . ' ' . t('RSS'));
    $build['pager'] = array(
      '#theme' => 'pager',
      '#weight' => 5,
    );
    drupal_set_title('');
  }
  else {
    drupal_set_title(t('Welcome to @site-name', array('@site-name' => variable_get('site_name', 'Drupal'))), PASS_THROUGH);

    $default_message = '<p>' . t('No front page content has been created yet.') . '</p>';

    $default_links = array();
    if (_node_add_access()) {
      $default_links[] = l(t('Add new content'), 'node/add');
    }
    if (!empty($default_links)) {
      $default_message .= theme('item_list', array('items' => $default_links));
    }

    $build['default_message'] = array(
      '#markup' => $default_message,
      '#prefix' => '<div id="first-time">',
      '#suffix' => '</div>',
    );
  }
  return $build;
}

となっていますね。これがすべての元凶。

なのでここの部分を自前モジュールで制御し直しちゃいましょう。

  • /sites/all/modules以下に「empty_front_page」フォルダを作成

自前モジュール

/sites/all/modules

以下に置く。

あとはinfoファイルとmoduleファイルを作る。

    • empty_front_page.info
; $Id$

name = Empty Front Page
description = Empty front page module
package = My modules
version = VERSION
core = 7.x

これは適当に

    • empty_front_page.module
<?php
function empty_front_page_menu_alter(&$items){
  $items['node']['page callback'] = 'empty_front_page_node_page_default';
}

/**
  * Page Callback for 'node' front page item.
  */

function empty_front_page_node_page_default() {
  $build = array();
  drupal_set_title('');
  return $build;
}

まず最初の関数はhook_menu_alter()で既存のNodeモジュールのhook_menu()を上書きする。

ここではhttp://sample.com/nodeアクセスしたときのコールバック関数を自前の関数へ変更

そして新しいコールバック関数empty_front_page_node_page_default()では何もしないで返してやる。

あら不思議、なんということでしょう

f:id:hagimi:20110520154643p:image:w360

きれいさっぱりデフォルトの表示が消えました。

これで自由にサイトトップページを弄れますね!