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

[gelöst] Von- und Bis-Datum über hook_views_data

Eingetragen von Exterior (2903)
am 28.08.2010 - 14:23 Uhr in
  • Views
  • Drupal 6.x

Hey Leute,

ich habe über ein Modul und hook_form einen eigenen Inhaltstyp implementiert. Vorerst teste ich damit nur ein wenig herum, vor allem in Bezug auf hook_views_data, um die Felder in Views unterzubringen. Ziel der ganzen Sache ist es, das Modul Calendar (welches ein Datumsfeld als Argument fordert) korrekt mit meinen eigenen Datumsfeldern zu verwenden.

Der Inhaltstyp hat also als Felder ein zusätzliches Text-Feld und zwei Textfelder, in die ein Datum eingetragen werden soll - ein Von- und ein Bis-Datum. Gespeichert wird das ganze in einer eigenen Tabelle.

So sehen das Tabellen-Schema und der hook_form aus:

<?php
function my_own_type_schema()
  {
   
//Bitte keine Kommentare dazu, dass in der t-Funktion englischer Text rein kommt, das böse Schema-Modul ist Schuld ;-)

   
$schema['my_own_type_tabelle'] = array(
     
'description' => t('Diese Tabelle ist von einem Test-Modul'),
     
'fields' => array(
       
'nid' => array(
         
'description' => t('ID des zugehörigen Nodes'),
         
'type' => 'int',
         
'length' => '10',
         
'unsigned' => TRUE,
         
'not null' => TRUE),
       
'text' => array(
         
'description' => t('Eingegebener Text'),
         
'type' => 'varchar',
         
'length' => '255',
         
'not null' => TRUE),
       
'datum1' => array(
         
'description' => t('eingegebenes Datum'),
         
'type' => 'varchar',
         
'length' => '10',
         
'not null' => TRUE),         
       
'datum2' => array(
         
'description' => t('eingegebenes Datum'),
         
'type' => 'varchar',
         
'length' => '10',
         
'not null' => TRUE),   
        ),
     
'primary key' => array('nid'),
    );
  return
$schema; 
 
  }
?>


<?php
function my_own_type_form(&$node, $form_state)
  {
   
$type = node_get_types('type', $node);
   
   
$form['title'] = array(
     
'#type' => textfield,
     
'#title' => check_plain($type->title_label),
     
'#required' => TRUE,
     
'#default_value' => $node->title,
     
'#weight' => -5,
     
'#maxlength' => 255,
    );
   
   
$form['body_filter']['body'] = array(
     
'#type' => textarea,
     
'#title' => check_plain($type->body_label),
     
'#default_value' => $node->body,
     
'#rows' => 12,
     
'#weight' => 0,
     
'#required' => FALSE,
    );
   
   
$form['body_filter']['format'] = filter_form(FILTER_FORMAT_DEFAULT, null, $parents=array());
   
   
$form['text'] = array(
     
'#type' => textfield,
     
'#title' => 'Zusatz Text',
     
'#default_value' => $node->text,
     
'#required' => FALSE,
     
'#weight' => 2,
     
'#maxlength' => 255,
     
    );
   
   
$form['datum_1'] = array(
     
'#type' => textfield,
     
'#title' => 'Von-Datum',
     
'#default_value' => $node->datum_1,
     
'#required' => FALSE,
     
'#weight' => 4,
     
'#maxlength' => 20,
    );
   
   
$form['datum_2'] = array(
     
'#type' => textfield,
     
'#title' => 'Bis-Datum',
     
'#default_value' => $node->datum_2,
     
'#required' => FALSE,
     
'#weight' => 5,
     
'#maxlength' => 20,
    );
   
    return
$form; 
  }
?>

Damit bekomme ich den eigenen Inhaltstyp mit allen gewünschten Feldern und das Speichern klappt auch wunderbar (die beiden Datums-Felder werden als Timestamps gespeichert).

Nun habe ich noch eine Datei namens "my_own_type.views.inc" angelegt und folgendes eingetragen:

<?php
function my_own_type_views_data()
  {
   
$data=array();
   
   
$data['my_own_type_tabelle']['table']['group'] = 'My own Type';
   
   
$data['my_own_type_tabelle']['table']['base'] = array(
     
'field' => 'nid',
     
'title' => t('My own Type'),
     
'help' => t("This is my own nodetype"),
     
'weight' => -9,
    );

   
//joins
   
$data ['my_own_type_tabelle']['table']['join'] = array(
     
//...to the node table
     
'node' => array(
         
'left_field' => 'nid',
         
'field' => 'nid'
     
),
    );

 
//Fields
 
$data ['my_own_type_tabelle']['nid'] = array(
     
'title' => 'Termin Node',
     
'help' => 'Die Node ID des Termins',
     
'field' => array(
         
'handler' => 'views_handler_field'
     
),
     
'relationship' => array(
         
'base' => 'node',
         
'field' => 'nid',
         
'handler' => 'views_handler_relationship',
         
'label' => t('Node')
      ),
     
'argument' => array(
         
'handler' => 'views_handler_argument_node_nid',
         
'name field' => 'title',
         
'numeric' => TRUE,
         
'validate type' => 'nid'
     
),
     
'sort' => array(
         
'handler' => 'views_handler_sort'
     
)
  );

  
$data ['my_own_type_tabelle']['text'] = array(
     
'title' => 'Zusatz-Text',
     
'help' => 'Der gespeicherte Zusatz-Text',
     
'field' => array(
         
'handler' => 'views_handler_field'
     
),
     
'relationship' => array(
         
'base' => 'my_own_type_tabelle',
         
'field' => 'text',
         
'handler' => 'views_handler_relationship',
         
'label' => 'My Type'
     
)
  );
 
  
$data ['my_own_type_tabelle']['datum'] = array(
     
'title' => 'Datum-Feld',
     
'help' => 'Gespeichertes Datum des Termins',
     
'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'
     
)
  );
 
