web-dev-qa-db-ja.com

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

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

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

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

view-name/123

使いたい

view-name/node-B-title

どうすればできますか?

8
uwe

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

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

  1. コンテキストフィルター値の選択RLから
    • 通常、このような目的でページビューを使用します。単一のコンテキストフィルターORに対して_foo/%/bar_または_foo/bar/%_の形式のURLが含まれます。複数のフィルターの場合、_foo/%/bar/%_または_foo/bar/%/%_の形式の_
    • 複数のフィルターがある場合、最初に表示されるURL値は最初のフィルターにマップされ、2番目のフィルターの隣にマップされます。
  2. ビューを使用すると、-何をすべきかフィルター値をRLで使用できないと指定できます。これは通常、ブロックビューに使用されます。
    • さまざまなアクションから選択して、その選択を構成することもできます。 You can choose from different actions and then configure the choice too. asdfj kajsdf
  3. ビューが許可するもう1つのことは、上記の#1で説明したように、-何を行うかフィルター値RLで見つかった場合を伝えることです。典型的な使用例は-フィルター値に基づく動的なタイトルの作成、フィルター値の検証などです。
    • フィルター値を検証するとき、値も変更できます! (それは私たちのソリューションがところであるところです)。これは、drupalフォーム検証コールバックで$ form値を変更する方法に非常に似ています。 enter image description here

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

このリンク は私にとって大きな助けになることがわかりました。ここからの抜粋です:

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

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

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

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

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

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

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

1
squarecandy

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

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

これで完了です。 :)

1
Eleo

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

safeword という名前のモジュールができました。これは、基本的にSumeet Pareekが提案したことを正確に実行します:(自動的に)URLフレンドリーなフィールドを作成します。

0
Gerto

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

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

  • たとえば、node/123にabout-usのようなエイリアスを定義した後、ページが/ node/123/edit、node/123/revisionsなどの醜いマシン生成のタブやリンクでいじられている理由を疑問に思ったことはありませんか? 。?
  • 同様に/ taxonomy/term /%および/ user /%リンクの場合:/ dries/trackが表示されることを期待していましたが、/ user/5/trackを取得しましたか?
  • ブラウザのアドレスバーにも、エイリアスではなく醜い数字が表示されていますか?
0
DrCord