[gelöst] Views Integration Datum
Eingetragen von manuelBS (330)
am 24.06.2010 - 16:16 Uhr in
am 24.06.2010 - 16:16 Uhr in
Hey, ich habe ein eigenes Modul mit einer eigenen Tabelle in der lediglich zwei Datumsfelder gespeichert werden. Das scheme ist wie folgt:
....
'nid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'vid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'date_from' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'date_till' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
....
Nun möchte ich, dass ich in views auf diese Tabelle, vor allem auf die Datumsfelder zugreifen kann.
Meine Views Handler habe ich in der .views.inc wie folgt definiert:
$data = array();
$data['MY_RANGE_TABLE']['table']['group'] = t('MY RANGE');
// tables + fields that can be used for SQL Joins
$data['MY_RANGE_TABLE']['table']['join'] = array(
'node_revisions' => array(
'left_field' => 'vid',
'field' => 'vid',
),
'node' => array(
'left_field' => 'vid',
'field' => 'vid',
),
);
$data['MY_RANGE_TABLE']['date_from'] = array(
'title' => t('Date from'),
'help' => t('date from'),
'field' => array(
'handler' => 'views_handler_field_date',
'click sortable' => TRUE,
),
'filter' => array(
'handler' => 'views_handler_filter_date',
),
'sort' => array(
'handler' => 'views_handler_sort_date',
),
'argument' => array(
'handler' => 'views_handler_argument_date',
),
);
Date till analog.
Nun will ich mir mit Views folgende Filtermöglichkeiten bereitstellen:
Zeige mit alle Nodes, bei denen das Feld date_from >= [EXPOSED FILTER DATUM A] UND date_till <= [EXPOSED FILTER DATUM B] liegt.
Kann mir jemand weiterhelfen, wie ich das hinbekomme?
Vielen Dank schonmal!
- Anmelden oder Registrieren um Kommentare zu schreiben
Muss ich vielleicht den
am 25.06.2010 - 17:53 Uhr
Muss ich vielleicht den Filter des Moduls NodeAPI verwenden? Oder gibt es gar einen völlig anderen Filter dazu?
______________________________________
Drupalentwicklung und Beratung, Drupal Business Application Framework
Ok ich habe es nun
am 28.06.2010 - 14:16 Uhr
Ok ich habe es nun hinbekommen.
Man muss zusätzlich hook_date_api_fields implementieren, dann wird auch das Datumsfeld zur Auswahl angeboten.
Sieht bei mir nun wie folgt aus:
/**
* Implementation of hook_date_api_fields
*/
function MY_MODULE_date_api_fields($field) {
$values = array(
// The type of date: DATE_UNIX, DATE_ISO, DATE_DATETIME.
'sql_type' => DATE_UNIX,
// Timezone handling options: 'none', 'site', 'date', 'utc'.
'tz_handling' => 'date',
// Needed only for dates that use 'date' tz_handling.
'timezone_field' => '',
// Needed only for dates that use 'date' tz_handling.
'offset_field' => '',
// Array of "table.field" values for related fields that should be
// loaded automatically in the Views SQL.
'related_fields' => array(),
// Granularity of this date field's db data.
'granularity' => array('year', 'month', 'day'),
);
switch ($field) {
case 'MY_TABLE.date_from':
case 'MY_TABLE.date_till':
return $values;
}
}
______________________________________
Drupalentwicklung und Beratung, Drupal Business Application Framework
related_fields
am 13.07.2010 - 15:34 Uhr
Hi manuelBS,
ich hatte das gleiche Problem. Meine Lösung sahr auch so aus, mit folgender Ausnahme.
'related_fields' => array('MY_TABLE.date_from', 'MY_TABLE.date_till');
in dem hook_date_api_fields.
Aber ich habe das für calendar module gebraucht, der sich auf views module aufsetzt.
Viele Grüße
auch andere händler
am 13.07.2010 - 15:40 Uhr
'field' => array(
'handler' => 'views_handler_field_date',
----------------------
'argument' => array(
'handler' => 'date_api_argument_handler',
--------------------------------
'filter' => array(
'handler' => 'date_api_filter_handler',
--------------------------
'sort' => array(
'handler' => 'views_handler_sort_date',
-------------------------
aber man kann wahrscheinlich die Vergleiche datum_from < datum < datum_to auch ohne diese Händler machen,
nur int vergleichen.