Joomla 5 Notice

We are pleased to announce that as of January 29, 2024, all of our Joomla extensions are compatible with Joomla 5.

For all who are still updateing from Joomla 3 to Joomla 4: Joomla 4 Migration instructions are available here:

There is now a separate Documentation for Visforms for Joomla 4 and for Visforms for Joomla 5!

Forum

Visforms Subscription user can ask questions in our forum. Please log in with the relevant user first.
Everybody can access the forum for reading.

Please only ask 1 question per topic.

Important information for almost every question:
V1: Which Visforms version is running?
V2: Which Joomla version is running?
V3: Which PHP version is running?

CSV-Export-Datei ohne Werte und Kopfzeile

More
5 years 7 months ago #6155 by Administrator AV
Replied by Administrator AV on topic 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 :-).

More
5 years 7 months ago #6156 by yellowbird
Replied by yellowbird on topic 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

More
5 years 7 months ago #6157 by yellowbird
Replied by yellowbird on topic 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");

More
5 years 7 months ago #6158 by Administrator AV
Replied by Administrator AV on topic 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 :-).

Moderators: Administrator AVAdministrator IV
Powered by Kunena Forum