web-dev-qa-db-ja.com

URLの音訳された引数からエンティティを取得する方法は?

私はパネルを持っています、そこで私は議論があります:分類学用語名

用語名は音訳されます(「Mycustomtaxonomytitle」からmy-custom-taxonomy-titleなど)

パスは次のようになります:my-custom-list-of-nodes/my-custom-taxonomy-title

引数「my-custom-taxonomy-title」からPHPコード(フック内)の元の分類用語名を取得するにはどうすればよいですか?

元の文字列には、発音区別符号、大文字、スペースを含めることができます。文字変換された引数「my-custom-taxonomy-title」から用語IDを検出するにはどうすればよいですか?

1
tomas.teicher

短い答え:

あなたはあなたが求めていることをすることはできません。

それはなぜですか?
音訳は非常に単純な手順であり、非常に特定の数の手順に従います。
-すべての文字を対応する音訳バージョンに置き換えます
-結果のURLが存在する場合は、存在しないURLが見つかるまで、最後に-{ここに番号を挿入}を追加します

文字変換を元に戻すのはそれほど簡単ではありません。 5つの異なるノード/用語/エンティティがまったく同じタイトルを持っている極端なケースを考えてみてください。文字変換されたパスは、/ common-title/common-title-0/common-title-1/common-title-2/common-title-3になります。

この場合、どの音訳されたタイトルが各エンティティに対応するかをどのようにして知ることができますか?作成日(最初に作成されたものが最小のインデックスを取得します)?これを予測するのは非常に複雑であるという事実に加えて、パスを手動で更新したり、エンティティの1つを削除して新しいエンティティを追加したりすると、問題が発生する可能性があります。


長い答え:

あなたが求めていることは実行可能ではありませんが、あなたが直面している特定の問題を解決するために、いくつかの異なるアプローチを使用することができます。

考えられる解決策1:
current_path 関数を使用できます。これにより、現在表示されているDrupalページのunaliasedパスが返されます。パネルのパスがどのようになっているのか正確にはわかりません。システムは機能しますが、idという用語が含まれているものを取得する可能性が非常に高くなります(フックに必要なものですよね?)。

これをコードでさらに調査するために、develがインストールされていると仮定して、次のようなことを行うことができます。

dpm(current_path());

考えられる解決策2:
上記の解決策が機能しない場合は、使用可能な変数を特定するために、さらに掘り下げる必要があります。あなたが始めることができる何かは簡単です:

dpm(get_defined_vars());

得られる結果によっては、定義された変数のどこかで用語名を見つけ、 taxonomy_get_term_by_name() 関数を使用してtidを取得できる場合があります。

0
F1234k