Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Views ›

Views, Calendar, Datumsfelder aus der DB, Datumsinterval,

Eingetragen von sewimoeller (27)
am 15.07.2010 - 16:59 Uhr in
  • Views

Hallo zusammen,

wäre sehr glücklich wenn jemand mir ein paar Tipps geben kann, suche schon seit langem nach der Lösung...

Ausgangslage: ich schreibe ein Modul (nennen wir das "modul1") mit einer Kalender-Sicht auf die Daten eines
bestehenden Modules ("modul2"). Ich darf modul2 nicht verändern. Das Problem ist, in dem modul2 wurde ein
Inhaltstyp nicht mit CCK, sondern mit Drupal-Hooks erstellt. Der Inhaltstyp hat From und To - Datums in der DB
als Unixtimestamp.

Ich habe mit dem hook_views_data() die Tabellen dem views Module bekannt gemacht. Auch hook_date_api_fields()
implementiert. Die Datums werden in der View angezeigt und ich kann sie mit 'OR' oder mit 'AND' verknüpfen.
Als ich vorher einen Event-Inhaltstyp mit CCK erstellt habe, musste ich nur einen von beiden Datumsfelder wählen,
und die Nodes wurden automatisch richtig angezeigt: wenn ein Event über mehrere Tage geht, wird er auch in jedem
Tag angezeigt. Bei den eigenen Datumsfeldern wird der Node nur an dem Anfangstag oder nur an dem Endtag angezeigt
oder verschwindet komplett aus der View, je nachdem wie ich die Datumsfelder verknüpfe.

Ich habe ein Screenshot gemacht.

Hier ist der Code-Ausschnitt aus dem hook_views_data():
(enddate hat gleiche händler)

$data['incidents']['startdate'] = array(
    'title' => t('Startdate'),
    // Information for displaying the startdate
    'field' => array(
      'handler' => 'views_handler_field_date',
      'click sortable' => TRUE,
    ),
    // Information for accepting a startdate as an argument
    'argument' => array(
     // 'handler' => 'date_api_argument_handler',   -  weiss nicht welchen Argumenthänder nehmen... beide ausprobiert -> hilft nicht
      'handler' => 'views_handler_argument_date',
    ),
    // Information for accepting a startdate as a filter
    'filter' => array(
      //'handler' => 'date_api_filter_handler',  - ?
      'handler' => 'views_handler_filter_date',
    ),
    // Information for sorting on a startdate
    'sort' => array(
      'handler' => 'views_handler_sort_date',
    ),
  );

Und hier ist hook_date_api_fields():

/**
* Implementation of hook_date_api_fields().
*
* All modules that create custom fields that use the
* 'views_handler_field_date' handler can provide
* additional information here about the type of
* date they create so the date can be used by
* the Date API views date argument and date filter.
*/
function hzdcalendar_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' => 'site',
    // 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('incidents.startdate', 'incidents.enddate'),
    // Granularity of this date field's db data.
    'granularity' => array('year', 'month', 'day', 'hour', 'minute', 'second'),
  );
 
  switch ($field) {
    case 'incidents.startdate':
    case 'incidents.enddate':
      return $values;
  }
}

Hat jemand eine Idee?

Liebe Grüße,
Katja

AnhangGröße
calendar1.jpg51.47 KB
‹ Views als JSON ausgeben [gelöst] Beschreibung bzw. Hilfe für ein Feld in der normalen Nodeansicht anzeigen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn du ein print_r($node)

Eingetragen von netzkoop (1820)
am 16.07.2010 - 07:42 Uhr

Wenn du ein print_r($node) machst sind die dann identisch bei den Datumsfeldern?
Vielleicht liegt es gar nicht an Views.

  • Anmelden oder Registrieren um Kommentare zu schreiben

das liegt an Views...

Eingetragen von sewimoeller (27)
am 16.07.2010 - 11:01 Uhr

Hi luzer,

die view habe ich als default view gespeichert, sprich in der Datei "module-name.views_default.inc", hook_views_default_views().
Da liegt die Beschreibung der View als array. Ich wüsste nicht, an welcher Stelle ich print_r($node) aufrufen kann, um die Infos
zu Nodes auszugeben... Eine Idee?

Aber ich habe das auch ohne print_r($node) überprüft: die Datums sind genau die, die im Node stehen: wenn man auf den Node klickt,
kommt man auf die Node-Seite und da stehen die. Vor allem habe ich die eigenen Tabellen mit node Tabelle verknüpft. Das steht bei
mir in dem hook_views_data():

// incidents table links directly to node table.
  $data['incidents']['table']['join']['node'] = array(
    'left_field' => 'nid',
    'field' => 'incident_id',
  )

Also ich denke die Datumsfelder werden schon die richtigen genommen. Das Problem liegt daran, dass sie "falsch zu einer SQL-Abfrage gemacht
werden". In SQL-Anfrage steht folgendes, was die Datumsfelder betrifft:

.....AND ((DATE_FORMAT(ADDTIME(FROM_UNIXTIME(incidents.startdate), SEC_TO_TIME(7200)), '%Y-%m') <= '2010-07' AND DATE_FORMAT(ADDTIME(FROM_UNIXTIME(incidents.startdate), SEC_TO_TIME(7200)), '%Y-%m') >= '2010-07')).....

Sollte aber so was stehen: startdate <= jetzt(2010-07) <= enddate oder so: startdate <= jetzt AND enddate >= jetzt
Dann würde alles funktionieren.

Ich habe diese Anfrage mit der SQL-Anfrage verglichen, die für einen mit CCK-erstellten Event gemacht wird:

SELECT ...
   node_data_field_event_datetime.field_event_datetime_value AS node_data_field_event_datetime_field_event_datetime_value,
   node_data_field_event_datetime.field_event_datetime_value2 AS node_data_field_event_datetime_field_event_datetime_value2
...
WHERE ....
    AND ((DATE_FORMAT(ADDTIME(FROM_UNIXTIME(node_data_field_event_datetime.field_event_datetime_value), SEC_TO_TIME(7200)), '%Y-%m') <= '2010-07' AND DATE_FORMAT(ADDTIME(FROM_UNIXTIME(node_data_field_event_datetime.field_event_datetime_value2), SEC_TO_TIME(7200)), '%Y-%m') >= '2010-07'))

Da wird es automatisch richtig selektiert. Eigentlich wenn man den hook_date_api_fields() implementiert, sollte es automatisch erkannt werden,
dass eigene Datumsfelder zusammen gehören. Ich habe noch überprüft, ob dieser Hook wirklich aufgerufen wird -> das ist der Fall.

Wenn ich einen Datumsargument auswähle: "Datum: Date (node)", dann kann ich die Datumsfelder unter "Date field(s)" anklicken. Hab schon alles ausprobiert:
beide auswählen -> mit OR oder UND verknüpfen, nur eine auswählen und auch OR, UND... Die SQL-Statement ist trotzem falsch: es wird immer nur startdatum oder enddatum genommen.

Vielen Dank im Voraus wenn jemand eine Idee dazu hat,
Leibe Grüße,
Katja

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 1 Tag
  • Hey danke
    vor 2 Wochen 2 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 3 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 9 Stunden
  • Da scheint die Terminologie
    vor 3 Wochen 12 Stunden
  • Kannst doch auch alles direkt
    vor 3 Wochen 4 Tagen
  • In der entsprechenden View
    vor 3 Wochen 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 4 Tagen
  • gelöst
    vor 6 Wochen 1 Tag
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20453

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 27 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association