一部のページ(パス)は1つのエンティティを表しています。例えば:
- これらのパスにあるページは、1つのノードエンティティを表します。entity_id(nid)はXXです。
- / node / xx
- / node / xx / delete
- / node / xx / edit
- このパスのページは、1つの検索サーバーエンティティ(検索APIモジュールで定義)を表し、entity_id(machine_name)は「apache_solr」です。
- / admin / config / search / search_api / server / apache_solr
現在のフックまたは関数がそれを渡さない場合、このエンティティ(idおよびtype)に関する基本データをどのようにロードしますか?
現在のエンティティを取得する標準的な方法は明らかに使用すること menu_get_object($entity_type,$position_of_id_in_url)
です。ただし、これは1つのエンティティタイプのみをコーディングしていることを前提としています。エンティティタイプをプログラムで記述する必要があり、さらに悪いことに、このエンティティが使用するエンティティIDのURL位置を調査してハードコーディングする必要があります。 。
これまでに見つけることができる最も近いのは、ページの基になるシステムURI(例:)を取得してから、この提案のようなものにsubstr(request_uri(),strlen($base_path))
基づいて怪しいスイッチリストを記述し、サイトがこれまでに持っていると思われるすべての考えられるエンティティについてケースを推測し、ハードコーディングします。 。しかし、それよりももっと良いものがあるに違いありませんよね?
コアからの一般的な解決策が最善ですが、ctools(ページマネージャー、コンテキストなど)、Entity API、Develなどの一般的なモジュールに依存する回答も受け入れます。
私の当面の必要性は、hook_field_widget_form()
(適切な構成とモジュールを使用して)フィールド化可能なエンティティタイプにアタッチできるウィジェット用の編集フォームです。したがって、一般的な解決策が最善ですが、この関数内またはフォームでのみ機能する狭い答えも受け入れます(エンティティタイプに固有のIDおよびデータは$ formに埋め込まれているように見えますが、エンティティにキー入力されています特定の方法で入力するので、$ formから取り出すのは、鶏と卵の問題のようです)。
------------編集------------------
一部の人々は単純な一般的な問題を理解するのが難しいようです。これが別の使用例です(別の別の関連する問題が私が直面しています)。いくつかのエンティティーをリストするビューがあるとします。このビューは、ノードページやユーザープロファイル(またはその両方)などの1つのエンティティを表すことができるページのブロック/ペインとして配置されます。ビューのデータを読み取り、結果を確認するフックを設定しました(foreach $view->result as...
)。それがhook_views_pre_renderだとしましょう、つまり$ viewオブジェクトだけを持っているということです。ビューの結果の行にページと同じエンティティIDとエンティティタイプがある場合、何かを実行したい(たとえば、行を削除したり、フィールドデータを変更したりする)。ビューの結果からこのデータを抽出するためのロジックがあるので、必要なのは、生成されているページのentity_typeとentity_idを検索して比較することだけです。そのデータはDrupalのどこかにあります。そうでなければ、Drupalはこのビューをロードする必要があることを理解できなかったでしょう。それで、それがあなたがいるフックまたは関数に渡されないとき、どうやってそれを得るのですか?