return
$data;        
}


/**
* Implementation of hook_date_api_fields
*/
function my_own_type_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(),
   
// Granularity of this date field's db data.
   
'granularity' => array('year', 'month', 'day', 'hour', 'minute', 'second'),
  );

  switch (
$field) {
    case
'my_own_type_tabelle.datum1':
    case
'my_own_type_tabelle.datum2':
      return
$values;
  }
 
  return
$values;
}
?>

Damit stehen mir die gewünschten Felder in Views zur Verfügung, klappt ganz gut.

Mein Ziel ist es, diese Datums-Felder für das Calendar-Modul zu verwenden, welches ein Datumsfeld als Argument benötigt. Ich habe es schon mit dem oben gezeigten Code hinbekommen, dass ich Nodes mit einem Datum speichere und diese dann an der richtigen Stelle im Kalender auftauchen. Was noch nicht klappt wie es soll ist die Verwendung eines "Bis-Datums".

Wenn man das mit einem Date-Field von CCK macht, kann man ein Von- und ein Bis-Datum für einen Node auswählen und dann wird dieser Node für alle Tage zwischen diesen beiden Daten eingetragen. (Also wenn man einen Node mit Von-Datum 01.09.2010 und Bis-Datum 04.09.2010 speichert, dann wird er im Kalender auch am 02.09 und 03.09 eingetragen)

Die Frage ist nun: Wie kann ich es einrichten, dass meine beiden Datums-Felder auch so behandelt werden können wie diese Date-Felder? Dass ich also in meine beiden eigenen Felder ein Von- und ein Bis-Datum eintrage und der Node dann entsprechend in alle betroffenen Tage im Kalender eingetragen wird.

Kennt sich da jemand von euch aus? Das wäre wirklich ziemlich wichtig.

‹ Mehrere Filme (JW Player) per Views auf einer Seite untereinander anzeigen Inhaltstyp kopieren/Eportieren/Importieren? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hat sowas echt noch nie

Eingetragen von Exterior (2903)
am 06.09.2010 - 13:52 Uhr

Hat sowas echt noch nie jemand gemacht und kann helfen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich verweifel langsam :( Kann

Eingetragen von Exterior (2903)
am 14.09.2010 - 16:14 Uhr

Ich verweifel langsam :( Kann denn wirklich niemand helfen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

So, durch Zufall habe ich

Eingetragen von Exterior (2903)
am 18.09.2010 - 19:40 Uhr

So, durch Zufall habe ich jetzt ein paar Infos gefunden, welche den gewünschten Effekt bringen:

Man muss in hook_date_api_fields für das Von-Datum noch den Schlüssel 'fromto' festlegen und die Von- und Bis-Felder als related Fields eintragen.

Für alle, die das Problem auch mal haben und hier gelandet sind - so sieht der hook jetzt bei mir aus und funktioniert wie gewünscht:

<?php
/**
* Implementation of hook_date_api_fields
*/
function my_own_type_date_api_fields($field) {

  if (
$field == 'my_own_type_tabelle.datum1')
    {
      return array(
       
'sql_type' => DATE_UNIX,
       
'tz_handling' => 'site',
       
'fromto' => array('my_own_type_tabelle_datum1','my_own_type_tabelle_datum2'), //--> das ist der ausschlaggebende Teil
       
'related_fields' => array('my_own_type_tabelle_datum1','my_own_type_tabelle_datum2'), //--> dies ebenfalls
       
'granularity' => array('year', 'month', 'day'),
      );
    }
   
 
//ich erstelle zwei verschiedene Arrays, weil das Bis-Feld diverse Infos nicht benöigt ('fromto' und 'related_fields')
 
if ($field == 'my_own_type_tabelle.datum2')
    {
      return array(
       
'sql_type' => DATE_UNIX,
       
'tz_handling' => 'site',
       
'granularity' => array('year', 'month', 'day'),
      );
    }
}
?>

Damit kann man jetzt einfach das Von-Feld als Argument angeben und das Von-Feld Als Feld zur Calender-View hinzufügen und schon wird das Von-Feld inkl. Bis-Feld ausgegeben und alle Tage dazwischen bekommen diesen Node ebenfalls zugeordnet =)

Man kann zwar in Views bei den Feld-Einstellungen nicht auswählen, ob man nur das Von-Datum oder das Von- und Bis-Datum ausgeben möchte (das hängt eben davon ab, was man in hook_date_api_fields einträgt) aber hauptsache, es funktioniert so, wie es soll.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • [Gelöst] Menü wie hier samsung.com/de/ wie, mit Drupal?
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • [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?
Weiter

Neue Kommentare

  • Казино с минимальным депозитом
    vor 3 Stunden 7 Minuten
  • Казино с минимальным депозитом
    vor 3 Stunden 8 Minuten
  • Казино с минимальным депозитом
    vor 3 Stunden 9 Minuten
  • Казино с минимальным депозитом
    vor 3 Stunden 11 Minuten
  • Казино с минимальным депозитом
    vor 3 Stunden 12 Minuten
  • melde mich mal wieder, da ich
    vor 2 Wochen 4 Tagen
  • Hey danke
    vor 2 Wochen 5 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 6 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 3 Tagen
  • Da scheint die Terminologie
    vor 3 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250238
Registrierte User: 20457

Neue User:

  • Znogsnernoimb
  • ByteScrapers
  • Mroppoofpaync

» 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 19 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