3

別の投稿でこれを非常に手動で行う方法を見ました: URL にクエリ パラメータを追加するにはどうすればよいですか?

これはあまり直感的ではないように思えますが、近日公開予定の「URL スコープ」を使用してこれを達成するためのより簡単な方法について誰かが言及しています。この機能はまだリリースされていませんが、どのように使用すればよいですか?

4

2 に答える 2

2

stdlib ミキサーを使用している場合は、URL パラメーターを追加、表示、編集、および削除するためのヘルパー関数を提供する URL スコープを使用できるはずです。簡単な例を次に示します。

$original_url = "http://cuteoverload.com/2013/08/01/buttless-monkey-jams?hi=there"
$new_url = url($original_url) {
  log(param("hi"))
  param("hello", "world")
  remove_param("hi")
}
log($new_url)

トリチウムテスターの例: http://tester.tritium.io/9fcda48fa81b6e0b8700ccdda9f85612a5d7442f

ほとんど忘れていましたが、ドキュメントへのリンク: http://tritium.io/current (URL カテゴリをクリックする必要があります)。

于 2013-08-02T07:28:37.707 に答える
0

私の知る限り、組み込みの方法はありません。クエリパラメーターを追加する方法をここに投稿し、既にURLにある場合は重複しないようにします。

functions/main.ts ファイル内で、次のように宣言できます。

# Adds a query parameter to the URL string in scope.
# The parameter is added as the last parameter in
# the query string.
#
# Sample use:
# $("//a[@id='my_link]") {
#   attribute("href") {
#     value() {
#       appendQueryParameter('MVWomen', '1')
#     }
#   }
# }
#
# That will add MVwomen=1 to the end of the query string,
# but before any hash arguments.
# It also takes care of deciding if a ? or a #
# should be used.
@func Text.appendQueryParameter(Text %param_name, Text %param_value) {
    # this beautiful regex is divided in three parts:
    #   1. Get anything until a ? or # is found (or we reach the end)
    #   2. Get anything until a # is found (or we reach the end - can be empty)
    #   3. Get the remainder (can be empty)
    replace(/^([^#\?]*)(\?[^#]*)?(#.*)?$/) {
        var('query_symbol', '?')
        match(%2, /^\?/) {
            $query_symbol = '&'
        }

        # first, it checks if the %param_name with this %param_value already exists
        # if so, we don't do anything
        match_not(%2, concat(%param_name, '=', %param_value)) {

            # We concatenate the URL until ? or # (%1),
            # then the query string (%2), which can be empty or not,
            # then the query symbol (either ? or &),
            # then the name of the parameter we are appending,
            # then an equals sign,
            # then the value of the parameter we are appending
            # and finally the hash fragment, which can be empty or not
            set(concat(%1, %2, $query_symbol, %param_name, '=', %param_value, %3))
        }       
    }
}

必要な他の機能 (削除、変更) も同様に実現できます (functions/main.ts 内に関数を作成し、いくつかの正規表現マジックを活用することによって)。

それが役に立てば幸い。

于 2013-08-01T23:25:31.313 に答える