翔泳社のオンラインショップ

Drupal 実践プログラミング 徹底入門 正誤表

(最終更新日:2009-11-09)

お買い上げになった刷数:
訂正箇所 改訂
刷数
内容
P.108
1つ目の網掛け
未定
SELECT FROM role WHERE rid > 1 and rid != 7
SELECT name FROM role WHERE rid > 1 and rid != 7
P.150
網掛けコードブロック
未定
// セッションを書き、タイムスタンプを更新し、userフックの'login'を実行する
user_authenticate_finalize($form_state['values']);
// セッションを書き、タイムスタンプを更新し、userフックの'login'を実行する
user_authenticate_finalize($form_values);
引数名に誤りがありました。
P.164
図7-2以下
未定
 ダイレクトリンクを追加したくない場合は、hook_menu_alter()を使用して削除することができます。例えば次のコードは、「ノードの管理」 権限を持たないユーザからページを削除するコードです。

/**
* hook_menu_alter()の実装
*/
function joke_menu_alter(&$callbacks) {
 // ユーザが「ノードの管理」権限を持たない場合、
 // access callbackをFALSEに設定してjokeメニュー項目を無効にする
 if (!user_access('administer nodes')) {
 $callbacks['node/add/joke']['access callback'] = FALSE;
 // デフォルトのアクセスコールバックとしてuser_access()を使用されないために、
 // access argumentsを破棄する必要がある
 unset($callbacks['node/add/joke']['access arguments']);
 }
}
 ダイレクトリンクを追加したくない場合は、hook_menu_link_alter()を使用して削除することができます。例えば次のコードは、「jokeの作成」ページへのダイレクトリンクを非表示にするコードです。

/**
* hook_menu_link_alter()の実装
*/
function joke_menu_link_alter(&$item, $menu) {
 // 「jokeの作成」ページへのダイレクトリンクを非表示にする
 if ($item['link_path'] == 'node/add/joke') {
  $item['hidden'] = 1;
 }
}
hook_menu_alter()はコールされる条件が特殊であり、Drupalリクエストのライフサイクルで必ずコールされるものではないため、例に挙げられているコードは意図したとおりに動作しません。
また、この段階ではモジュールにパーミッションが定義されていないため、パーミッションを用いた例は適当ではありません。

なお、この修正に伴い、セクションのタイトルも「menuコールバックの変更」から「ダイレクトリンクの削除」に変更となります。
P.210
「$secondary_links」項目のコードブロック内3行目
未定
'links primary-links'))
'links secondary-links'))
設定すべきクラス名に誤りがありました。
P.249
図10-1内
未定
hook_form_id_alter()
hook_form_FORM_ID_alter()
関数名に誤りがありました。
P.263
網掛けコードブロック
未定
function formexample_nameform_submit($form_id, $form_state) {
function formexample_nameform_submit($form_id, &$form_state) {
2番目の引数の & が抜けています。
P.264
2番目の網掛けコードブロック
未定
function formexample_nameform_submit($form_id, $form_state) {
function formexample_nameform_submit($form_id, &$form_state) {
2番目の引数の & が抜けています。
P.329
網掛けコードブロック内下部
未定
/**
* hook_search_page()の実装
*/
function pathfinder_search_page($rows) {
 $header = array(
  array('data' => t('Alias'), 'field' => 'dst'), ('Operations'));
/**
* hook_search_page()の実装
*/
function pathfinder_search_page($rows) {
 $header = array(
  array('data' => t('Alias'), 'field' => 'dst'), t('Operations'));
t('Operations') の t が抜けています。
P.37
上から5~6行目
未定
variable_set($key, $value)を使用することでそれを取得することができます。
variable_get($key, $value)を使用することでそれを取得することができます。
関数名に誤りがありました。
P.375
コードブロック内の6行目
未定
if (empty($vid) || is_null(taxonomy_vocabulary_load($vid))) {
if (empty($vid) || (taxonomy_vocabulary_load($vid) === FALSE)) {
taxonomy_vocabulary_load() は、ボキャブラリが存在しない場合に NULL ではなく FALSE を返します。
P.392
14~15行目
未定
CACHE_ERMANENTでマーク付けされたアイテムは、キャッシュから削除されません
CACHE_PERMANENTでマーク付けされたアイテムは、キャッシュから削除されません
CACHE_PERMANENT の P が抜けていました。
P.449
3番目のコードブロック内11行目
未定
if ($is_author) {
// ユーザが投稿者自身の場合は投票を許可しない
if ($is_author || !user_access('rate content')) {
// ユーザが投稿者自身、または「rate content」権限を持たない場合は投票を許可しない
投票権限を持たないユーザに対する処理が抜けていました。
P.83
最下部の網掛けコードブロック
未定
function menufun_title() {
drupal_set_title(t('The page title'));
$now = format_date(time());
return t('It is now @time', array('@time' => $now));
}
function menufun_hello() {
drupal_set_title(t('The page title'));
return t('Hello!');
}
タイトルコールバック関数内でページタイトルを変更した場合、当該メニュー項目が表示されるすべてのページのページタイトルが変更されてしまいます。
したがって、83ページで説明しているように、特定のメニュー項目のタイトルとそのメニュー項目が指すページのタイトルを別々に設定したい場合は、メニューコールバック関数内で変更するのが妥当です。

ページ上に戻る

正誤表トップに戻る