web-dev-qa-db-ja.com

node:urlトークンがクリーン(エイリアス)URLを返さない

これは次の質問です: ルールの実行を5分間遅らせる方法

アクションを遅らせない場合、node:urlトークンはエイリアスURLを返さず、トークンIDが...node/idのURLを返します。これは、このURLがまだまだ利用できないためだと思いました。クリーンURLを使用する必要があります。そうしないと、スクレイパーがHTTPステータスコード302を取得し、ページを正しくスクレイピングできないためです。

Pathauto モジュールを使用して、URLを自動的に作成しています。

しかし、sedulerを使用しているときは、まだクリーンなURLを取得できません。これらは私の現在の設定です:

screenshot

スクリーンショットでマークされたトークンはクリーンなURLを返すはずですが、クリーンでない/node/idを返します。トークンを[entity-fetched:url:path]に変更しようとしましたが、これは無効なURLを返すようです(またはURLがまったくない場合、これをデバッグできますか?)。

ルールのトークンを使用してクリーンなURLを取得できないのはなぜですか?

奇妙なことは...新しいノードを作成する代わりにノードを編集すると、node:urldoesはクリーンなURLを返しますが、 shedulerを使用するとき。

編集:

{ "rules_publish_to_fb" : {
    "LABEL" : "Publish to fb",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "rules_scheduler", "fb_autopost_entity" ],
    "ON" : { "node_insert" : [], "node_update" : [] },
    "IF" : [
      { "node_is_of_type" : {
          "node" : [ "node" ],
          "type" : { "value" : {
              "event" : "event",
              "inspiration_theme" : "inspiration_theme",
              "news_item" : "news_item"
            }
          }
        }
      },
      { "entity_has_field" : { "entity" : [ "node" ], "field" : "field_facebook_message" } },
      { "entity_has_field" : { "entity" : [ "node" ], "field" : "field_facebook_published" } },
      { "NOT data_is_empty" : { "data" : [ "node:field-facebook-message" ] } },
      { "data_is" : { "data" : [ "node:status" ], "value" : "1" } }
    ],
    "DO" : [
      { "schedule" : {
          "component" : "rules_facebook",
          "date" : "+2 minutes",
          "param_node" : [ "node" ]
        }
      }
}

そして

{ "rules_facebook" : {
    "LABEL" : "facebook",
    "PLUGIN" : "action set",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "fb_autopost_entity" ],
    "USES VARIABLES" : { "node" : { "label" : "node", "type" : "node" } },
    "ACTION SET" : [
      { "entity_fetch" : {
          "USING" : { "type" : "node", "id" : [ "node:nid" ] },
          "PROVIDE" : { "entity_fetched" : { "entity_fetched" : "Fetched entity" } }
        }
      },
      { "entity_create" : {
          "USING" : {
            "type" : "facebook_publication",
            "param_type" : "link",
            "param_user" : [ "site:current-user" ]
          },
          "PROVIDE" : { "entity_created" : { "facebook_link" : "Facebook link" } }
        }
      },
      { "data_set" : {
          "data" : [ "facebook-link:field-facebook-message" ],
          "value" : "[node:field-facebook-message]"
        }
      },
      { "data_set" : {
          "data" : [ "facebook-link:field-facebook-link" ],
          "value" : "[entity_fetched:url]"
        }
      },
      { "publish_to_facebook" : {
          "USING" : { "publication" : [ "facebook-link" ], "pages" : "1247812435236072" },
          "PROVIDE" : { "facebook_publication_id" : { "facebook_publication_id" : "Facebook publication returned ID" } }
        }
      },
      { "drupal_message" : { "message" : "[entity_fetched:url]" } }
    ]
  }
}
1
Bv202

オプション1(a):別のトークンを試す

これらのトークンのいずれかを使用して、どのような結果が得られるかを確認します。

  • [site:current-page:url]
  • [node:node-path]
  • [node:node-url]

オプション1(b):追加パラメーターとしてURLを渡す

ノードパスエイリアスをユーザーに送信 」という質問への回答に触発された場合、URLの正しい値(または上記で提案したトークンのいずれか)にアクセスできる方が幸運かもしれません。その値を追加のパラメーターとしてルールコンポーネントに渡すだけです(つまり、既に持っている「ノード」パラメーターの上に)。そしてもちろん、代わりにルールコンポーネントでそのパラメーターの値を使用します。

あなたがもっと幸運かもしれないと思う理由は、あなたはすでにそれを持っているからです "node_is_of_type "-条件。そのため、上記の質問の回答と同様に、ルールコンポーネントをスケジュールする最初のルールで使用できるはずです。

オプション2:ルールのデバッグを実行する

オプション1で問題が解決しない場合は、実際のルールをさらにデバッグすることをお勧めします。詳細は以下のとおりです(指定した順序で)。

基本的なデバッグ

Rules はすばらしいですが、期待どおりに機能しない場合はデバッグが難しい場合もあります。このようなデバッグを行うための典型的な機能はいくつかありますが、私の[〜#〜] k [〜#〜] eep -[〜#〜] i [〜#〜] t -Super -[〜#〜] s [〜#〜]私がよく使用する簡単なテクニックは私の-[〜# 〜] bingo [〜#〜]-trick。このようなルールのサンプルは、「 管理者がプロファイルを更新するときに、ユーザーにメールを送信するためにどのルール条件を使用できるか? への私の回答にあります。愚かですが、シンプルで効率的です(私は思います)。

ルール設定を使用したデバッグ

あなたの質問への答えを見つけるのに役立つかもしれない他の何かは、 Rulesdebugging ...ルール内settingsを見ることですルールモジュールに付属するデバッグ機能を少し試してみてください。少なくとも "Rules Evaluation Log"を見てください(実行されているルールロジックが実際にそのロジックが期待するものと一致することを確認するには)。

Develモジュールを使用したデバッグ

そのタイプのデバッグの結果によっては、(一時的に) Devel モジュールを有効にして、「一時的に」「値の表示」などのルールアクションを追加できるようにすることもできます。

ルールのデバッグに関するビデオチュートリアル

最近の2つのバリエーションの詳細については、(素晴らしい!)ビデオ " Debugging rules configuration "を参照してください。

1
Pierre.Vriens