記事カテゴリ:
コンテントタイプにリビジョン(履歴)の保存/戻す操作ができる
- Drupalのコンテントタイプ管理にリビージョン有効化/無効化設定ができます
- リビジョンが有効されたコンテントタイプの内容の変更履歴が保存されています
記事を評価するモジュール(Fivestar)の変更履歴がリビジョン反映されない
- 評価モジュール(Fivestar)がモジュール(Vote API)の元で作成されました。かつ評価内容をフィールドに組み込みました
- 但し、Fivestarの評価履歴はリビジョンに反映されないです(操作方法ビデオを参考)
Drupalの関数(field_attach_update)でフィールド更新する場合にリビジョン管理はできません
- モジュール(Fivestar)の評価履歴管理できないのみにならず、関数(field_attach_update)を利用してコンテンツ内容変更する場合にリビジョンの管理はできません
- Fivestarの評価動作を追跡調査してみました。
// \sites\all\modules\fivestar\fivestar.module // 186行当たりに、Fivestarの評価結果保存 function _fivestar_update_field_value($entity_type, $entity, $field_name, $langcode, $value) { $entity->{$field_name}[$langcode][0]['rating'] = $value; $entity->original = isset($entity->original) ? $entity->original : NULL; field_attach_presave($entity_type, $entity); field_attach_update($entity_type, $entity); }
- 評価内容を関数(field_attach_update)で行っています
- 関数(field_attach_update)の説明を読むと、データ更新は関数(field_sql_storage_field_storage_write)を呼び出して行います
- 関数(field_sql_storage_field_storage_write)はフィールドのリビジョンを削除して、再作成のもとなります
- Fivestarの評価動作を追跡調査してみました。
- 関数(field_attach_update)が個別のフィールド更新する機能が持っていますが、リビジョンの管理はできません
- hook(例:hook_attch_update)を利用して、個別のフィールドのリビジョン更新方法は見つかりません
- フィールドのリビジョンを更新するにはオブジェクト全体更新する必要があるようです(例:node_save(), entity_save())
コメントを追加