Entwicklung eines Filters für Views mit 2 Datenbanktabellen - Webform
am 12.07.2021 - 17:15 Uhr in
Hallo zusammen,
ich programmiere gerade einen Filter für Views. Hierfür gibt es ja viele Beispiele im Netz. Jedoch habe ich einen speziellen Fall, für den ich keine Lösung finde. Wer der Modul Webform verwendet weiß, dass die Daten in 2 Datenbanktabellen gespeichert sind, was mich vor ein Problem stellt. Ich frage mich: Wie entwickelt man eine derartige Verknüpfung in einem Filter mit Drupal-Funktionen?
1. Tabelle: webform_submission
-> sid = primärschlüssel des Datensatzes
-> Diese Tabelle ruft die View bereits auf.
2. Tabelle: webform_submission
-> sid = primärschlüssel
-> value = enthält den Wert des Datensatzes (einfache Version)
Ziel:
Der Nutzer soll über den Filter den VALUE (aus Tabelle 2) per Form eingeben können. Drupal muss dann die Beziehung zu Tabelle 1 herstellen, wo mein Problem liegt.
Hier ist mein bisheriger Code (relevanter Ausschnitt) für Tabelle 1, in der es unktioniert, wenn der Nutzer die SID und nicht den VALUE ins Form eingibt:
cumstommodul_name.views.inc
cumstommodul_name_data_alter(array &$data) {
$data['webform_submission']['cumstommodul_name'] = [
'filter' => array(
'title' => t('Name: Filter - sl_viewfilter'.$result1),
'help' => t('Self made by jorek impli: durchsucht Feld webform_id in SQL Tabelle webform_submission'),
'field' => 'sid',
'id' => 'string',
),
];
}
cumstommodul_name_handlername.inc
class cumstommodul_name_handlername extends views_handler_field {
/**
* Add some required fields needed on render().
*/
function construct() {
parent::construct();
$this->additional_fields['sid'] = array(
'table' => 'webform_submission_data',
'field' => 'sid',
);
}
/**
* Loads additional fields.
*/
function query() {
$this->ensure_my_table();
$this->add_additional_fields();
}
}
Ist hook_views_data_alter() in diesem Fall womöglich hilfreich? Leider kann ich die beschreibung auf der Seite nicht ganz nachvollziehen. Auf den ersten Blick wird dort mit 2 Datenbanktabellen gearbeitet, aber ich bekomme sie nicht an mein Script angepasst.
https://api.drupal.org/api/drupal/core%21modules%21views%21views.api.php...
- Anmelden oder Registrieren um Kommentare zu schreiben
PhilippCar schrieb Hallo
am 13.02.2022 - 11:02 Uhr
Hallo zusammen,
ich programmiere gerade einen Filter für Views. Hierfür gibt es ja viele Beispiele im Netz. Jedoch habe ich einen speziellen Fall, für den ich keine Lösung finde. Wer der Modul Webform verwendet weiß, dass die Daten in 2 Datenbanktabellen gespeichert sind, was mich vor ein Problem stellt. Ich frage mich: Wie entwickelt man eine derartige Verknüpfung in einem Filter mit Drupal-Funktionen?
1. Tabelle: webform_submission
-> sid = primärschlüssel des Datensatzes
-> Diese Tabelle ruft die View bereits auf.
2. Tabelle: webform_submission
-> sid = primärschlüssel
-> value = enthält den Wert des Datensatzes (einfache Version)
Ziel:
Der Nutzer soll über den Filter den VALUE (aus Tabelle 2) per Form eingeben können. Drupal muss dann die Beziehung zu Tabelle 1 herstellen, wo mein Problem liegt.
Hier ist mein bisheriger Code (relevanter Ausschnitt) für Tabelle 1, in der es unktioniert, wenn der Nutzer die SID und nicht den VALUE ins Form eingibt:
cumstommodul_name.views.inc
cumstommodul_name_data_alter(array &$data) {
$data['webform_submission']['cumstommodul_name'] = [
'filter' => array(
'title' => t('Name: Filter - sl_viewfilter'.$result1),
'help' => t('Self made by jorek impli: durchsucht Feld webform_id in SQL Tabelle webform_submission'),
'field' => 'sid',
'id' => 'string',
),
];
}
cumstommodul_name_handlername.inc
class cumstommodul_name_handlername extends views_handler_field {
/**
* Add some required fields needed on render().
*/
function construct() {
parent::construct();
$this->additional_fields['sid'] = array(
'table' => 'webform_submission_data',
'field' => 'sid',
);
}
/**
* Loads additional fields.
*/
function query() {
$this->ensure_my_table();
$this->add_additional_fields();
}
}
Ist hook_views_data_alter() in diesem Fall womöglich hilfreich? Leider kann ich die beschreibung auf der Seite nicht ganz nachvollziehen. Auf den ersten Blick wird dort mit 2 Datenbanktabellen gearbeitet, aber ich bekomme sie nicht an mein Script angepasst.
https://api.drupal.org/api/drupal/core%21modules%21views%21views.api.php/function/hook_views_data_alter/8.2.x
Ich kann dich da in deiner fragestellung total nachvollziheen, auch ich erkenne da nicht wirklich die Antwort. Viel erfolg, Mit zwei Datenbanktabellen wurde dort auch auch meines Erachtens gearbeitet.