ノードタイプAがあり、ノードタイプBを指す「field_subnode」という名前のentity_reference fieldがあります。
A-> B
次のパターンを設定して、pathautoを使用しています。
タイプAのノードのURLパス:books/[node:title]
次のようなものが必要です:books/[node-type-A:title]/[node:title]タイプBのノードのパスとして、次のようなURLを取得します。
本/マイカーブック/ 1章
必要なものを取得するために使用する必要があるトークンはどれですか?
たとえば、次のような別のトークンを試しました:
books/[node:field-subnode:1:title]/[node:title]
しかし成功せず。
助けてくれてありがとう。
Entityプロジェクトの一部であるEntity Tokensモジュールが必要です: http://drupal.org/project/entity 。有効にすると、ツリーに使用可能な再帰トークンが表示されます。
私はサービスとサブサービスで同様の設定をしていて、次のパターンは美しく機能します。このパターンは、親サービスにリンクするfield_serviceという用語参照フィールドがあるサブサービスコンテンツタイプに設定しています。
services/[node:field-service:title]/[node:title]
あなたのケースでは、子ノードではなく親ノードに参照フィールドを設定しています。可能であれば、これを裏返します。そうでない場合、Aに設定されているフィールドを参照するBに配置できるトークンを認識していません(私の場合、Bのフィールドを参照するBのトークンです)。おそらくこれが勝つと思います技術的な問題のため、将来のリリースでも利用できない。
私は以下を使用しています:
お役に立てれば。
乾杯。
これは、最近使用した回避策です。単一のentityrefereneフィールドに独自のトークンを定義する必要があります。 mymoduleというモジュールがあるとすると、ノードのエンティティ参照フィールドはfield_subnodeと呼ばれ、[node:subnode:title]のようなトークンチェーンを使用できます。 mymoduleの名前を独自のモジュール名に変更し、実装後にキャッシュをクリアします。
/**
* Implements hook_token_info().
*/
function mymodule_token_info() {
return array(
'tokens' => array(
'node' => array(
'subnode' => array(
'name' => t('Node reference'),
'description' => t('Node referenced via field_subnode'),
'type' => 'node',
),
),
),
);
}
/**
* Implements hook_tokens().
*/
function mymodule_tokens($type, $tokens, array $data = array(), array $options = array()) {
$replacements = array();
$sanitize = !empty($options['sanitize']);
if ($type == 'node' && !empty($data['node'])) {
$node = $data['node'];
foreach ($tokens as $name => $original) {
switch ($name) {
case 'subnode' :
$default = '';
if (isset($node->field_subnode)) {
$subnode = entity_metadata_wrapper('node', $node)->field_subnode->value();
$default = $subnode->title;
}
$replacements[$original] = $sanitize ? filter_xss($default) : $default;
break;
}
}
if (isset($node->field_subnode) && $subnode_tokens = token_find_with_prefix($tokens, 'subnode')) {
$subnode = entity_metadata_wrapper('node', $node)->field_subnode->value();
$replacements += token_generate('node', $subnode_tokens, array('node' => $subnode), $options);
}
}
return $replacements;
}