「最寄り駅」、「駅からの徒歩分」および「補助交通機関」のフィールドを追加します。これらはノードに直接関連付けられたフィールドではなく、フィールドコレクションに関連付けられたフィールドなので、多少手間がかかります。ビューの編集画面にアクセスしてください。
アドバンスエリアをクリックして開き、その中の「RELATIONSHIPS」の「追加」ボタンをクリックします。
コンテンツの一覧を作成するのに、ビューの内部ではデータベースクエリを組み立てています。「RELATIONSHIPS」では、クエリの構築に必要なデータベーステーブルの関連付けを追加することができます。
「RELATIONSHIPS」の追加画面です。「For」のところは「All displays」を選択し、「コンテンツ: アクセス」の項目を探してチェックを入れ、「Apply (all displays)」ボタンをクリック。
Identifer に「アクセス」と入力し、「Apply (all displays)」ボタンをクリック。これで「アクセス(field_access)」フィールドコレクションのデータの取得に必要なテーブルが関連付けされました。
「アクセス(field_access)」フィールドは値の数を無制限に設定してあるので、抽出する物件リストが重複しないよう、フィルターを追加します。
FILTER CRITERIA の「追加」をクリック。
For のことろは「All displays」を選択、「コンテンツ: アクセス (field_access:delta)」の項目を探してチェックを入れ、「Apply (all displays)」ボタンをクリック。
Operator に「is_equal to」を選択、Value に「0」と入力し、「Apply (all displays)」ボタンをクリック。これで、「アクセス」フィールドのデルタ(※1)が「0」のレコードのみが抽出され、「アクセス」フィールドを関連付けたことによる物件リストの重複が無くなります。
次に「アクセス(field_access)」フィールドコレクションに関連付けられたフィールド(最寄り駅、徒歩分、補助交通機関)を、FIELDS の設定に追加します。
左側 FIELDS の「追加」ボタンをクリック。
「For」に「All displays」、「フィルター」に「Field collection item」を選択します。
「Field collection item: 最寄り駅」という項目を探してチェックを入れ、「Apply (all displays)」ボタンをクリックします。
「Field collection item: 最寄り駅」の設定画面です。Relationship に、「アクセス」が選択されていることを確認、Formatter は「物件用カスタムリンク」(※2)を選択します。「MULTIPLE FIELD SETTINGS」のフィールドセットを開き、Display「1」value(s) starting from「0」となるように入力します。「STYLE SETTINGS」のフィールドセットを開き、「Customize field HTML」にチェックを入れ、HTML element に「DIV」を選択します。あとはデフォルトのまま「Apply (all displays)」ボタンをクリックします。
同様に、「Field collection item: 徒歩分」と「Field collection item: 補助交通期間」のフィールドを追加してください。この2つの設定は、Relationship に、「アクセス」が選択されていることを確認、「STYLE SETTINGS」のフィールドセットを開き、「Customize field HTML」にチェックを入れ、HTML element に「DIV」を選択します。あとはデフォルトのまま「Apply (all displays)」ボタンをクリックします。
これらのフィールドを追加できたら、フィールドの順番を調整します。FIELDS の追加ボタンの横をクリックして「rearrange」をクリックしてください。
追加したフィールドを3つとも「市区町村」フィールドの後に持ってきます。この状態で、「Apply (all displays)」ボタンをクリックします。
次に前回と同様、フィールドまとめて表示する設定をします。ここで「最寄り駅」は「市区町村」のセルにまとめ、「補助交通機関」は「徒歩分」のセルにまとめることにします。「フォーマット」のところの「環境設定」をクリックしてください(図1)。
テーブルフォーマットの設定画面が開きます。COLUMN セレクトボックスを「最寄り駅」は「市区町村」、「補助交通機関」は「徒歩分」と選択します。「徒歩分」の ALIGN を「中央」、SORTABLE にチェックを入れ、デフォルトの並び順は「Ascending」を選択します。この設定で、「Apply (all displays)」ボタンをクリック。そのあと、ビューの編集画面右上の「保存」ボタンをクリックして、設定を保存してください。
最寄り駅、徒歩分、補助交通機関のフィールドが追加されました。駅からの「徒歩分」でのソート(並べ替え)も可能になっています。
複数のフィールドをまとめたセルでは、テーブルヘッダーのラベルには、まとめる対象のフィールドのラベルが1つ表示されているだけです。これではちょっとおかしいので、表示するフィールドのラベル、もしくはそれと分かるようなタイトルを、縦に並べて表示するようにします。
これは、通常のビューの設定だけではちょっと難しいので、カスタムモジュールに以下のコードを追加します。
/** * Implementation of template_preprocess_views_view_table() * 1. Views のテーブルのラベルを2段にできるようにする。 * 2. テーブルソートのリンクに使用するクエリのうち、余計なものを削除。 */ function custom_preprocess_views_view_table(&$vars) { $view = $vars['view']; $options = $view->style_plugin->options; $handler = $view->style_plugin; $fields = &$view->field; $columns = $handler->sanitize_columns($options['columns'], $fields); $active = !empty($handler->active) ? $handler->active : ''; $order = !empty($handler->order) ? $handler->order : 'asc'; $query = tablesort_get_query_parameters(); unset($query['page']);// ソートを変更する場合はページャをリセットしたほうが自然。 // $view->exposed_raw_input は $query に追加しない。 foreach ($columns as $field => $column) { // render the header labels if ($field == $column && empty($fields[$field]->options['exclude'])) { $title = check_plain(!empty($fields[$field]) ? $fields[$field]->label() : ''); // ラベルを '|' で分割し、'<div>' でマークアップする。 $label_arr = explode('|', $title); foreach ($label_arr as $key => $value) { $label_arr[$key] = '<div>' . $value . '</div>'; } $label = implode($label_arr); if (empty($options['info'][$field]['sortable']) || !$fields[$field]->click_sortable()) { $vars['header'][$field] = $label; } else { $initial = !empty($options['info'][$field]['default_sort_order']) ? $options['info'][$field]['default_sort_order'] : 'asc'; if ($active == $field) { $initial = ($order == 'asc') ? 'desc' : 'asc'; } $title = t('sort by @s', array('@s' => $title)); if ($active == $field) { $label .= theme('tablesort_indicator', array('style' => $initial)); } $query['order'] = $field; $query['sort'] = $initial; $link_options = array( 'html' => TRUE, 'attributes' => array('title' => $title), 'query' => $query, ); $vars['header'][$field] = l($label, $_GET['q'], $link_options); } // Add a header label wrapper if one was selected. if ($vars['header'][$field]) { $element_label_type = $fields[$field]->element_label_type(TRUE, TRUE); if ($element_label_type) { $vars['header'][$field] = '<' . $element_label_type . '>' . $vars['header'][$field] . '</' . $element_label_type . '>'; } } } } }
これは Views のテーブルフォーマットのテンプレート(views_view_table)のテンプレート前処理関数(※3)です。テンプレートに渡す変数を修正しています。フィールドのラベルが '|'(パイプ)で区切られている場合には、'<div>' でマークアップするようにしました。次にフィールドのラベルを編集します。
ビューの設定画面に入り、FIELDS のところの「コンテンツ: 市区町村」をクリック。
「コンテンツ: 市区町村」フィールドの設定画面です。このフィールドのラベルは「市区町村」ですが、ページの内容としては、ここでは「所在地」としたほうが、しっくりくると思います。これに、同じセル内で表示している「最寄り駅」フィールドのラベルを '|'(パイプ)で区切って繋げ、「所在地|最寄り駅」のように入力します。「Apply (all displays)」ボタンをクリックしてください。
同様に「徒歩分」フィールドのラベルを「駅徒歩分|バス」、「家賃」フィールドのラベルを「家賃|共益費/管理費」、「敷金」フィールドのラベルを「敷金|礼金」、「専有面積」フィールドのラベルを「間取り|専有面積」、「築年月」フィールドのラベルを「物件種別|築年月」とします。この設定で、ビューを保存してください。
ビューの設定を保存したら、さきほどのフックを有効にするため、モジュールの設定を再構築し、そのあとキャッシュをクリアしてください。
テーブルヘッダーのラベルが、2段表示されました。テーブルヘッダーも、配置を中央寄りにしたほうがいいかもしれません。テーブルヘッダーの配置を調整するには、セルの調整のときのように、クリック操作だけでは出来ないので、CSS で調整します。CSS を適用しやすいように、このビューにクラスを指定します。
ビューの編集画面に戻り、アドバンスエリアの「CSS class」をクリックし、All displays で「bukken-list」と設定してください。
CSS で表示を整えたところです。テーブルヘッダーを中央寄りにしました。
登録されている物件のトータル件数を表示するようにします。ビューの編集画面に入ってください。
「ヘッダー」のところの「追加」ボタンをクリック。
ヘッダーの追加画面です。For のところは「All displays」を選択し、「Global: Result summary」のところにチェックを入れ、「Apply (all displays)」ボタンをクリック。
「Global: Result summary」の設定です。「表示」の欄に「<div id="total-rows">@total 件の物件があります。</div>」と入力し、「Apply (all displays)」ボタンをクリックします。
登録されている物件のトータル件数が表示されました。
物件の登録件数が 0 件の場合は、「お探しの物件は見つかりませんでした。」と表示するようにします。
ビューの編集画面に入り、右側の「NO RESULTS BEHAVIOR」の追加ボタンをクリック。
「NO RESULTS BEHAVIOR」の設定画面です。For のところは「All displays」を選択し、「Global: Text area」のところにチェックを入れ、「Apply (all displays)」ボタンをクリック。
「Global: Text area」の設定画面です。テキストエリアに「お探しの物件は見つかりませんでした。」と入力して、「Apply (all displays)」ボタンをクリック。
ビューの編集画面に戻ったら、画面右上の「保存」ボタンをクリックしてください。これで、物件の登録件数が 0 件の場合に、「お探しの物件は見つかりませんでした。」と表示されるようになりました。
最後にこのページ('/forrent')をメインメニューに登録します。ビューの管理画面にアクセスしてください。
真ん中のメニューのところをクリックします。
メニューの設定画面です。タイプは「Default menu tab」にチェックを入れ、タイトルに「賃貸物件」と入力します。「Apply」ボタンをクリックしてください。
デフォルトメニュータブの設定です。Parent menu item は「Normal menu item」にチェックを入れ、タイトルに「賃貸物件」と入力、メニューは「メインメニュー」を選択して、「Apply」ボタンをクリック。ビューの編集画面に戻ったら、右上の「保存」ボタンをクリックして、ビューの設定を保存してください。
「賃貸物件」がメインメニューに登録されました。クリックすると賃貸物件トップページ('/forrent')に移動し、ビューで作成したページ('/forrent/front')と同じ内容が表示されます。
これは、さきほどのデフォルトメニュータブの設定(図29)で、親(上位)となるメニューアイテムとして、自動的に作成されたものです。このページ('/forrent')が、言うなれば「本物」ということになります。デフォルトメニュータブのページ('/forrent/front')は「ローカルメニュータブ」の設置のために必要です。ローカルメニュータブには、このあと「エリアから探す('/forrent/area')」、「沿線から探す('/forrent/route')」のページを追加することになりますが、これについてはのちほど説明します。
※1 デルタとは、フィールドの値が複数存在する場合に、その値がフィールドの何番目の値かを示す数字です。
※2 「物件用カスタムリンク」は「市区町村」フィールドの作成のところで作成した、カスタムフォーマットです。
※3 テンプレート前処理関数については「サムネイル拡大表示部分の作成」を参照。