0

Drupal でカレンダー モジュールを作成しています。クライアントのニーズにより、CCK フィールドに保存されたノードのブール変数を使用して終了日を非表示にできるようにする必要があります。

私の問題は、 theme_date_display_range() テーマ関数にフックすることで非表示にできることですが、モジュール内からはできません。私が見る限り、これはテーマ内からのみ可能です。これは、これを有効にする特定のテーマを使用しないと、終了日を非表示にできないことを意味します。

次に、特定のテーマを使用してそれで生活すると言った場合、 mytheme_date_display_range() が呼び出されたコンテキストをまだ見ることができないため、現在のノードが必要かどうかを知る方法がありません終了日を表示または非表示にします。変数として渡すこともできますが、これを行うためのより良い方法はありますか?

代わりに私のモジュールを使用するように日付のテーマ関数を上書きできますか?それが最善/正しい方法である場合、どうすればよいでしょうか?

4

1 に答える 1

1

さて、テーマ機能をまったく使用せずに良い解決策を見つけたと思います。日付をテーマにした theme_date_display_combination() を詳しく調べました。終了日が設定されていない場合は、開始日のみが表示されます。フックしてhook_entity_prepare_view()、日付フィールドと非表示の終了時間フィールドの両方が存在するかどうかを確認します。もしそうなら、ブール値に基づいて終了時間を設定解除します。

/**
 * Implements hook_entity_prepare_view().
 */
function kw_calendar_full_entity_prepare_view($entities, $type, $langcode) {
    foreach ($entities as &$entity) {
        if (isset($entity->field_event_date) && isset($entity->field_hide_endtime)     && $entity->field_hide_endtime[LANGUAGE_NONE][0]['value'] == 0) {
            unset($entity->field_event_date[LANGUAGE_NONE][0]['value2']);
        }
    }
}

これがいつか誰かを助けることを願っています...

于 2012-07-25T09:56:22.600 に答える