URLエイリアスのDrupal 7コンテキストフィルター


7

記事のリストを表示するビューがあります。

mypage.com/articles

各記事は、次のようにメインのサブページビューにリンクされています。

mypage.com/articles/name-of-my-artile-yay

URLパスは、自動パスとURLエイリアスで作成されます。

ビューで、選択したサブページビューのみを表示するコンテキストフィルターを作成するにはどうすればよいですか?

私はこれを私のパスとしてビューに持っています:

記事/%

しかし、ここからどこへ行くべきか分かりません。タイトルを試して小文字にし、スペースをハイフンに置き換えましたが、これは常に機能するわけではなく、URLエイリアスは次のような単語を削除するようにURLを変更します。

a、an、as、at、before、しかし、by

そして、ページのタイトルが:

これは私のページのタイトルです-これで

URLエイリアスは次のようになります。

my-page-title

そのため、ページタイトルを使用したコンテキストフィルターでは一致しません。

何が欠けていますか?


2つのノードが同じタイトルを持っている場合、どうしたいですか?
チャーリーシュリーサー2013

URLパスのエイリアスは異なります。それがURL path Aliasタイトルではなく、私が使いたい理由の1つです。
cybercampbell 2013

ああ、そうです、articles / my-page-titleを一致させ、対応するノードにロードすることを考えていますか?または、記事/ My%20Page%20Titleをお探しですか?
チャーリーシュリーサー2013

articles/my-page-titleこれは、URLパスのエイリアスです。
cybercampbell 2013

回答:


8

最も簡単な方法は、パネルを使用して、ノードページをオーバーライドすることだと思います。バリアントを追加してその中にビューを配置し、node:nidコンテキスト引数を使用してノードのnid引数をそれに送信します。

  1. (インストールページマネージャー)
  2. ノードビューページを有効にする(node /%node)
  3. バリアントを追加し、関係するノードタイプを選択する検証基準を設定します
  4. 単純な1列の表示を使用する
  5. 列にビューを追加する
  6. 引数を要求し、node:nid(またはentity_idなど)を送信しますノードのnidをビューに送信します
  7. ビューで、node:nidコンテキストフィルターを使用しますあなたのビュー引数

すべて完了です。


こんにちは@Gregory-パネルをインストールしていくつかのチュートリアルを視聴しましたが、必要な方法をどこでも見つけることができません。すべてのチュートリアルは分類法を使用しているようです。URLパスエイリアスを使用したいだけです。これを行う方法に関する提案はありますか?
cybercampbell

回答を編集しました。
Gregory Kapustin 2013

こんにちは@Gregory-私はあなたの指示に従いました、そしてノードビューに空白のページが表示されます。それは何かだと思いますが、私はまだ何か間違ったことをしています。何か案は?#3 Add a variant, set a validation criteria selecting your concerned node typeでは、オプションは1つしかありませんVariant type でしたPanel。あれは正しいですか?
cybercampbell 2013

これは正しいです。空白のページの場合、バリアントが選択されます。問題は、ビューまたはそれに送信する引数の表示にあります。答えを更新しました。
Gregory Kapustin 2013

すばらしい@Gregory-これは機能します。問題は1つだけです。articleコンテンツタイプだけでなく、すべてのノードに影響します。#3に関係していると思いますが、バリアントタイプの下に1つのオプションしかありませんでしたPanel
cybercampbell 2013

3

コンテンツタイプのパスエイリアスを次のように設定します articles/[node:title]

オプション1:ビューを使用して詳細ページを実行する

ビューで:

  1. Pageパスを設定してビューを作成します/articles/%
  2. Contextual filters Content:Nidを追加し、次のように設定します。

    • フィルター値がURLにない場合 =>デフォルト値を提供
    • タイプ => URLの生の値
    • パス =>コンポーネント1(「パスエイリアスの使用」をチェック)

これは、最後のURLセグメント(「my-article-title-path-alias」のようなもの)でパスルックアップを実行し、正しいノードIDを返します。

オプション2:ビューをバイパスして詳細ページを実行する

パスを/articles/%単に次のように設定するので/articlesはなく、エイリアス/articles/%ノードすべてのパスを通常どおり解決します。


紛らわしい-フィルター値がURLにない場合は、URLのフィルター値を使用してください!?!?!でもこれを片付けてくれてありがとう...
Felix Eve

これは、ビューがパスのエイリアスではなくシステムのURL(例:node / 2)を使用するという事実に関係していると思います。したがって、この場合、フィルター値(パスエイリアス)は実際にはURLに含まれていないため、明示的に渡します
Kara

1

ノードIDのコンテキストフィルターを追加し、PHPを使用してデフォルトを提供します。

if (isset($this->view['args'][0])) {
  $path = db_query("SELECT source FROM {url_alias} WHERE alias = :alias LIMIT 1", array(':alias' => 'article/' . $this->view['args'][0]))->fetchColumn();
  if ($path) {
    $parts = explode("/", $path);
    if (isset($parts[1]) && is_numeric($parts[1])) {
      return $parts[1];
    }
  }
}

return FALSE;

これは、たとえば、node/123ノード123のタイトルがMy the PageおよびTitleであり、でビューにアクセスした場合に返されますexample.com/the_view/my-page-title


ありがとう@Charlie-「パス」のコンテキストフィルターを追加するオプションがないようです。それを得るために何か追加のものをインストールする必要がありますか?
cybercampbell 2013

私はそれがあなたに利用可能であるという仮定をするべきではありませんでした。$ parts = explode($ path);のように、ノードIDを使用して、クエリから結果のマシンパスを分解するだけで十分でしょうか。$ parts [1]を返します。?
チャーリーシュリーサー2013

ノードIDで機能するように回答を更新しました。
チャーリーシュリーサー2013

@Charlieに感謝-私はGregory Kapustinのパネルソリューションを採用することになりましたが、これは私にとって2番目の機会だったので、感謝したいと思います...
cybercampbell 2013

1
これは実際に私があなたに与えた最初の答えで、それを削除しました。Thx @charlieS!
Gregory Kapustin 2013

0
**Contextual filters**

1)グローバル:Null 2)(記事)content / node:nidフィルター値が利用できない場合デフォルト値を提供:URLからの生の値


こんにちは@Somikこれを手伝ってくれてありがとう。少しお答えください。私はそれを自分で解決しようとしましたが、うまくいきませんでしたので、私が間違ってそれをしたと思います
cybercampbell

0

このアプローチを試してください...

最初に通常のdrupalパス「node / nid」を取得してから、nidを使用して全負荷をロードしてから、ノードのタイトルをコンテキストフィルターとして使用します。

1)表示されている現在のノードの通常のパスを取得します...

<?php
$ogpath = drupal_lookup_path("source",$_GET['q']);

2)これは高価かもしれませんが、試してください...現在のNIDを取得してください

$ogarray = explode('/', $ogpath);
$node = node_load($ogarry[1]);
return $node->title;

うまくいくか教えてください。

あなたのpathautoは私がまだ出くわしていない方法で単語を取り除いています、それが正しく構成されていることを確信していますか?


こんにちは@Chiko-Pathautoはデフォルトの状態です。これを試してみます。ありがとう
cybercampbell

ああ..しかし、私は自分のURLでノードのタイトルを使用したくない...スペースなどがあります。私が誤解している場合はごめんなさい。あなたの方法を拡張してください。再度、感謝します。C
cybercampbell

0

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

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

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

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

ここに私への大きな助けであることが判明したリンクがあります-http://www.drupalfoo.com/drupal-7-views-contextual-filter-argument-node-reference-using-url-alias

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.