web-dev-qa-db-ja.com

drupal path_alias()のエンティティURLを使用しますか?

違いは何ですか?そして、いつあなたはどれを使うべきですか?

entity_uri() は私にとっては比較的新しく(Drupal 7)、ほとんど使用されていません。しかし、それは drupal_get_path_alias() よりもずっとクリーンでパフォーマンスが良いようです。

参考までに、 Tagadelicの問題 に対処するための背景情報を入手したいと思います。

5
berkes

これらの機能は実際にはあまり共通点がありません。どちらを使用しても問題ありません。実際には両方を使用しますが、drupal_get_path_alias()を直接呼び出すことはほとんどありません。

entity_uri()は、エンティティにリンクするためのパスとオプションを含む配列を返します。したがって、たとえばノードの場合、次のように呼び出します:entity_uri('node', $node)とすると、_node/$node->nid_が返されます。それはちょっとささいなことです。プライベートメッセージ(パスが_messages/view/$message->thread_id#privatemsg-mid-$message->mid_の場合)など、他のエンティティタイプでさらに興味深いものになります。

返された配列を次のように使用します:url($uri['path'], $uri['options'])(またはl()と同様に)。次に、その関数はdrupal_get_path_alias()を内部的に呼び出して、その内部パスにエイリアスがあるかどうかを確認し、それを使用します。

これは、特別な処理を行わなくても、エンティティの内部パスを生成できるという考え方です。実際の例は、Userpointsプロジェクトです。 Userpointsトランザクションは、タイプとIDを指定してエンティティを参照することをサポートします(はい、Userpointsはentity_typeの用語を使用しましたDrupal 5 ...)。以前は、ノードをサポートする大量のコードがありました。 、コメント、ユーザー、およびカスタムフックを使用して、より多くのものをサポートできます。モジュールをDrupal 7に移植すると、entity_uri()への単純な呼び出しですべてを置き換えることができました。すぐに使えるすべてのエンティティをサポートするようになりました: serpoints_create_description()

7
Berdir

多くのエンティティ中心の機能の「問題」は、エンティティタイプが必須パラメータであることです。 ( 私は以前に遭遇しました... )また、entity_uri()は完全に読み込まれたエンティティを必要とするため、entity_uriの呼び出しを多数実行する必要がある場合、パフォーマンスが低下する可能性があります。

一方、drupal_get_path_aliasでは、すべてのエンティティタイプのURLパターン(node => node/[nid]など)を知る必要があります(読み取り:ハードコード)。これはカスタムモジュールの場合は問題ないかもしれませんが、あらゆる種類のエンティティで動作するはずのcontribモジュールに割り込む可能性があります。

1
marcvangend

entity_uri()は、引数として渡されたエンティティに関連付けられたURIを返しますが、drupal_path_alias()は、引数として渡されたパスのエイリアスを返します。管理ページへのURL)。

たとえば、example.com/node/1(例:example.com/home)のエイリアスがある場合、次のコードは_$alias_を "home"に設定します。

_$alias = drupal_get_alias('node/1');
_

次のコードは、_$path_を「node/1」に設定します。

_$node = node_load(1);
$uri = entity_uri('node', $node);
$path = $uri['path'];
_

後者の場合、_"node/" . $node->nid_を使用できます。 entity_uri()を使用すると、ノードに関連付けられたURIが変更された場合でも正しいURIを取得でき、同じコードが異なる種類のエンティティに対して機能します。

1
kiamlaluno