Möglichkeit eine CSV Tabelle direkt anzeigen zu lassen?

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
lck
Posts: 1845
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Möglichkeit eine CSV Tabelle direkt anzeigen zu lassen?

Post by lck » Thu Jan 30, 2020 1:43 pm

pergachris wrote:
Thu Jan 30, 2020 10:19 am
Bislang sieht die Ausgabe der CSV Datei so aus:

Spalte1;Spalte2;Spalte3
1;2;3
Wie sieht den der Tabellen-Quelltext der Ausgabeseite aus?
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

pergachris
Posts: 180
Joined: Fri Aug 31, 2012 9:28 pm
Location: Hemden (NRW)

Re: Möglichkeit eine CSV Tabelle direkt anzeigen zu lassen?

Post by pergachris » Thu Jan 30, 2020 2:36 pm

lck wrote:
Thu Jan 30, 2020 1:43 pm
Wie sieht den der Tabellen-Quelltext der Ausgabeseite aus?
Hallo,
die Datei ist so aufgerufen:
{{{PLUGIN:csv_as_table('./userfiles/tabellen/Mappe2.csv');}}}

Das sieht dann auf der Seite so aus:

<div><table class="">
<tbody>
<tr><td>Spalte 1;Spalte 2;Spalte 3</td></tr>
<tr><td>1;2;3</td></tr>
</tbody>
</table>
</div>

Ich ahne schon die Problematik. Der Inhalt der "Zellen" steht in einem "td"

manu
Posts: 761
Joined: Wed Jun 04, 2008 12:05 pm
Location: St. Gallen - Schweiz
Contact:

Re: Möglichkeit eine CSV Tabelle direkt anzeigen zu lassen?

Post by manu » Thu Jan 30, 2020 3:37 pm

Wie sieht denn der Funktionsaufruf aus? Scheint der falsche Delimiter zu sein.

lck
Posts: 1845
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Möglichkeit eine CSV Tabelle direkt anzeigen zu lassen?

Post by lck » Thu Jan 30, 2020 5:30 pm

1.) Im Code von Christoph ist auch noch ein Fehler und zwar in der 2. Zeile

Code: Select all

$o = '<table class="'.$config['classes'].'">'."\n";
Müsste lauten,

Code: Select all

$o = '<table class="'.$classes.'">'."\n";
ansonsten wird die Klasse für <table> nicht gesetzt.

2.) Ich habe den Code mal angepasst und noch Klassen für <thead> und <tbody> hinzugefügt. Eigentlich nicht nötig, man kann die Tabelle auch so gestalten über die Klasse im <table> Tag.

Code: Select all

function csv_as_table($fn, $headings = FALSE, $classes = 'csv_table', $delimiter = "\t", $enclosure = '"') {
    $o = '<table class="'.$classes.'">'."\n";
    if (($fh = fopen($fn, 'r')) !== FALSE) {
    if ($headings !== FALSE) {
        $o .= '<thead class="csv_thead"><tr>';
        if ($headings === TRUE) {
        if (($headings = fgetcsv($fh, 4096, $delimiter, $enclosure)) === FALSE) {
            $headings = array();
        }
        }
        foreach ($headings as $heading) {
        $o .= '<td>'.$heading.'</td>';
        }
        $o .= '</tr></thead>'."\n";
    }
    $o .= '<tbody class="csv_tbody">'."\n";
    while (($rec = fgetcsv($fh, 4096, $delimiter, $enclosure)) !== FALSE) {
        $o .= '<tr>';
        foreach ($rec as $field) {
        $o .= '<td>'.htmlspecialchars($field).'</td>';
        }
        $o .= '</tr>'."\n";
    }
    fclose($fh);
    $o .= '</tbody>'."\n";
    }
    $o .= '</table>'."\n";
    return $o;
}
Diesen Code einfach in cmsimple/userfuncs.php einfügen. Wenn es diese Datei noch nicht gibt, einfach erstellen, und am Anfang noch ergänzen:

Code: Select all

<?php
cmb wrote:Um ein CSV von Advancedform anzuzeigen auf der gewünschten Seite (im Quellcode) schreiben:

Code: Select all

{{{PLUGIN:csv_as_table('PFAD_ZUR_DATEI');}}}
Den Pfad immer relativ zur aktuellen Sprache angeben. Für die Hauptsprache also z.B.: ./plugins/advancedform/data/formular.csv

Wenn andere CSV angezeigt werden sollen, dann sind vermutlich die Parameter zu ändern. Das kann direkt beim PLUGIN-Call erfolgen. Die zusätzlichen Parameter:
  • $headings FALSE um keine Tabellenüberschrift anzuzeigen, TRUE um diese der 1. Zeile der Datei zu entnehmen, oder array('1.Spalte', '2.Spalte', '3.Spalte') um diese selbst anzugeben
  • $classes eine oder mehrere Klassen (durch Leerzeichen getrennt), die dem <table> zugewiesen werden
  • $delimiter das Trennzeichen, also üblicherweise ein Tab oder ein ","
  • $enclosure das Zeichen, das die einzelnen Feldwerte umschließt. Meist ein "
Es müssen nicht alle Parameter angegeben werden, aber es dürfen auch keine übersprungen werden. Ich hoffe, die Reihenfolge ist einigermaßen sinnvoll.
3.) Das heißt, per Pluginaufruf kann man für jede Tabelle die richtigen individuellen Parameter eintragen. Es muss also nichts am Code in der userfuncs.php geändert werden.
Also, im oben genannten Beispiel von pergachris wäre das folgender:

Code: Select all

{{{PLUGIN:csv_as_table('./userfiles/downloads/test-csv-einbinden.csv', TRUE, 'csv_table-01', ';', '"');}}}
4.) Grobes CSS-Styling

Code: Select all

.csv_table-01 {
	text-align: center;
	width: 100%;
}
.csv_thead {
	background-color: #03A9F4;
}
.csv_tbody {
	background-color: #EEEEEE;
}
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

pergachris
Posts: 180
Joined: Fri Aug 31, 2012 9:28 pm
Location: Hemden (NRW)

Re: Möglichkeit eine CSV Tabelle direkt anzeigen zu lassen?

Post by pergachris » Sun Feb 09, 2020 1:07 pm

Hallo,

ich hatte bislang keine Zeit mich damit zu beschäftigen.

Nun habe ich den Code ausprobiert.

Toll, ja, so habe ich es mir vorgestellt. Nun steht alles ordentlich untereinander.

Super, danke für die Hilfe

Post Reply