このブログでは、サイドバーのカテゴリ(ブロック)のところでカテゴリ名を選択すると、そのカテゴリ中のエントリーのタイトル一覧を表示するようにしている。これは Drupal でどうやっているのかというと・・・
まず、前準備として、カテゴリ名を URLエイリアスで作っておく(英数字で)。たとえば本ブログを実際の例として挙げると、taxonomy/term/31 に drupal という URL エイリアスを設定している。
次に、
View モジュールで以下のコードを
インポートする
$view = new stdClass();
$view->name = 'category';
$view->description = 'カテゴリ';
$view->access = array (
0 => '3',
1 => '1',
2 => '2',
);
$view->view_args_php = '$result = db_fetch_array(db_query("SELECT src FROM {url_alias} WHERE dst = \'$args[0]\'"));
$url = $result[\'src\'];
$tid = preg_replace ("/taxonomy\\/term\\//", \'\', $url);
$vocabularies = taxonomy_get_vocabularies();
foreach($vocabularies as $voc) {
$taxnomies = taxonomy_get_tree($voc->vid, 0);
foreach ($taxnomies as $term) {
if($term->tid == $tid) {
$args[0] = $term->name;
return args;
}
}
}';
$view->page = TRUE;
$view->page_title = '';
$view->page_header = '
';
$view->page_header_format = '1';
$view->page_footer = '';
$view->page_footer_format = '1';
$view->page_empty = '';
$view->page_empty_format = '1';
$view->page_type = 'table';
$view->url = 'list';
$view->use_pager = TRUE;
$view->nodes_per_page = '1000';
$view->sort = array (
array (
'tablename' => 'node',
'field' => 'created',
'sortorder' => 'ASC',
'options' => 'normal',
),
);
$view->argument = array (
array (
'type' => 'taxletter',
'argdefault' => '2',
'title' => '%1',
'options' => '',
'wildcard' => '',
'wildcard_substitution' => '',
),
);
$view->field = array (
array (
'tablename' => 'node',
'field' => 'title',
'label' => '',
'handler' => 'views_handler_field_nodelink',
'defaultsort' => 'ASC',
'options' => 'link',
),
);
$view->filter = array (
array (
'tablename' => 'node',
'field' => 'type',
'operator' => 'OR',
'options' => '',
'value' => array (
0 => 'blog',
),
),
array (
'tablename' => 'node',
'field' => 'status',
'operator' => '=',
'options' => '',
'value' => '1',
),
);
$view->exposed_filter = array (
);
$view->requires = array(node);
$views[$view->name] = $view;
実際には、
- 渡された URL (これはカテゴリの URL エイリアスとなっている)から taxonomy の tid を割り出して(上のコードでは
$tid = preg_replace ("/taxonomy\\/term\\//", \'\', $url);
の部分)、
- さらに tid からカテゴリ名(上のコードでは
$term->name
)を割り出して、
- そのカテゴリ名を View モジュールの Argument に
$args[0] = $term->name;
として渡す。
- View モジュールの Argument の設定では、Taxonomy: Term Name を指定。
- この Argument の設定で、タイトルのところに %1 と入れておくと、この %1 に args[0] で渡された値、すなわちカテゴリ名が入って、ビューのタイトルとなる
・・・という仕掛けだが、正直わかりずらい!!!俺もよくここまでできたもんだ(笑)
トラックバック URL:
https://perltips.twinkle.cc/trackback/283