コンテンツタイプを作成します。私の問題は、このコンテンツタイプが頻繁に変更されることです(6か月ごとに、いくつかのフィールドを追加し、他のフィールドを削除します)。
どうしますか私はいくつかの選択肢を考えていました:
1)作成するすべてのバージョンのデフォルト値を使用して「バージョン」フィールドを作成します。 「hook_form_alter」を使用すると、バージョンに応じてフィールドを非表示または表示できます。
2)別のオプションは、すべてのバージョンの新しいコンテンツタイプを作成することです。 ?
あなたはそれについてどう思いますか?どのバージョンが最適ですか?
正直に言うと、既に持っているコンテンツを実際に保持したい場合、この種の干渉は、私の意見では、単純な拡張とフィールドの可視性によって対処するのが最善です。
多数のコンテンツタイプを用意しても、実際には機能しません。検索やビューのような多数のシナリオがあり、複数のタイプからのプルが「うまく機能する」だけではありません。
私がこれを見る方法は、私がそれを正しく理解すれば、CCKは基本的にフィールド用のテーブルを自動的に作成するということです。フィールドを追加すると、スキーマとテーブルにより多くのものが追加されます。フィールドを「削除」したい場合、CCKはこのデータをスクラップし、それが存在しなくなってしまいます。
私が見るように、これに対処する最良の方法は、新しいフィールドで1つのコンテンツタイプを定期的に増やし、フィールド可視性モジュールで「古い」フィールドを非表示にすることです。もしあなたがそんなに気が向いているなら、あなたがほのめかしたようにそれをプログラム的に行うことができます。古いデータは、この方法で同じタイプ(およびテーブル)で引き続き使用できます。
タイプの「バージョン管理」出力の場合、はい、理論的にはバージョンフィールドをタイプに追加できますが、フィールド(およびその結果としてノードフォーム)を定期的に変更している場合は、簡単に出力できます。いずれにせよ、おそらくさまざまなビューとノードテンプレートを更新する必要があります。表示スイートモジュールを使用すると、最後の方が簡単に実現できます。テンプレートで手を汚さずにノード表示などを処理するUI(頻繁に更新する場合に便利ですか?)
Features モジュールは、バージョン管理をコーディングするために、この種のデータベースコンテンツ用に設計されています。コンテンツタイプを作成して、フィーチャーとしてエクスポートできます。この機能は、他のソースコードと同様にバージョン管理できます(Git、SVNなどを使用)。
コンテンツタイプを複製したいだけの場合、Drupal 6のCCKモジュールには、それを可能にするコンテンツコピーサブモジュールがあります。Drupal 7、これがコアに組み込まれているかどうかはわかりませんが、フィーチャーを使用してこのタスクを実行します。