web-dev-qa-db-ja.com

ビューのフィールドの結果の書き換えでトークンとして使用可能なURL引数を作成するにはどうすればよいですか?

URL引数を作成することは可能ですか?.

http://mysite.com/arg1/arg2/arg3

ビューのフィールドの書き換え結果設定でトークンとして使用できます。上記の場合、これらは(他の既存のトークンの中で)次のように使用できます。

[arg1] [arg2] [arg3]

背景

OpenLayersマップを使用して、オーバーレイに配置されたフィルター済みアイテムを含むビューを開発しています。ユーザーがマップを操作してアイテムを削除するとき、ページが再読み込みされるときにマップの位置を保持したい(デフォルトのズームと位置に戻さないようにしたい)。 URL引数(経度と緯度)にアクセスできるようにすることで、フィルターURLを書き換えて、これらをページに送り返すことができます。

しかし、人々が質問への回答が役立つと思われるマップを使用しない他のシナリオがあると確信しています。

7
therobyouknow

実際にコンテキストフィルターを使用したくない場合は、「グローバル:Null」コンテキストフィルターを使用し、コンテキストフィルターオプションを使用して、関心のある引数の位置から値を割り当てると、%1として使用できるようになります。 /!1クエリに実際に影響を与えない置換トークン。

6
Jason Fisher

arg2arg3が問題のビューの引数/コンテキストフィルターである場合、またはその可能性がある場合、!1!2を書き換えで使用できるはずです。

arg1は、簡単に動的にすることはできないため、無視しています。

添加:

これは、D7がD6機能を削除していないと想定する別のケースかもしれませんが、ここで簡単な画面グラブ(このセクションではすぐに使えるD7テストベッドがないので、申し訳ありません)は、引数が再書き込みの一部としてこれを示しています現在:

enter image description here

これは、ノードnidとタイプの2つの引数を持つクイックビューです。このフィールド(タイトル)を書き換えると、Hello [title] where nid is !1 and type is !2を入力して機能します。

2番目の追加:

この回答は現在の問題にはもはや有効ではありませんが(両方の回答についての豊富なコメントを参照)、@ Molotはこれらの置換パターンがD7で利用可能であることを確認しました:

enter image description here

おそらくこれと彼の答えは、他の誰かがそこを見るのを助けるでしょう。

4
Jimajamma

使用したい引数がビュー引数またはコンテキストフィルターではない場合、それらをトークンとして使用する場合は、基本的に hook_tokens() および hook_token_info() を実装するモジュールを作成する必要があります、 APIで説明 として。誰もがすでにやったとは思わない。

ここに私がそれをする方法があります:

_function yourmodule_token_info() {
  $type = array(
    'name' => t('GET'),
    'description' => t('Tokens related to $_GET superglobal.'),
  );
  $tokens = array();
  foreach($_GET as $key => $val) { //discard $val now
    $tokens[$key] = array(
      'name' => $key,
      'description' => "\$_GET['$key']",
    );
  }
  return array(
    'types' => array('get' => $type),
    'tokens' => array('get' => $tokens),
  );
}

function yourmodule_tokens($type, $tokens, array $data = array(), array $options = array()) {
  if($type == 'get') {
    $replacements = array();
    foreach ($tokens as $name => $original) {
        $replacements[$original] = (string)$_GET[$name];
    }
    return $replacements;
  }
}
_

もちろん、上記のコードは本番対応ではありません。適切な型の処理、セキュリティの問題などを無視します。それはあなたを正しい軌道に乗せることを意図していますが、それを展開する前にあなた自身の正気を適用する必要があります。私は虐待の責任を負いません。元に戻す前に、削除された理由について読み、本当に必要なものだけを復元するように注意してください。

$ _GETの代わりに arg() でアクセス可能なパラメーターが必要な場合は、もちろんhook_tokensでwhileを使用してパラメーターを反復します。

_function yourmodule_tokens($type, $tokens, array $data = array(), array $options = array()) {
  if($type == 'arg') {
    $replacements = array();
    $i = 0;
    while ( NULL !== ($arg = arg($i))) {
        $replacements["arg:$i"] = (string)$arg;
    }
    return $replacements;
  }
}
_

それに応じてyourmodule_token_info()を変更します。

3
Mołot