web-dev-qa-db-ja.com

保存時にノードのタイトルを変更する

ユーザーがノードを保存するたびに、テーブルのautoincrement-idを前に付けて、IDが一意になるようにします。

したがって、ノードのタイトルが「xyz」の場合、一意のID「299999-xyz」として保存する必要があります。理想的には、このIDは一意のノードIDである必要がありますが、ノードがテーブルに保存されるまで実際のIDを知ることができない場合があります。

それを達成するための最良の方法は何ですか?

フォームの検証機能でタイトルを変更することを考えています。このIDは、time()の数値にすることができます。

*PS:*私はそのようなノードをたくさん持っているので、他のノードからそれらをリンクするとき(node-reference)、このIDはそのようなノードを一意に識別しますノードフォームの「オートコンプリートテキストボックス」。

3
AgA

hook_nodeapi を使用してこれを行うことができると思います_$op == "presave"

function mymodule_nodeapi (&$node, $op, $a3 = NULL, $a4 = NULL)
{
    if ($op == "presave") {
      $unique = mymodule_get_unique_number();
      $title = preg_replace("/^\d+\-/", "", $node->title);
      $node->title = $unique . "-" . $title;
    }
}

コツは、PCREパターンを微調整して、$ titleから一意の番号を抽出することです。より良いデリミターを入れることは助けになるでしょう。元のタイトルは常にuid == 1のみが編集できるCCKフィールドに保存して、そこからノードタイトルを作成できます。

編集:質問をもう一度読んでください。保存するたびにタイトルが変更されます。それが必要かどうかはわかりません。 pregの結果に基づいて、ロジックを編集してこれを1回だけ行うことができます。

4
mpdonadio

モジュール " Automatic Nodetitles "を使用します。これにより、タイトルフィールドでトークンを使用できます。有効にすると、タイトルに任意のパターンを設定できます。たとえば、/ admin/content/node-type/YOURCONTENTTYPEのパターンを「[nid]-[title]」に設定します。既存のノードは自動的に更新できます。

7
Lance

これは、phpを使用して hook_insert を呼び出すことによっても可能です。このフックは、ノードが保存され、nidが利用可能になった後に呼び出されるため、変更を加えてノードを再保存できます。

0
Ashlar