web-dev-qa-db-ja.com

事前定義された範囲の日付値(今日、次の15日間、来月)でビューのカスタム公開フィルターを作成する方法

Start_dateおよびend_date(日付モジュール別のフィールド)を含むコンテンツタイプ「イベント」があります。

ビューにはこのイベントが一覧表示され、3つのオプションを持つSELECTを使用したカスタムの公開フィルターが必要です。

  • -すべて-
  • 今日
  • 次の15日
  • 来月

次の比較では:

今日(start_date <= NOW && end_date> = NOW)

今後15日間(start_date <= NOW + 15day && end_date> = NOW)

翌月(start_date <= $ next_month_last_day && end_date> = $ next_month_first_day)

上記のカスタムフィルターを作成する最良の方法は何ですか?

すべてを実行するビューカスタムフィルターハンドラーを作成する必要があります。この場合、ハンドラーで直接HTML選択を生成し、ビューインターフェイスを渡さずにデフォルトでそれを公開して、「これを公開する」をチェックすることができます。または、最初に上記の個別のフィルターをViewsインターフェイスを介して作成し、フォームを変更してすべてのフィルターを一意のSELECTに結合し、次にクエリを変更するのが最善ですか?

私はすでに確認しました ビューの公開された日付フィルターの簡単な日付セレクター ですが、グループ化されたフィルターは私にとっては解決策ではありません。その例では。

私も 日付フィールドの公開されたフィルターをカスタマイズする方法? を見ますが、提案されたようなテンプレートを使用することが私にとって適切な解決策であるかどうか、または目標を達成するよりエレガントな方法があるかどうかわかりません。

このモジュールも見つかりました: https://www.drupal.org/project/views_between_dates_filter が必要な選択を提供していません。

助けてくれてどうもありがとう。

cases

2
MXT

私はまさにこの目的のためにカスタムモジュールを書きましたが、私が望むよりも少し抽象化されていないため、リリースしていません。

これを行う方法は、 Views filter handler (驚くほど簡単です)と書くことです。ゲーム全体を譲り、少しの宿題を残さずに:読んでください。どうやって行くのか教えてください。

.infoファイルに1行必要です。

files[] = inc/views_relative_date_filters.inc

.moduleファイルでViews APIに登録します。

/**
 * Implements hook_veiws_api().
 */
function views_relative_date_filters_views_api() {
  return array(
    'api' => 2,
    'path' => drupal_get_path('module', 'views_relative_date_filters') . '/inc'
  );
}

ビューハンドラーを登録するinc/views_relative_date_filters.views.inc

function views_relative_date_filters_views_handlers() {
  return array(
  // ...
  );
}

function views_relative_date_filters_views_data() {
  $data = array();
  // ...
  return $data;
}

そして最後に、フィルタ自体をinc/views_relative_date_filters.inc

class views_relative_date_filters extends views_handler_filter {
  // You'll need an options form (just use the parent)
  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);
  }

  // You can use a views_form or an
  function exposed_form(&$form, &$form_state) {
    // Return a Form API select element
    // ... all, this-day, this-fornight, this-month
  }

  // The query to get your results based on your time period
  function query() {
    $this->ensure_my_table();

    // Get the value of the submitted filter
    if (isset($this->value[0])) {
      $value = $this->value[0];
    } else {
      $value = 'all';
    }

    // A switch on the $value
    switch( $value ) {
      case 'all';
        return;
      case 'this-month':
        // Modify your query with where conditions, groups, joins, whatever
        // ...
        break;
      case 'this-fortnight':
        // Modify your query with where conditions, groups, joins, whatever
        // ...
        break;
      case 'this-day':
        // ...
        break;
      case default;
        break;
    }
  }
}
3
Queenvictoria

私はようやく、目的を簡単に達成できるモジュール Composite Views Filter を見つけました。

(トピックを参照: https://www.drupal.org/node/2576837

0
MXT