Betrifft: Drupal7
Beispieltabelle: aktionen
Beispielmodul: aktionen

Mit Views auf eigene Tabellen zugreifen - intern und extern

  • Views eine weitere Tabelle verfügbar machen (anmelden)
    • Anmeldedaten in aktionen.inc (Variable $plugin)
    • in einem Unterverzeichnis im Modul (views/views_wizard)
    • Verzeichnis bekanntgeben: in hook_ctools_plugin_directory() für ($module == 'views_ui' && $plugin == 'views_wizard')
    • Es werden alle inc-Dateien des Verzeichnisses geladen
    • Von Views bereitgestellte Tabellen/-incDateien: in views/plugins/views_wizard
    • Hat views die Datei geladen, dann hat die Seite admin/structure/views/add im Feld Show eine weitere Auswahlmöglichkeit: Aktionen
  • Tabellendaten verfügbar machen
    • In hook_views_data() - also aktionen_views_data()
    • in Datei aktionen.views.inc (meinmodul.views.inc)
    • anmelden in hook_views_api() - aktionen_views_api()
      • Feld path, wenn nicht im Hauptverzeichnis des Moduls
      • Feld version (oder api): Versionsnummer, aktionen_views_api wird ignoriert, wenn version>views_api_version() oder version < views_api_minimum_version()
    • Tabellenbeschreibung in aktionen_views_data():

Zugriff auf externe Tabellen

  • In settings.php eine zweite Datenbank angeben (etwa 'extern' ⇒array ('default' ⇒ array (…)) )
  • aktionen_schema() muss in aktionen.install vorhanden sein,
  • aber kein aktionen_install() und aktionen_uninstall(), DB und Tabelle müssen vorhanden sein
  • im hook aktionen_views_data() die externe Datenbank angeben
    • $data['aktionen']['table']['base']['database'] = 'extern'

Mit entity arbeiten

  • Modul entity muss installiert und aktiviert sein
  • Informationen zur entity im hook hook_entity_info() bereitstellen (aktionen.module)
    • entity-name = 'aktionen', base table = 'aktionen', …
  • für externe Tabelle den Controler überschreiben
    • 'controller class' ⇒ 'AktionenController',
    • im Controler→buildQuery()
      • aktuelle Connection auf 'extern' setzen: $old_key = Database::setActiveConnection('extern');
      • parent-buildQuery ausführen: $query = parent::buildQuery($ids, $conditions, $revision_id);
      • aktuelle Connection zurücksetzen: Database::setActiveConnection($old_key);
      • query zurückgeben: return $query;
  • in aktionen_views_data() 'entity type' angeben
    • $data['aktionen']['table']['entity type'] = 'aktionen'
  • in admin/structure/views/view/%/edit kann man im Feld FORMAT/Show die Option auswählen (nicht für Format=table)
  • weiter passiert nicht viel, da fehlt wohl noch einiges…
aufgaben/db_extern/x_uebersicht.txt · Zuletzt geändert: 2022/06/06 15:13 von 127.0.0.1
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki