Erstellen Sie ein DataObject, um Tabellenzeilen und -spalten in SilverStripe zu erstellen

8

Ich versuche, etwas ganz anderes für eine SilverStripe-Site zu tun: auf mehreren Unterseiten sind Datentabellen, und diese Tabellen haben jeweils ihren eigenen Satz von Spaltenüberschriften und einige Tabellen haben mehr Spalten als andere. Ich möchte vermeiden, Tabellen im Rich Text-Editor zu erstellen, da dies zu vielen Fehlern führt und im Laufe der Zeit mühsam verwaltet werden muss.

Was ich tun möchte, ist ein DataObject zu erstellen, das eine n-te Anzahl von Spalten und eine n-te Anzahl von entsprechenden Zeilen erlaubt. Auf diese Weise kann ich eine Schleife (oder möglicherweise zwei) in der Vorlage aufrufen, in der die HTML-Tabellenstruktur bereits vorhanden ist. Die Content-Manager haben die vollständige Kontrolle darüber, welche Spalten in den Tabellen für jede gegebene Unterseite enthalten sind, und sie müssen sich keine Gedanken über die HTML-Tabellenkonfiguration machen.

Ich hatte ein paar Ideen, die nicht die gewünschten Ergebnisse bringen, ohne a) die Benutzeroberfläche für Content-Manager zu komplex zu gestalten und b) die Spalten nicht korrekt mit den Zeilen zu verknüpfen.

Ich habe daran gedacht, ein DataObject für Table Header und einen für Table Rows zu erstellen, aber dann bin ich ratlos, wie man sie so kombinieren könnte, dass es sinnvoll wäre, besonders da es eine beliebige Anzahl von Spalten geben könnte / p>

Würde jemand Vorschläge dazu haben, sich diesem zu nähern?

UPDATE: Ok, ich habe etwas für das TableRowItem-Datenobjekt, das funktionieren kann und fast funktioniert. Das Problem ist jedoch jetzt: Wie speichere ich die Feldwerte in der Datenbank, wenn ich sie im Prinzip fliegend erstelle? Wie es jetzt ist, ist das einzige Feld, das in der Datenbank speichert, das PDF-Datei-Upload-Feld, alles andere wird gelöscht, wenn Sie auf "Erstellen" klicken.

%Vor%

Aber das sind die kniffligen Teile: Herauszufinden, wie man Werte von einem DataObject in Labels für ein anderes mappen und dann automatisch eine n-te Anzahl von Zeilen basierend darauf erzeugen kann, wie viele Spalten erstellt wurden.

%Vor%

Hier sind die Klassen TableColumnSet und TableRowValue. Ich dachte mir, es würde einen Satz Spaltenüberschriften geben, die mit einer n-ten Anzahl von Zeilen verknüpft sind. Daher dachte ich, es würde eine $has_many -Beziehung zwischen den beiden Klassen geben, da ein TableColumnSet viele TableRowValues ​​haben könnte, aber es würde nur einen geben TableColumnSet für alle TableRowValues. Ich hatte gehofft, die TableRowValues ​​mit den TableColumnSet-Werten zu verbinden, indem ich ein Dropdown mit allen erzeugten Spaltentiteln benutze, aber das klingt einfach nach einer schlechten Idee. Die manuelle Zuordnung jedes Feldes in einer Zeile zu den Spaltenüberschriften scheint mühsame und potentiell schwierige Content-Manager zu sein.

%Vor%

Ich habe das Gefühl, dass hier etwas vor sich geht, zumindest in Bezug auf die Beziehung zwischen den Spaltenüberschriften und Zeilen? Ich bin mir jedoch nicht sicher.

    
Dejsa Cocan 15.05.2017, 13:05
quelle

1 Antwort

-1

Ich könnte hier nicht gut sein, da ich keine Erfahrung mit SilverStripe habe. Aber ... meine PHP / HTML-Tabellenlösung könnte hier gelten:

%Vor%

Die Array-Struktur für alle Schritte in der Schleife soll den Standardspeicher des Servers sauberer halten, um alte Daten zu entfernen. Wenn Sie concat ( $var .= "string"; ) alles als Zeichenfolgen verwenden, bleiben alle Referenzen im Arbeitsspeicher gespeichert, und der Server wird beim Anzeigen großer Tabellen blockiert. Ich hoffe, das ist eine Hilfe.

    
G4Hu 23.05.2017 21:26
quelle

Tags und Links