web-dev-qa-db-ja.com

Node参照トークンを認識しないURLエイリアス?

URLエイリアスを特定のトークンと連携させるのに問題があります。具体的には、CCKによって生成されたトークンNodeリファレンスモジュールです。確立しようとしているURL構造は次のとおりです。

/department/course/lecture

各セクションは参照されるノードを参照します...したがって、講義は学部を参照するコースを参照します。理にかなっていますか?トークンを配置した私のURLエイリアス構造は、次のようになります。

[field_course_department-title-raw]/[field_course_number-raw]/[field_lecture_display_number-raw]

URLエイリアスが生成されると、次のようになります。

/%5Bfield_course_department-title-raw%5D/%5Bfield_course_number-raw%5D/lecture-2

したがって、機能している唯一のトークンはレクチャー(最後のトークン)です。最初の2つのトークンは、Drupalでも認識されません。ご覧のように、トークンのブラケットをHTMLエンティティコードにエンコードしています。これらの2つは、CCK Node参照フィールド。2つの問題のあるトークンが存在し、URLエイリアス設定ページの[置換パターン]セクションで利用可能だったので、Drupalそれらを認識できますよね?

何が起きてる?!助けて!どんなアイデアや提案も大歓迎です!前もって感謝します。

4
Sam

I_THINKの問題は、トークンが現在のノードのコンテンツでのみ生成されることです。たとえば、他のノードに保存されている他のすべての情報を見つけるためにノード参照の階層をたどる固有の情報はありません。

だから、あなたはすでに講義にあるコースへのノード参照を持っているように見えるので、そこに正しい[トークン]があることを確認してください(おそらくトークン番号-ローの代わりにトークン-タイトル-ロー?)部門にレベルを付けるには、おそらく講義ノードにフィールドを配置し、舞台裏で部門ノードの参照を(フックのノードAPI()と$ opを使用してコースのnidをnode_load()で保存して取得する必要があります)そこ)

1
Jimajamma

次のようなnodeapi()を使用します。

YOURMODULE_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {

  if ($node->type=='lecture' && $op == 'presave') {
    // grab the nid of the course and load it...
    $course=node_load($node->field_course[0]['nid']);  
    // set the nid of the course's department in a field in the lecture...
    $node->field_department[0]['nid']=$course->field_department[0]['nid'];  
  }

}

もちろん、講義ノードタイプに部署フィールドを追加し、さらにすべてのfield_XXXXを正確なシステムに設定する必要があります。

ユーザーに表示せずにこれを行うには、Node Form Columns moduleを使用して、フィールドが必要ない場合(http://drupal.org/project/nodeformcols)または非表示の場合にフィールドを非表示にしますtフィールドを非表示にする権限でフィールドを編集できるようにするか、それが機能しない場合は、cssで表示するだけです:)

免責事項:私はこれらすべてをメモリから入力したので、タイプミスがあるかもしれませんが、要点はここにあります:)

0
Jimajamma