WBCE CMS – Way Better Content Editing.
You are not logged in.
Hallo zusammen,
ich möchte gerne unsere Vereinsseite neu mit WBCE aufbauen und habe auch schon die ersten Inhalte entsprechend einrichten können. Bei der Darstellung mit dem Module csv2table bekomme ich aber zwei Probleme einfach nicht in den Griff:
Egal in welchem Format ich die die CSV Datei erstelle und auf den Server hochlade, es werden einfach keine Umlaute korrekt dargestellt.
In dem von mir genutzen Themplate Deizerr wird die Tabelle mit weißer Schrift auf weißen Grund dargestellt. Leider finde den Punkt nicht, wo ichj das im Module ändern könnte.
Hat jemand einen Lösungsansatz für mich?
Last edited by tsv (06.03.2023 07:29:34)
WBCE Version: 1.6.0 / PHP Version: 8.1.15 / Template: Deizerr 0.7
Wichtig ist es nicht, dass man es schon kann, sondern das man einfach erst einmal anfängt!
Offline
Hat jemand einen Lösungsansatz für mich?
So halb. Du willst es aber auch wirklich gleich wissen ;-)
1) Installiere das Tool "Frontend Final CSS Editor"
2) Rufe dieses Tool unter Admin-Tools > Frontend Final CSS Editor auf
3) Füge dort den CSS-Code aus datatables-dark.css ein, hängt unten an diesem Post (hier gefunden) - Anmerkung: Ich krieg's nicht hin, dass die Sortierpfeile angezeigt werden, die sind FontAwesome5-basiert, aber selbst mit
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.1.0/css/v4-shims.min.css" integrity="sha512-p++g4gkFY8DBqLItjIfuKJPFvTPqcg2FzOns2BNaltwoCOrXMqRIOqgWqWEvuqsj/3aVdgoEo2Y7X6SomTfUPA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
im Head des Templates klappt's bei mir nicht
4.) Stelle sicher, dass Deine CSV als UTF-8 gespeichert ist. Ggf. mit Notepad++ öffnen und umkonvertieren:
Dann sollte es ungefähr so aussehen:
Last edited by florian (16.02.2023 15:50:37)
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Hallo Florian,
danke für die schnelle Antwort!
Ich habe gestern Abend gleich mal ein wenig herumgebastet.
Das Problem mit den Pfeilen ist schon blöd, da die Steuerzeichen die dort erscheinen echt doof aussehen, Aber der Tipp mit dem Frontend Final CSS Editor an sich ist schon einmal klasse. Ich beschränke mich darin einfach auf die Änderung der Textfarbe und bin schon super zufrieden. Ich habe dann zwar kein komplettes Dark-Theme aber eigentlich sieht es mit dem Template auch klasse aus, wenn die Tabelle hell bleibt:
td {
border: 5px transparent solid;
color: #555;
font-size: smaller;
}
Die Konvertierung zu UTF-8 hat auch geholfen!
Kann man eine Tabelle eigentlich auch, am besten gleich mit vor eingestelltem Suchfilter, auf mehreren Seiten einsetzen? Da csv2table immer nach der Block ID verlangt finde ich keine Möglichkeit. Wenn es irgendwie ginge müsste man nur eine Tabelle pflegen und kann die ("Teil-"Inhalte) mehrfach zur Anzeige nutzen
Last edited by tsv (17.02.2023 08:40:10)
WBCE Version: 1.6.0 / PHP Version: 8.1.15 / Template: Deizerr 0.7
Wichtig ist es nicht, dass man es schon kann, sondern das man einfach erst einmal anfängt!
Offline
Kann man eine Tabelle eigentlich auch, am besten gleich mit vor eingestelltem Suchfilter, auf mehreren Seiten einsetzen?
Das ist ja DataTables, was für die Such-, Sortier- und Filterfunktionen sorgt. Man kann per Javascript die URL auslesen und dann die Anzeige entsprechend vorgefiltert initialisieren.
Ansatz: https://stackoverflow.com/questions/112 … r-in-a-url
Die /modules/csv2table/filterapplied.php entsprechend anpassen.
Außerdem noch eine Abfrage drumherum bauen, ob es einen Wert für die Vorfilterung gibt, sonst gibt es JS-Fehler, wenn kein Parameter übergeben wurde.
Anmerkung: die auf Stackoverflow geposteten Funktionen zum Auslesen der URL-Parameter haben zumindest bei mir nicht funktioniert. Aber auch hier weiß das Internet Rat:
https://www.sitepoint.com/get-url-param … avascript/
Das muss man dann sinnvoll kombinieren.
Ich kann da noch tiefer ins Detail gehen, aber vielleicht willst Du selbst erstmal versuchen, das hinzubekommen?
Last edited by florian (17.02.2023 19:50:47)
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Danke für die Ansätze aber da fehlt mit das PHP Wissen!
Bei CSS und HTML geht es bei mir gerade noch aber zu mehr reicht es leider nicht.
Bin ja gerad ebei WBCE gelandet, weil es so schön einfach ist
Ich dachte, dass es vielleicht mit ein paar Einstellungen zu realieseren wäre aber dann arbeite ich wohl erst einmal noch an den anderen "Baustellen" der Vereinseitenumsetzung.
WBCE Version: 1.6.0 / PHP Version: 8.1.15 / Template: Deizerr 0.7
Wichtig ist es nicht, dass man es schon kann, sondern das man einfach erst einmal anfängt!
Offline
Ich weis jetzt nicht ob es dir weiterhilft als Laie.
Installiere doch mal Dynamic Table hinzu, kann sein das es dann einfacher für dich wird,
https://addons.wbce.org/pages/addons.ph … m&item=101
Last edited by Slugger (19.02.2023 20:02:19)
Hoster: ALL-INKL *** Grundsätzliche WBCE Konfig ***
WBCE: 1.5.4 • BE: 2.1.0 • PHP: 8.1.16 * 1. Projekt: FE: Simple responsive • BE: Argos * 2. Projekt: FE: hortal • BE: Argos * 3. Projekt: FE: WBCEZon • BE: Argos * 4. Projekt: FE: WBCETik • BE: Argos
Status Projekt 1-4: OK
Online
Ich weis jetzt nicht ob es dir weiterhilft als Laie.
Installiere doch mal Dynamic Table hinzu, kann sein das es dann einfacher für dich wird,
https://addons.wbce.org/pages/addons.ph … m&item=101
Danke für die Idee! Allerdings kann ich dort nicht auf eine csv aufbauen, die ich gern erst einmal beibehalten würde, da ich sie noch in der DTP Software nutze. Behalte das Modul aber im Hinterkopf, falls ich doch mal auf eine HTML Tabelle wechsel.
Wenn ich es richtig gesehen habe, könnte ich dort aber auch nicht "vorfiltern", also auf Basis nur einer Tabelle, auf verschiedenen Seiten unterschiedliche Inhalte aus der Tabelle anzeigen?
WBCE Version: 1.6.0 / PHP Version: 8.1.15 / Template: Deizerr 0.7
Wichtig ist es nicht, dass man es schon kann, sondern das man einfach erst einmal anfängt!
Offline
Bei csv2table ist DataTables schon drin, Dynamic Tables nützt da nichts bzw. das lässt sich nicht miteinander kombinieren.
DynamicTable ist nützlich, wenn Du auf einer Seite (Page) bereits einen Abschnitt mit einer normalen (syntaktisch sauberen) HTML-Tabelle mit einer ID (<table id="irgendwas">)hast, sei es in einem WYSIWYG-Abschnitt oder als Output von anderen Modulen wie z.B. Members oder OneForAll. Dann kannst Du auf derselben Seite einen DynamicTable-Abschnitt anlegen, dort die ID der im Abschnitt darüber befindlichen Tabelle angeben, noch ein paar Optionen von DataTables zu- oder abwählen.
Eine Vorfilterung ist da aber ohne Anpassungen auch nicht möglich, und für Deine Idee, dieselbe CSV für unterschiedliche Darstellungen auf mehreren Seiten zu nutzen, ist das nichts.
Ein denkbarer Ansatz, ist, das Modul csv2table so aufzubohren, dass:
1) es nicht die Abschnitts-ID im Dateinamen vororaussetzt, was noch verhältnismäßig einfach ginge,
2) es dann seiten- bzw. abschnittsspezifisch nur Zeilen ausgibt, die bestimmten Mustern entsprechen (etwas schwieriger).
Für Punkt 1 braucht einfach nur die /modules/csv2table_module_config.php anzupassen:
$csv_file = WB_PATH.MEDIA_DIRECTORY.'/'.$mod_dir.'/csv-'.$section_id.'.csv';
$csv_name = 'csv-'.$section_id.'.csv';
Ändern zu
$csv_file = WB_PATH.MEDIA_DIRECTORY.'/'.$mod_dir.'/irgendwas.csv';
$csv_name = 'irgendwas.csv';
Für Punkt 2 - da begebe ich mich jetzt auf dünnes Eis - wäre an der /modules/csv2table/view.php herumzubasteln, und zwar hier:
foreach($aCSV as $k => $d) {
$rowcount++;
if ($start == $rowcount) continue;
echo '<tr>';
for ($i=0; $i<$fields; $i++) {
echo '<td>'.$d[$i].'</td>'.PHP_EOL;
}
echo '</tr>'.PHP_EOL;
}
Das ist der Code, der reihenweise die Inhalte der Tabellenzellen ausgibt. Ich weiß jetzt nicht, wie Deine Tabelle konkret aufgebaut ist, aber wenn man da jetzt noch ein, zwei Abfragen drumherum setzt, kann man sozusagen serverseitig vorfiltern und braucht nicht mit Javascript und URL-Parametern herumzupuzzeln.
Für eine Testtabelle, die so aufgebaut ist, sähe das so aus:
foreach($aCSV as $k => $d) {
$rowcount++;
$outputRow=false;
switch ($section_id) {
case "15":
if (in_array("rot",$d)) {
$outputRow = true;
}
break;
case "16":
if (in_array("grün",$d)) {
$outputRow = true;
}
break;
default:
$outputRow = true;
break;
}
if ($start == $rowcount) continue;
if ($outputRow) {
echo '<tr>';
for ($i=0; $i<$fields; $i++) {
echo '<td>'.$d[$i].'</td>'.PHP_EOL;
}
echo '</tr>'.PHP_EOL;
}
}
Zunächst wird eine zusätzliche Variable $outputRow definiert, die standardmäßig false ist.
Dann wird mit switch($section_id) {...} die Abfrage auf die Section-ID (Abschnitts-ID) eingefügt, von wo aus das Modul gerade aufgerufen wird. Je nach Abschnitt wird nun eine Prüfung für eine bestimmte Bedingung ausgeführt, die erfüllt sein muss, damit eine Zeile ausgegeben wird.
Im Beispiel: Im Abschnitt 15 gibt das Modul nur Zeilen aus, in denen irgendwo "rot" vorkommt, in Abschnitt 16 nur solche, bei denen "grün" drinsteht, indem dann die Variable $outpuRow auf true gesetzt wird.
(Randbemerkung: damit das mit Umlauten funktioniert, muss auch die view.php mittels Notepad++ von ANSI zu UTF-8 umkovertiert werden.)
Auf allen anderen Abschnitten mit csv2table wird die ganze Tabelle ausgegeben, das bewirkt die default-Anweisung.
Zur PHP-Switch-Konstruktion siehe https://www.w3schools.com/php/php_switch.asp
Der bisher schon vorhandene Code zur Ausgabe der jeweiligen Tabellenzelle wird an die Bedingung geknüpft, dass OutputRow true ist.
Das ist jetzt nur mal ein Proof of Concept für eine ganz simple Tabelle und auch nicht besonders performant. Wenn Du also eine sehr große Tabelle hast, ist das möglicherweise nicht der Weisheit letzter Schluss.
Außerdem wird die Tabellenzelle, gegen die gepüft wird, mit ausgegeben, das ist möglicherweise auch nicht gewollt, bedürfte also noch weiterem Feintuning.
Last edited by florian (20.02.2023 09:01:20)
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Bei csv2table ist DataTables schon drin, Dynamic Tables nützt da nichts bzw. das lässt sich nicht miteinander kombinieren.
Ja stimmt ... mich hatte damals aber in dieser Einstellung zu den DataTables irgendetwas gestört. Weis aber jetzt nicht mehr was es war.
Ich habe in der view.php dann in Zeile 46:
include_once("filterapplied.php");
... auskommentiert und das im Modul Dynamic Table mit der entsprechenden Tabellen-ID versehen.
Und es hat meine Zwecke gereicht.
Führt aber für den TO nicht zum Ziel, so wie ich es jetzt verstanden habe.
Last edited by Slugger (20.02.2023 12:27:25)
Hoster: ALL-INKL *** Grundsätzliche WBCE Konfig ***
WBCE: 1.5.4 • BE: 2.1.0 • PHP: 8.1.16 * 1. Projekt: FE: Simple responsive • BE: Argos * 2. Projekt: FE: hortal • BE: Argos * 3. Projekt: FE: WBCEZon • BE: Argos * 4. Projekt: FE: WBCETik • BE: Argos
Status Projekt 1-4: OK
Online
Hallo Florian,
da hast du ja schon coole Ansätze rausgearbeitet!
Wenn ich es richtig verstehe, könnte ich dann aber nur noch
eine einzige CSV pro Web-Projekt nutzen!?
Werde ich mich die Tage aber noch mal genauer mit auseinandersetzen.
Idealer wäre es natürlich, wenn man die Einstellungen direkt "im Backend", jeweils "pro eingesetztem csv2table Block" vornehmen könnte.
Dann wären mehrere CSV Tabellen möglich und alle User hätten solche Optionen immer mit dem Modul zu Verfügung:
welche Tabelle soll genutzt werden (per Auswahlmenü)
welche Spalten sollen angezeigt werden (vielleicht einfach per Nummern: 1,4,5,7)
welche Begriffe (vielleicht ähnlich wie bei dirlist per Komma eintragbar) müssen enthalten sein (wenn leer dann alles), so als eine Art vorgeschalteter und übergreifender Suchfilter
doch ich denke da müsste der Modulentwickler dann was dran machen!?
Wie läuft so etwas denn eigentlich generell bei WBCE?
Gebt ihr das dann an die Modulentwickler weiter
oder hofft man, dass sie hier mitlesen?
WBCE Version: 1.6.0 / PHP Version: 8.1.15 / Template: Deizerr 0.7
Wichtig ist es nicht, dass man es schon kann, sondern das man einfach erst einmal anfängt!
Offline
Die Modulentwickler:innen lesen hier mit; um ehrlich zu sein, gibt es nicht so viele davon.
Deine Idee für die Erweiterung des Moduls klingt zwar nicht schlecht, ist aber ziemlich aufwändig umzusetzen - denn es ist ja dann pro CSV-Datei unterschiedlich, welche Spalten auswählbar sein sollen oder ob überhaupt Suchfilter angewendet werden sollen.
Das heißt, zunächst müssten überhaupt schon mal alle CSV-Dateien im Verzeichnis gefunden und in eine Auswahlliste geschrieben werden, und dann, sobald eine ausgewählt wird, müsste diese im Hintergrund geöffnet und analysiert werden und dann die Auswahllisten entsprechend angepasst werden. Oder zumindest müsste beim Speichern der Eingaben eine Prüfung erfolgen, ob sinnvolle Werte ausgewählt wurden.
Auswahl der Spalten - Mehrfachauswahl - und Filterbegriffe müssten eingelesen, gesplittet, evaluiert, in die DB geschrieben und dann mit zahlreichen if und else-Schleifen für die Frontendausgabe verarbeitet werden. Und, wie gesagt, wenn die Tabelle ein paar hundert Einträge hat, wird's wohl schon zäh.
Das ist also theoretisch zwar alles machbar, aber nicht kurzfristig zu realisieren.
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Hallo Florian, das so etwas nicht kurzfristig umzusetzen ist kann ich nachvollziehen.
Gestern Abend ist mir allerdings noch eine Idee gekommen.
Mann kann ja bei csv2table und bei DynamicTable oben ein Suchfeld ausfüllen.
Dieses bleibt zudem auch erhalten, wenn man die Seite wechselt.
Ist es vielleicht möglich dieses Suchwort irgendwo beim Aufruf der Seite mitzugeben?
(so als wenn es schon eingegeben wäre)
Dann würde bei beiden Modulen die Tabellen einfach vorgefiltert. Zwar hat der User so die Option das Suchfeld ohne Probleme wieder zu löschen und würde dann die ganze Tabelle sehen aber der erste Aufruf zeigt erst einmal nur das was beim Aufruf der Seite relevant wäre.
WBCE Version: 1.6.0 / PHP Version: 8.1.15 / Template: Deizerr 0.7
Wichtig ist es nicht, dass man es schon kann, sondern das man einfach erst einmal anfängt!
Offline
Ist es vielleicht möglich dieses Suchwort irgendwo beim Aufruf der Seite mitzugeben?
(so als wenn es schon eingegeben wäre)
Ja, das geht, erfordert etwas Anpassungen.
Zunächst brauchst Du auf der Seite, auf der die Tabelle ist, einen Code2-Abschnitt. Diesen stellst Du auf Typ HTML und fügst dort exakt ein:
<!--(PH) JS BODY BTM- -->
<script>
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
const searchParam = urlParams.get('search');
if (searchParam!=null) {
$('[data-filter="'+searchParam+'"]').click()
}
</script>
<!--(END)-->
In der /modules/dynamic_table/view.php fügst Du vor
});
// add class display to the table
folgendes ein:
initComplete: function() {
if (searchParam!=null) {
this.api().search(searchParam).draw();
}
},
Wenn dann deinetabellenseite.php?search=irgendwas aufgerufen wird, sollte (hoffentlich) die Tabelle auf Zeilen, in denen "irgendwas" steht, vorgefiltert sein.
Last edited by florian (16.03.2023 10:40:56)
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline