ユーザーがノードを保存するたびに、テーブルのautoincrement-idを前に付けて、IDが一意になるようにします。
したがって、ノードのタイトルが「xyz」の場合、一意のID「299999-xyz」として保存する必要があります。理想的には、このIDは一意のノードIDである必要がありますが、ノードがテーブルに保存されるまで実際のIDを知ることができない場合があります。
それを達成するための最良の方法は何ですか?
フォームの検証機能でタイトルを変更することを考えています。このIDは、time()の数値にすることができます。
*PS:*私はそのようなノードをたくさん持っているので、他のノードからそれらをリンクするとき(node-reference)、このIDはそのようなノードを一意に識別しますノードフォームの「オートコンプリートテキストボックス」。
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回だけ行うことができます。
モジュール " Automatic Nodetitles "を使用します。これにより、タイトルフィールドでトークンを使用できます。有効にすると、タイトルに任意のパターンを設定できます。たとえば、/ admin/content/node-type/YOURCONTENTTYPEのパターンを「[nid]-[title]」に設定します。既存のノードは自動的に更新できます。
これは、phpを使用して hook_insert を呼び出すことによっても可能です。このフックは、ノードが保存され、nidが利用可能になった後に呼び出されるため、変更を加えてノードを再保存できます。