Joomla 5 Mitteilung

Wir freuen uns mitteilen zu können, dass seit dem 29. Januar 2024 alle unsere Joomla Erweiterungen mit Joomla 5 kompatible sind.

Für alle die gerade noch von Joomla 3 auf 4 aktualisieren: Anleitungen für die Joomla 4 Migration gibt es hier:

Es gibt nun auch eine eigenständige Dokumentation für Visforms für Joomla 4 und für Visforms auf Joomla 5

Forum

Visforms Subscription Inhaber können in unserem Forum Fragen stellen. Bitte mit dem entsprechenden Benutzer anmelden.
Jeder kann lesend auf das Forum zugreifen.

Bitte stellen Sie nur 1 Frage pro Thema.

CSV-Export-Datei ohne Werte und Kopfzeile

Mehr
5 Jahre 6 Tage her #6155 von Administrator AV
Administrator AV antwortete auf CSV-Export-Datei ohne Werte und Kopfzeile
Hallo,
könntest du folgenden Code testen?
Wenn iconv nicht installiert ist, wirft der Aufruf einen fatalen Error... Ich muss also wohl doch noch etwas weiter ausholen.
Code:
public function __construct($params) { // check that iconv is installed if ((!function_exists('iconv')) || (isset($params->usewindowscharset) && ($params->usewindowscharset == 0))) { $this->useWindowsCharacterSet = false; } else { $this->useWindowsCharacterSet = true; } $this->output_encoding = "windows-1250//TRANSLIT"; $this->input_encoding = "UTF-8"; $this->separator = (isset($params->expseparator)) ? $params->expseparator : ";"; } public function convertCharacterSet($text) { if (!$this->useWindowsCharacterSet) { return $text; } // iconv returns false when characters cannot be converted i.e. because some files are not installed if (!(false === (bool) (iconv($this->input_encoding, $this->output_encoding, $text)))) { // convert characters into window characterset for easier use with excel return iconv($this->input_encoding, $this->output_encoding, $text); } return $text; }
Danke und Gruß,
Aicha

:idea: I recommend you the new and up-to-date documentation for Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/en/docs/
Most of this also applies retrospectively to Joomla 3.
Please only ask 1 question per topic :-).

:idea: Ich empfehle Dir die neue und aktuelle Dokumentation für Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/docs/
Das meiste gilt rückwirkend auch für Joomla 3.
Bitte immer nur 1 Frage pro Thema stellen :-).

Mehr
5 Jahre 5 Tage her #6156 von yellowbird
yellowbird antwortete auf CSV-Export-Datei ohne Werte und Kopfzeile
Hallo Aicha,

mit vorhandener aber "defekter" iconv-Funktion sind die Formularfeldwerte auch mit diesem Code im CSV leer, bis auf die visform-eigenen Spalten.
Wenn ich allerdings models/visdatas.php richtig interpretiere, wird der visFormCsvHelper zwar in createExportBuffer() für die visForm-Spalten genutzt, nicht aber in createExportCell(); dort wird iconv direkt aufgerufen. Zeilen 325-331 müssten vielleicht durch $unicode_str_for_Excel= $csvHelper->convertCharacterSet($row->$prop) ersetzt werden. Die csv-Handler-Instanz müsste dann vielleicht bereits im Konstruktor erstellt werden.
Das würde jedenfalls erklären, warum in in meinem debug-Output im csv-helper die Formularfeldwerte gar nicht sehe. Oder verstehe ich den Codeaublauf falsch?

Gruß,
Marcel

Mehr
5 Jahre 5 Tage her #6157 von yellowbird
yellowbird antwortete auf CSV-Export-Datei ohne Werte und Kopfzeile
Hallo Aicha,

am Rande: ich nutze inzwischen gern das PHP-eigene fputcsv(), weil es sich so bequem um die Delimiter etc. kümmert. Vielleicht nützlich.
Code:
if( ! function_exists('sputcsv')) { function sputcsv(array $row, string $delimiter=",", string $enclosure='"', string $escape_char="\\") { $csvhnd=fopen('php://temp', 'r+'); $res=''; if(false===fputcsv($csvhnd, $row, $delimiter, $enclosure, $escape_char)) return false; rewind($csvhnd); $res=stream_get_contents($csvhnd); fclose($csvhnd); return $res; }} function array_to_csv(array $lines, string $delimiter=",", string $enclosure='"', string $escape_char="\\") { $res=''; foreach($lines as $row) { if( false === $csvline=sputcsv($row, $delimiter, $enclosure, $escape_char)) return false; $res.=$csvline; } return $res; } // Example call $somedata=array( array( 'lorem', 'ipsum', 'dolor') ,array( '"one double quote', '"two double quotes"', '\"escaped quote') ,array( 'only one value in row') ,array( '012345', 0, 1234) ,array( "String with\nnew line", 'second string') ); echo array_to_csv($somedata, "\t", '"', "\r\n");

Mehr
5 Jahre 4 Tage her #6158 von Administrator AV
Administrator AV antwortete auf CSV-Export-Datei ohne Werte und Kopfzeile
Hallo Marcel,
danke fürs Testen und deinen Input!!!

Es gab mit dem CSV-Export zuletzt das Problem, dass die Label für die visForms-eigenen Spalten überhaupt nicht durch das iconv gingen und dies bei den deutschen Texten mit Umlauten dazu geführt hat, diese diese nicht in den Windows-Zeichenstatz konvertiert wurden und es beim Öffnen mit Excel deshalb Probleme gab.

Da ich wusste, dass ich für das nächste große Visforms-Subscription Feature Release (3.4) den CSV-Export weiter ausbauen wollte, nämlich dahingehen, dass man auch vom Frontend aus Daten nach CSV exportieren kann und ich deshalb den ganzen Export-Code refaktoren werde, habe ich einfach schon mal dahingehend angefangen, dass ich die entsprechende Struktur geschaffen habe und diese für die visForms-eigenen Felder also, meinen Bugfix, auch verwende. Das große Refactoring des Codes für die eigentlichen visForms-Daten habe ich aber noch nicht ausgeführt. Deshalb ist der Code so verstreut (auf des model/visdatas und die neue Helper-Klasse). Das ist wirklich unfertig.

Aus deinem Test entnehme ich, dass mein Code, der das von dir untersuchte Problem fixen soll, wie erwartet funktioniert. Ich muss aber tatsächlich auch das Model noch anpassen. Ich werde also den Fix übergangsweise an dieser Stelle auch noch einbauen.

Code:
public function createExportCell($row, $type = Null, $params = Null, $prop = Null) { ... if ((!function_exists('iconv')) || (isset($params->usewindowscharset) && ($params->usewindowscharset == 0))) { $unicode_str_for_Excel = $row->$prop; } else { if (!(false === (bool) (iconv("UTF-8", "windows-1250//TRANSLIT", $row->$prop)))) { // convert characters into window characterset for easier use with excel $unicode_str_for_Excel = iconv("UTF-8", "windows-1250//TRANSLIT", $row->$prop); } else { $unicode_str_for_Excel = $row->$prop; } } ... }

Das ist jetzt zwar nicht besonders elegant, sollte aber als Übergangslösung funktionieren und wird mit visForms 3.12.10 released.

Ab visForms 3.13/Subscription 3.4 wird dann der gesamte Code für den CSV-Export sauber über die Helper-Klasse laufen.

Hinsichtlich der Verwendung der php-eigenen fputcsv() bin ich nicht so überzeugt. Die Hauptarbeit besteht eigentlich darin, die Daten richtig zu prozessieren und der Delimiter war für mich eigentlich nur marginal. Aber vielleicht sehe ich das ja irgendwann auch mal anders. Danke auf jeden Fall für deinen Hinweis.

Gruß,
Aicha

:idea: I recommend you the new and up-to-date documentation for Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/en/docs/
Most of this also applies retrospectively to Joomla 3.
Please only ask 1 question per topic :-).

:idea: Ich empfehle Dir die neue und aktuelle Dokumentation für Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/docs/
Das meiste gilt rückwirkend auch für Joomla 3.
Bitte immer nur 1 Frage pro Thema stellen :-).

Moderatoren: Administrator AVAdministrator IV
Powered by Kunena Forum