Page 3 of 4

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

Posted: Thu Jan 30, 2020 1:43 pm
by lck
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?

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

Posted: Thu Jan 30, 2020 2:36 pm
by pergachris
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"

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

Posted: Thu Jan 30, 2020 3:37 pm
by manu
Wie sieht denn der Funktionsaufruf aus? Scheint der falsche Delimiter zu sein.

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

Posted: Thu Jan 30, 2020 5:30 pm
by lck
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;
}

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

Posted: Sun Feb 09, 2020 1:07 pm
by pergachris
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

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

Posted: Tue Mar 24, 2020 9:51 am
by pmschulze
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?

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

Posted: Tue Mar 24, 2020 5:01 pm
by olape
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.

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

Posted: Tue Mar 24, 2020 7:11 pm
by pmschulze
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...

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

Posted: Tue Mar 24, 2020 7:31 pm
by lck
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.

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

Posted: Tue Mar 24, 2020 7:42 pm
by olape
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
 */