Möglichkeit eine CSV Tabelle direkt anzeigen zu lassen?

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Traktorist
Posts: 235
Joined: Mon Mar 07, 2011 4:34 pm
Location: South of Lower Saxony, Germany

Möglichkeit eine CSV Tabelle direkt anzeigen zu lassen?

Post by Traktorist » Thu Jan 26, 2012 1:28 pm

Hallo,

gibt es eine Möglichkeit eine CSV Tabelle direkt in einer CMSimple Seite einzubinden, darzustellen?
Ich würde gerne die von advancedform_XH erzeugte Datei anzeigen lassen.

Viele Grüße, Ele

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

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

Post by cmb » Thu Jan 26, 2012 2:33 pm

Hallo Ele,

mit Advancedform_XH ist das nicht möglich, weil ich das CSV nur bei der letzten Version noch schnell eingebaut hatte, da es ein User für einen guten Zweck brauchte. Ursprünglich wollte ich diese Funktionalität erst in Version 2 ergänzen, und dann auch mit der Möglichkeit die Daten im Back-End ansehen und bearbeiten zu können. Und ich hatte auch ein anderes Datenformat geplant. Aber CSV war schnell und leicht umzusetzen.

Jetzt hab ich überlegt, ob ich die Darstellung des CSV in Advancedform_XH nachreichen soll. Aber eigentlich kann eine solche Darstellung auch für beliebige CSV-Dateien interessant sein (z.B. eine Excel-Tabelle, die man schnell nach CSV wandelt). Daher hab ich mal kurz ein bisschen probiert, und das grundlegende lässt sich mit 10 Zeilen PHP machen. Nun will ich aber das noch etwas erweitern, so dass auch evtl. Überschriften in der CSV als Header angezeigt werden, usw. Ein eigenes Plugin ist sicher übertrieben, deshalb werde ich das (vermutlich noch heute) im Wiki als Add-On beschreiben.

Ich gebe noch mal Bescheid, wenn's fertig ist.

Christoph
Christoph M. Becker – Plugins for CMSimple_XH

designfjord
Posts: 68
Joined: Fri Apr 16, 2010 4:19 pm
Location: Germany/Franconia

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

Post by designfjord » Thu Jan 26, 2012 3:18 pm

:idea: Au ja!
Das kann ich auch gut brauchen!!
leberecht.net | keep it simple, or fail

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

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

Post by cmb » Thu Jan 26, 2012 7:08 pm

Hallo Ele, hallo Jochen,

ich warte mit dem Eintrag im Wiki lieber noch ab. Einerseits könnte die Funktion den ein oder anderen Fehler haben (ich habe aus Zeitgründen nur wenig getestet; es kann aber auch nichts schlimmes passieren, da die Funktion nur die Datei liest; im schlimmsten Fall ist die Tabelle nicht zu gebrauchen), andererseits bin ich mir bezüglich der Parameterübergabe noch nicht sicher. Aber hier ist schon mal der aktuelle Stand:

Code: Select all

function csv_as_table($fn, $headings = FALSE, $classes = 'csv_table', $delimiter = "\t", $enclosure = '"') {
    $o = '<table class="'.$config['classes'].'">'."\n";
    if (($fh = fopen($fn, 'r')) !== FALSE) {
    if ($headings !== FALSE) {
        $o .= '<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>'."\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
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.

Das Styling der Tabelle erfolgt dann über die angegebenen Klassen (Voreinstellung ist csv_table).

Christoph
Christoph M. Becker – Plugins for CMSimple_XH

Traktorist
Posts: 235
Joined: Mon Mar 07, 2011 4:34 pm
Location: South of Lower Saxony, Germany

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

Post by Traktorist » Thu Jan 26, 2012 9:42 pm

Christoph, absolute KLASSE!

Es funktioniert, Danke, Danke.

Habe es eben ausprobiert und es hat auf Anhieb funktioniert.

Ich bin begeistert.
Viele Grüße, Ele

Traktorist
Posts: 235
Joined: Mon Mar 07, 2011 4:34 pm
Location: South of Lower Saxony, Germany

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

Post by Traktorist » Sat Jan 28, 2012 9:23 pm

Hallo,

da die schelle Lösung von Christoph schon mal gut klappte, möchte ich dazu auch noch einen kleinen Beitrag leisten.
Wer den Spalten seiner Tabelle eine feste Breite geben will, der sollte die Zeilen im userfuncs.php (s.o.) wie folgt ändern:

$o = '<table class="'.$config['classes'].'">'."\n";
in z.B.
$o = '<table id="ID_NAME" class="'.$config['classes'].'">'."\n";

sowie

$o .= '<td>'.$heading.'</td>';
in z.B.
$o .= '<td id="ID_BREIT">'.$heading.'</td>';

Dann muss dazu die gewünschte Spaltenbreite im CSS noch angegeben werden.
Z.B.:

table#ID_NAME td {
width:200px;
}

td#ID_BREIT {
width: 200px;
}

Es ist nicht auf meinem Mist gewachsen, sondern stammt von meinem Neffen.
Vielleicht hilft es ja den einen oder anderen.

Gruß, Ele

maeg
Posts: 525
Joined: Fri Feb 20, 2009 2:27 pm
Location: Agerbæk, Denmark
Contact:

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

Post by maeg » Wed May 15, 2013 1:03 pm

Hi
Es funktioniert perfekt. Können Sie so, dass die Sorten in alphabetischer Reihenfolge

Google translate - Sorry for my bad german ;)

Jens

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

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

Post by cmb » Wed May 15, 2013 5:24 pm

Hi Jens,

soll fest nach einer bestimmten Spalte sortiert werden, oder soll der User das selbst machen können? Letzteres ist eigentlich eine sehr schöne Lösung, und könnte z.B. mit TableSort_XH gemacht werden. Dazu müsste dann nur die entsprechende CSS-Klasse beim Pluginaufruf angegeben werden.

Are you looking for a fixed sort order for a particular column, or shall the user be able to sort for himself? The latter case is actually a very nice solution, and can be realized with TableSort_XH for example. You just have to give the respective CSS class in the plugin call.

Christoph
Christoph M. Becker – Plugins for CMSimple_XH

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

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

Post by Holger » Wed May 15, 2013 6:35 pm

Ich kann dieses jQuery-Plugin sehr empfehlen
http://tablesorter.com/docs/

LG
Holger

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

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

Post by cmb » Wed May 15, 2013 9:24 pm

Holger wrote:Ich kann dieses jQuery-Plugin sehr empfehlen
http://tablesorter.com/docs/
Das ist ein sehr nettes jQuery-Plugin (nutze ich auch in Dlcounter_XH). Allerdings scheint es nicht mehr entwickelt zu werden; die letzte Version ist von Oktober 2010.
Christoph M. Becker – Plugins for CMSimple_XH

Post Reply