Möglichkeit eine CSV Tabelle direkt anzeigen zu lassen?

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
lck
Posts: 1966
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: 817
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: 1966
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

pmschulze
Posts: 108
Joined: Thu Aug 07, 2014 5:29 pm

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

Post by pmschulze » Tue Mar 24, 2020 9:51 am

Ich nutze diese Userfunction auch und finde sie gut gelungen.
Nun möchte ich, dass ich in dieser Tabelle auch die Funktion email nutzen kann, d.h. z.B. der Nutzer aus einer Tabelle den Namen suchen kann und die Mail-Adresse erhält, die er dann auch gleich nutzen kann. Ein Eintrag in die CSV-Tabelle mit {{{email 'mailadresse'}}} funktioniert leider nicht.
Habt Ihr eine Idee, wie sich das umsetzen lässt?

olape
Posts: 1137
Joined: Fri Mar 13, 2015 8:47 am
Contact:

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

Post by olape » Tue Mar 24, 2020 5:01 pm

pmschulze wrote:
Tue Mar 24, 2020 9:51 am
Ein Eintrag in die CSV-Tabelle mit {{{email 'mailadresse'}}} funktioniert leider nicht.
Also mir persönlich ist diese Funktion auch nicht bekannt.
Aber selbst wenn, in der CSV würde das nicht ausgeführt.

Also wenn, dann wäre vielleicht ein Eintrag mit mailto einen Versuch wert.

Allerdings würde ich mir noch mal gründlich überlegen, ob man eine Tabelle mit Namen, den zugehörigen E-Mail-Adressen und wer weiss was noch für Daten veröffentlichen sollte. Und was die jeweiligen Betroffen davon halten werden.

pmschulze
Posts: 108
Joined: Thu Aug 07, 2014 5:29 pm

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

Post by pmschulze » Tue Mar 24, 2020 7:11 pm

Ich habe es mal mit mailto versucht: geht auch nicht. :cry:
Kann man irgendwie php-code aller <a href...> durch die CSV direkt ausgeben, so es im Quelltext als Code umgesetzt wird?

Den Code für die userfunc habe ich mal aus dem Forum - Quelle??

Code: Select all

function email($address,$subject='',$body='')
{
    global $bjs;

    $nojscolor = 'blue'; // color if javascript is off

    list($name,$domain) = explode('@',$address);
    list($server,$tdl) = explode('.',$domain, 2);
    $add = '';
    if($subject) {
        $add .= '?subject='.rawurlencode($subject);
        if($body) {
            $add .= '&body='.str_replace(array('%3Cbr%3E','%3Cbr%20%2F%3E'), '\u00250D\u00250A', rawurlencode($body));
        }
    }
    $hide = '<span style="display:none;"> ';
    $show = ' </span>';

    $js = "
	var str1 = '<span style=\"padding-right:.15ex;padding-left:.15ex;\">&#64;</span>';
	var str2 = '&#46;';
	document.write('<a style=\"text-decoration:none;\" href=\"javascript:void(0);\"  onfocus=\"createAddress(this,\'$tdl\',\'$name\',\'$add\',\'$server\');\" onblur=\"javascript:void(0);\">' + '$name' + '".$hide.rand().$show."' + str1 + '".$hide.rand().$show."' + '$server' + '".$hide.rand().$show."' + str2 + '".$hide.rand().$show."' + '$tdl' + '</a>' );";

    static $email_has_run = 0;
    if(!$email_has_run) $bjs = "<script type='text/javascript'>
	function createAddress(a,tdl,name,add,server){
    var n = '\u0040';
    var d = '\u002E';
    a.href = 'mai' + 'lto:' + name + n + server + d + tdl + add;
	}</script>";
    $email_has_run++;

    return  '<script type="text/javascript">'
        . $js .'</script>'
        . '<noscript>'
        . '<span style="font-family:consolas,mono-space;word-spacing:-1ex;"><span style="color:'
        . $nojscolor .';">'
        . $name . $hide . rand() . $show .' </span><em>[ &#97; &#116; ]</em> <span style="color:'
        . $nojscolor .';">'
        . $server . $hide . rand() . $show . ' </span><em>[ &#46; ]</em> <span style="color:'
        . $nojscolor .';">'
        . $tdl .'</span></span>'
        . '</noscript>'
        . '';
}
P.S. Die Adressen sind dienstlich und stehen zuszätzlich in einem geschützten Bereich der Webseite...

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

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

Post by lck » Tue Mar 24, 2020 7:31 pm

pmschulze wrote:
Tue Mar 24, 2020 7:11 pm
Den Code für die userfunc habe ich mal aus dem Forum - Quelle??
Aus svasti's [Addon] ProtectmyEmail.
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

olape
Posts: 1137
Joined: Fri Mar 13, 2015 8:47 am
Contact:

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

Post by olape » Tue Mar 24, 2020 7:42 pm

pmschulze wrote:
Tue Mar 24, 2020 7:11 pm
Ich habe es mal mit mailto versucht: geht auch nicht.
Schade.
pmschulze wrote:
Tue Mar 24, 2020 7:11 pm
Kann man irgendwie php-code aller <a href...> durch die CSV direkt ausgeben, so es im Quelltext als Code umgesetzt wird?
Den versteh ich nicht ganz. <a href ... ist html, kein php.
Ich hatte ja gehofft, dass ein Entrag in der csv wie dieser:

Code: Select all

<a href="mailto:rudi.rumpel@domain.tld">rudi.rumpel@domain.tld</a>
entsprechend als Link angezeigt würde. Aber du schreibst, es funktioniert nicht.

Dann kannst du nur die E-Mail-Adresse als einfachen Text in die csv schreiben, und hoffen, dass der eine oder andere Browser intelligent genug ist, das korrekt umzusetzen.

pmschulze wrote:
Tue Mar 24, 2020 7:11 pm
Den Code für die userfunc habe ich mal aus dem Forum - Quelle??
Dazu fehlt der erste Teil. Dann wird auch klar, wozu der Code eigentlich gedacht war.

Code: Select all

/**===================================
 * ProtectmyEmail
 * ===================================
 * @name ProtectmyEmail
 * @version 0.3
 * @nfo http://svasti.de/downloads/versioninfo/protectmyEmail.nfo
 *
 * (c)2015 by svasti@svasti.de
 *
 * Usage {{{email 'name@domain.xx','email subject','email text body'}}}
 * optional: email subject and text body
 * for new line in text body use strg+return
 */

Post Reply