2011年05月20日
■[PHP][Drupal]Drupal7を使ってるよ
以下、インストールログ
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
- 権限をApacheに
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分くらい
■[PHP][Drupal]Drupal7のサイトトップ(Frontpage)にでるアイツを無くすモジュールを作った
Drupal導入当初のサイトトップは以下のように
「ようこそ、記事を追加してね」みたいな内容が書かれてて
記事を追加して「フロントページへ掲載」ってやるとこんな感じ
でも実際トップページを自由に作りたいのよって時にものすごい邪魔になる、っていうかブロックの設定でこの「Content」は外せない・・・
困った
そんなときは結構モジュールつくると簡単に出来ちゃうわけで・・・
と、いうわけで作ってみましょう。
フロントページにこのデフォルトのContentが出てくるのはなんでや、というところをまずは見ていきましょう。
- Drupal CoreのNode Module
のページを見るようになってます。
この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()では何もしないで返してやる。
- ではモジュールを有効にしてみましょう。
あら不思議、なんということでしょう
きれいさっぱりデフォルトの表示が消えました。
これで自由にサイトトップページを弄れますね!







