View aus einer MySQL-Tabelle
Eingetragen von Xeto (209)
am 22.03.2011 - 22:15 Uhr in
am 22.03.2011 - 22:15 Uhr in
Hallo,
ich wollte mich nun mal etwas genauer mit Views und Views_accordion beschäftigen um eine Ansicht meiner Daten aus einer MySQL-Tabelle zu realisieren.
Beschreibung der Daten
- Ein Datensatz besteht aus 4 Feldern von Nutzdaten
- Die Datensätze werden anhand zusätzlicher Felder sortiert und gruppiert
Die Anzeige
- Die Daten werden als Tabelle(n) ausgegeben
- Jede Gruppe dient als Überschrift eines Tabellenabschnitts und zum ein-/ausklappen mittels accordion
- Jeder Datensatz Nutzdaten werden in zwei Tabellenzeilen (1. Zeile -> 3 Felder, 2. Zeile -> letztes Feld) ausgegeben
Erstmal hoffe ich, dass ihr es soweit verstanden habt *g*
Und dann die Frage, ob das mit views (und views_accordion) realisierbar ist? Aktuell habe ich dazu einfach PHP-Code mit einer MySQL-Abfrage verwendet, jedoch würde ich hier gerne auf Views umstellen.
Ich bin mir auch noch nicht sicher, wie ich die Daten von Drupal aus ansprechen soll (als eigenständige MySQL-Tabelle?).
Grüße
Xeto
- Anmelden oder Registrieren um Kommentare zu schreiben
Woher kommt den die
am 23.03.2011 - 01:45 Uhr
Woher kommt den die MySQL-Tabelle? Direkt aus Drupal oder hast du diese Tabelle selbst irgendwie eingefügt? Wenn letzteres der Fall ist, kannst du Views gleich wieder vergessen, außer du schreibst ein Modul, welches die Tabelle und die Felder für Views bekannt macht.
Zitat: Wenn letzteres der
am 23.03.2011 - 08:30 Uhr
Wenn letzteres der Fall ist, kannst du Views gleich wieder vergessen, außer du schreibst ein Modul, welches die Tabelle und die Felder für Views bekannt macht.
Ähm, ich wär ja mal froh Views besser zu verstehen und mehr als in einfachsten Beispielen nutzen zu können, da ist ein eigenes Modul in dem Zusammenhang vielleicht schon ein Schritt zu weit ;)
Aktuell sind die Daten in einer selbst erstellten und von Drupal unabhängigen Datenbank. ich habe mir die Daten in CSV gewandelt und dann in die Datenbank importiert, damit ich überhaupt mal halbwegs mit den Daten arbeiten kann. Von da aus habe ich diese dann mittels PHP in einer Node geladen und verarbeitet. Hat funktioniert, gefällt mir aber nicht...
Eine neue Überlegung wäre die Daten als eigenen content type in Drupal zu bringen mit den entsprechenden Feldern. Ich denke/ hoffe mal, dass dadurch die Performance der Seite nicht leidet. Wie ich die Daten aus MySQL-DB in Drupal bekomme, weiß ich noch nicht genau, aber ich schätze mal am einfachsten mittels einem kleinen Script, welches die Daten ausliest und dann Nodes des neuen content types generiert.
Abgesehen davon die Daten sauber in Drupal zu bekommen, wäre es praktisch aus diesen ein angepasstes PDF- oder Excel-Dokument zu generieren. Aktuell werden die Daten in der DB und in einem Excel-Dokument gepflegt. Damit wir diese Themen aber nicht mischen, mach ich dafür ein neues Thema auf, damit wir hier nicht vom Thema abkommen...
Aus Daten PDF- oder Excel-Dokument generieren
Views ist im Grunde "nur" ein
am 23.03.2011 - 20:32 Uhr
Views ist im Grunde "nur" ein Werkzeug, um mittels SQL-Abfragen bestimmte Daten aus der Datenbank zu holen und daraus dann themebare Listen zu erstellen. Dies funktioniert aber eben nur mit Tabellen, die Views auch kennt, weil man sonst natürlich in Views nicht auf die Felder zugreifen kann.
PHP-Code in einem Node sollte prinzipiell die letzte Variante sein, da gibt es in aller Regel wesentlich bessere Möglichkeiten, um das sauber zu lösen.
Da wäre es z. B. um längen besser, so eine Ausgabe mit einem eigenen Modul zu machen (welches dann auch nicht viel mehr Code enthalten würde als dein Node).
Ich habe jetzt leider keine Ahnung, wie umfangreich deine Daten sind usw. Wenn du die Daten aber z. B. mittels Nodes und CCK-Feldern in Drupal einpflegst, hast du mit Views Zugriff darauf, das wäre eine einfache Lösung. Oder eben doch ein kleines Modul schreiben, welches sich um die Darstellung der Daten kümmert, komplett ohne auf Views zurückzugreifen.
Mal so eine Idee. Wenn er die
am 23.03.2011 - 20:47 Uhr
Mal so eine Idee.
Wenn er die Daten als Nodes hat,
kann er dies mittels node_save() in Drupal als node speichern.
Dann kennt Drupal die Daten und er kann die alte Tablle löschen.
Dann könnte er eine view erstellen "viewdata"
und etwa so wieder ausgeben:
print views_embed_view('viewdata', 'default', $node);
Sollte funktionieren.
LG
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
ich würde in diesem
am 23.03.2011 - 20:58 Uhr
ich würde in diesem Fall
http://drupal.org/project/node_import
empfehlen.
Inhaltstyp mit entsprechenden Feldern anlegen, csv (utf-8 kodiert!) importieren
und schon kannst du mit views alles machen
Sepp
Würde sicherlich beides
am 23.03.2011 - 21:03 Uhr
Würde sicherlich beides funktionieren, je nach Aufbau der Daten wäre die eine oder andere Variante besser.
Wenn es mit node_import gehen würde, würde ich auch eher das empfehlen, dann funktioniert das komplett ohne eigenes Modul.
node_import gibt es bisher
am 23.03.2011 - 21:16 Uhr
node_import gibt es bisher nur für Drupal 6 glaube ich ;) Aber es sollte sich auch ein kurzes Script schreiben lassen, welches Nodes von einem Typen erzeugt und die Datensätze dort in Felder schreibt...
Dann hätte ich aber pro Datensatz eine Node. Wäre jetzt nicht schlimm, sondern einfach ein größerer Umfang als ich bisher hatte ;)
Wäre es dann in dieser Form möglich die Nodes (enthält meine 4 Felder Nutzdaten) als View anzuzeigen, wobei diese gruppiert sein sollen und jede Gruppe mittels Views_accordion getoggelt werden können muss.
Er hat die Daten doch schon
am 23.03.2011 - 22:06 Uhr
Er hat die Daten doch schon ein einem Node geladen.
Da braucht er doch kein Modul für den Import in die Node
Tabelle wenn er das einfach mit
node_save($node)
machen kann.
Anstatt node import modeul zu nehmen könnte er
auch die CSV Daten so aufbereiten dass sie direkt in die
Node Table passen.
allerdings finde ich das mit dem save einfacher.
LG
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Zitat: Er hat die Daten doch
am 24.03.2011 - 01:07 Uhr
Er hat die Daten doch schon ein einem Node geladen.
Keine Ahnung, wo du das liest, aber bisher scheint der Stand zu sein, dass die Daten in einer separaten MySQL-Tabelle vorliegen. Es existieren also noch keine Nodes, welche diese Daten enthalten. Also benötigt er in irgendeiner Form einen Import in die Node-Tabelle, schließlich müsste für jeden Datensatz ein extra Node angelegt werden, damit Views darauf zugreifen kann. Auf welchem Wege am Ende die Daten in Nodes kommen, ist ja im Grunde egal, aber für die Einfachheit wäre es auf jeden Fall ratsam, die Daten in separaten Nodes anzulegen.
Wäre es dann in dieser Form möglich die Nodes (enthält meine 4 Felder Nutzdaten) als View anzuzeigen, wobei diese gruppiert sein sollen und jede Gruppe mittels Views_accordion getoggelt werden können muss.
Views kann dann auf jeden Fall auf die Felder der Nodes und somit auf die einzelnen Daten zugreifen. Wenn du für jeden Datensatz einen Node anlegst, wäre das also kein Thema. Ob und wie genau dann das mit der Gruppierung und Views_Accordion funktioniert, kann ich dir nicht sagen, habe sowas noch nie probiert.
@Exterior: Ja, du hast es
am 24.03.2011 - 08:12 Uhr
@Exterior:
Ja, du hast es richtig verstanden ;) Daten sind in einer MySQL-Tabelle und keine Drupal-Nodes! Ich habe aber beim Googeln mal was gefunden, das man recht einfach eine Node generieren könnte. Wenn das geht kann ich ja ein Script schreiben, welches die Datensätze nacheinander einliest und als Node wieder abspeichert. Das werde ich einfach mal bei Gelegenheit testen.
In meiner MySQL-Tabelle habe ich noch eine Spalte für die Sortierung und eine für die Gruppierung. Ich denke selbiges muss ich dann auch bei der Node berücksichtigen. Noch schöner wäre natürlich diese nicht anhand einer Nummer zu sortieren, sondern (zusätzlich) per Drag&Drop innerhalb jeder Gruppe und die Reihenfolge der Gruppen selbst.
Wenn wir jetzt mal das accordion außer acht lassen: Kann Views pro Gruppe eine HTML-Tabelle generieren und diese untereinander anzeigen? Dabei soll die jeweilige Gruppe als Überschrift darüberstehen (die Zeile der Überschrift soll dann ja später das Toogle-Event auslösen). Wenn der generierte Quellcode passt, kann ich das auch ohne views_accordion selbst lösen (wie aktuell ja auch direkt mit jquery).
Leider habe ich keine Ahnung,
am 24.03.2011 - 15:36 Uhr
Leider habe ich keine Ahnung, was Views unter Drupal 7 genau kann.
Aber teste es doch einfach mal aus. Lege ein paar Test-Nodes an, welche solche Daten enthalten (du musst ja nicht deine vorhandenen Daten in Nodes "umwandeln", sondern kannst erstmal fiktive Daten verwenden) und versuche, damit ein gewünschtes Views-Ergebnis zu erstellen.
Ich habe halt auch schon
am 24.03.2011 - 15:41 Uhr
Ich habe halt auch schon keinen Vergleich zu Drupal 6. Da habe ich eigentlich noch gar nicht mit Views gearbeitet.
Somit wäre für mich bereits nützlich zu wissen, ob das unter Drupal 6 in der Form möglich ist.
Testen werde ich das sowieso mal mit einigen Dummy-Einträgen ;)
So, ich habe nun mal mit
am 31.03.2011 - 21:09 Uhr
So, ich habe nun mal mit einem Inhaltstyp, Views und Views_Accordion ein wenig gespielt und eine Ansicht erhalten, die - wenn auch noch nicht passend gestylt - rein inhaltlich meinen Vorstellungen entspricht. Der Inhaltstyp enthält die notwendigen Felder und wird anhand eines Kategorie-Feldes gruppiert. Die Sortierung erfolgt anhand einer eindeutigen Nummer (ebenfalls ein Feld). Auch die Darstellung als Accordion klappt dank dem Module Views_accordion mit wenigen Klicks :)
Die angezeigten Felder sind innerhalb von DIV-Elementen und mit passenden Klassen versehen, was stylen mittels CSS als Tabelle (2 Zeilen je Datensatz) möglich machen sollte.
Noch nicht ganz klar ist mir, wie ich die Kategorien realisiere, welche nicht automatisch sondern händisch sortiert werden sollen. Aber da muss ich mal testen, ob ich mittels Taxonomie und Begriffen als Kategorien (diese sollten ja sortierbar sein und in dieser Reihenfolge in der View angezeigt werden?) hinbekomme... Das werde ich aber heute nicht mehr testen ;)