分類用語ごとにグループ化されたコースのすべてのリソースを表示するページがあります。コースは有機的なグループであり、リソースはそれらのグループに属する資料です。パネルを使用してコンテンツを表示し、view_nodeをオーバーライドしています。さまざまなリソースカテゴリをすべて一覧表示するビューペインを既に作成しましたが、現在、カテゴリのすべてのリソースを一覧表示しようとしています。
パネルは次のURL構造を使用しています。
コース/コース名/ resources/resource-taxonomy-term
たとえば、私はURLを持っています
/ course/test-course/resources/transport
次に、分類用語「transport」に属するすべてのリソースを表示します。だから私が渡したいURL引数は%4だと思います。
私は1日以上試してみましたが、さまざまなメソッドを使用して、URL引数をビューに渡しても成功しませんでした。ビューペインを使用して結果とビューブロックを表示しようとしましたが、成功せずに引数を渡すさまざまな方法を調査しました。ビュー自体では問題なく機能しますが、パネルに配置すると機能しません。誰でも私にそれを行う方法を教えてもらえますか?
D7.18、ctools 7.x-1.0-rc1、panels 7.x-3.0、views 7.x-3.7を使用しています。
私はこの問題をなんとか解決しました。解決策は私が望んでいたものとは正確には異なりますが、機能します。
まず、パネルの用語名ではなく、用語IDを使用するようにURL引数を変更しました。次に、ビューペインで、コンテキスト設定の[デフォルトの引数を提供する]セクションで[URLから分類用語のID]を使用する代わりに、[URLからの生の値]を使用して、パスコンポーネントを指定しました。また、用語idを使用するための基本的な検証を設定する必要がありました。
IDの代わりにURLで用語名を使用することができる、これを行うよりきちんとした方法があるかどうか私はまだ興味があります。
シナリオ例:
コンテンツ表示ペインを含むパネルがあります。
パネルURL:/ panel_url
引数の例:/ panel_url/term_name
[〜#〜] bef [〜#〜] の場合:/ panel_url?category = 123
設定方法(既存のパネルと追加されたコンテンツペインがある):
できました。
さらに、 Better Exposed Filters を使用している場合は、次の改善を行うことができます。
引数に基づいて現在アクティブなリンクを設定するには(select_as_linksを使用している場合):
/**
* Implements hook_preprocess_[themeFunctionName]().
*/
function foo_preprocess_select_as_links(&$variables) {
$options = isset($variables['element']['#options']) ? array_change_key_case(array_flip($variables['element']['#options']), CASE_LOWER) : array();
$selected = end((arg()));
if (array_key_exists($selected, $options)) {
$variables['element']['#value'] = $options[$selected];
}
}
引数に基づいて現在アクティブなリンクを設定するには(selectを使用している場合):
/**
* Implements hook_preprocess_[themeFunctionName]().
*/
function foo_preprocess_select(&$variables) {
switch (arg(0)) {
case 'panel_url':
if (@$variables['element']['#name'] == 'category') {
$options = isset($variables['element']['#options']) ? array_change_key_case(array_flip($variables['element']['#options']), CASE_LOWER) : array();
$selected = end((arg()));
if (array_key_exists($selected, $options)) {
if ($variables['element']['#value'] <> $options[$selected]) {
$variables['element']['#value'] = $options[$selected];
} else {
// drupal_goto('panel_url');
}
}
}
break;
}
}
リンクをSEO対応にするために、次のようなことを試すことができます。
/**
* Implements hook_url_inbound_alter().
*/
function foo_url_outbound_alter(&$path, &$options, $original_path){
if (arg(0) == 'panel_url') {
// Convert URL like: /panel_url?category=29 into /panel_url/term_name (SEO friendly)
$path_info = parse_url($path);
switch (@$path_info['path']) {
case 'panel_url/term_name':
case 'panel_url/term_name2':
$path = 'panel_url/all'; // Convert loopy urls into base url
}
if (strpos($path, '?category=') !== FALSE) { // Convert term id into human name
list(, $tid) = explode('=', current(explode('&', $path_info['query']))); // get tid from URL
$term_name = strtolower(taxonomy_term_load((int)$tid)->name);
$path = '/panel_url' . '/' . $term_name; // See also: $path_info['path']
}
}
}
引数を渡す際の問題は、パネルやページを十分に理解していないためです。私はwronglyノードを作成し(基本的なページコンテンツタイプから)、パネルで編集して引数を送信できることを期待しています。 URLパスに引数を追加すると、常にページが見つかりませんでした。
後で気付いたのは、構造>ページ>カスタムページの追加に移動し、コンテンツペインビューを追加して引数を効果的に渡す必要があることです。また、カスタムページからコンテンツウィンドウを見つける前に、コンテンツペインビューに引数入力が正しく設定されていることを確認する必要があります。
このチュートリアルを読んで、どこが間違っているのかを見つけました: http://www.metaltoad.com/blog/passing-page-arguments-view-panes
ビューペインで、分類用語との関係を作成します。完了したら、その関係に基づいてコンテキストフィルターを作成し、用語名を渡します。生のURL引数を受け入れるようにフィルターを設定し、パスに項目番号を設定すると、それが行われます。