ビューのノード参照コンテキストフィルターでノードIDの代わりにノードタイトルまたはパスエイリアスを使用する方法


8

ノードBへのノード参照を持つノードAがあります。

ビューには、特定のノードBが参照されているすべてのノードAが表示されます(nid:123、title:node-B-title)。

コンテキストフィルターでnidを使用する代わりに、ノードタイトルを使用したいと思います。たとえば、次の代わりに:

view-name/123

使いたい

view-name/node-B-title

どうすればできますか?

回答:


11

私は非常によく似た問題を抱えていて、その解決策を見つけただけでなく、ビューがどのように機能するかについて新しいことも学びました。私が学んだこととあなたの問題の解決策も共有しましょう。

1つ以上のコンテキストフィルターを使用してビューを作成する場合、ビューはどこかからそれらのフィルターの値を受け取る必要があります。これは-

  1. URLからコンテキストフィルター値を選択する
    • 通常、このような目的のために、フォームのURL または単一のコンテキストフィルター、またはフォームのURL または複数のフィルターを持つページビューがあります。foo/%/barfoo/bar/%foo/%/bar/%foo/bar/%/%
    • 複数のフィルターがある場合、最初に表示されるURL値は最初のフィルターにマップされ、2番目のフィルターの隣にマップされます。
  2. ビューを使用すると、URLでフィルター値を使用できない場合の対処方法を指定できます。これは通常、ブロックビューに使用されます
    • さまざまなアクションから選択して、その選択を構成することもできます。 さまざまなアクションから選択して、その選択も構成できます。 asdfj kajsdf
  3. ビューでできるもう1つのことは、上記の#1で説明したように、URLでフィルター値が見つかった場合にフィルター値をどうするを指示することです。典型的な使用例は-フィルター値に基づく動的なタイトルの作成、フィルター値の検証などです。
    • フィルター値を検証するとき、値も変更できます!(それは私たちのソリューションがところであるところです)。これは、ドループルフォーム検証コールバックで$ form値を変更する方法と非常に似ています。 ここに画像の説明を入力してください

特定の問題の解決策は、上の画像の矢印が指すセクションで非常に類似したコードを使用することです。

このリンク は私にとって非常に役立つことがわかりました。ここからの抜粋です:

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

これは私にとっては機能しませんでしたが、保存時にビューにajaxエラーが発生しました。
DrCord 2016年

1

これはすべての状況で機能するわけではありませんが、問題の問題に対する1つのアプローチは、ノードB(またはノードタイプB)の実際のノード表示を使用して、パスまたはパス自動モジュールで希望する方法でパスを設定することです。次に、viewsブロックを使用して、コンテンツの関係と必要なビューを追加します。

NIDでコンテキストフィルターを使用してから、を設定しますProvide default value > Content ID from URL。次に、viewsブロックをページまたはページのセットに追加します。

コンテキストで、ビューページではなくノード自体でビューブロックを使用できる場合、これにより、必要なパスを取得し、必要なビューを簡単に表示できます。


1

受け入れられた回答を編集しましたが、実際のコードをここに追加したいと思います。

コンテキストフィルターの検証オプションの下にあるPHP検証済みオプションを使用します。

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

1

ビューの引数は、コンテンツタイプのフィールド参照である必要があります。次に、[デフォルトの引数を提供する]オプションを選択し、オプションのIdノード(そのようなもの)をオンにします。

1)引数「Xフィールド参照」を追加する2)URLからIDノードを確認する(デフォルト引数を追加する)3)検証セクションでノードのコンテンツタイプを確認し、設定「ノードタイプ」で「ノードID」を選択する

これで完了です。:)


「URLのコンテンツID」はnidのみを提供します。用語参照を使用する場合、「用語名を用語IDに変換」した「検証基準」を使用できます。ノード参照の場合、タイトルをnidに変換する同様のオプションはありません。タイトルは必ずしも一意ではないためでしょう。
uwe

はい、正しいですが、引数はフィールド参照(nid)でなければなりません。試してください。
Eleo

1)引数「Xフィールド参照」を追加2)URLからIDノードを確認(デフォルト引数を追加)3)検証セクションでノードのコンテンツタイプを確認し、設定「ノードタイプ」で「ノードID」を選択
Eleo

実際のURLにはnidを含めることができ、パスエイリアスはノードタイトルにすることができます。これは機能しませんか?
SGhosh 2013年

0

古い質問ですが、Googleを介してそれを見つけ、将来それを見つけた人のために私の解決策を共有すると思いました。

モジュールという名前の今があるのSafeWord (自動的に)URLにやさしいフィールドを作成します。基本的にSumeet Pareekが提案まさにありません。


0

拡張パスエイリアス(path_alias_xt)モジュールをお勧めします。設定なしでインストールするだけでこの問題を修正できます。基本的には魔法のようです。:D実際にはありませんが、モジュールページからの抜粋は、インストール方法と、その他の問題を修正する方法を説明していますが、モジュールがバックグラウンドで実行する方法については触れていません... O、ええと、常にコードを読む:Dビューパスの修正については具体的には触れていませんが、私はそれを使って完全に機能しています。

モジュールのページから、それが解決する問題のリスト:

  • たとえば、node / 123にabout-usのようなエイリアスを定義した後、ページが/ node / 123 / edit、node / 123 / revisionsなどの醜いマシン生成のタブやリンクでいじられている理由を疑問に思ったことはありませんか? 。?
  • 同様に/ taxonomy / term /%および/ user /%リンクの場合:/ dries / trackが表示されることを期待していましたが、/ user / 5 / trackを取得しましたか?
  • ブラウザのアドレスバーにも、エイリアスではなく醜い数字が表示されていますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.