Работа с CSV данными в MODX Revolution

На сайте часто нужно выводить пользовательские данные в виде таблицы (каталоги, параметры товара или продукции и т.д.). Делать это вставляя и копируя таблицы из текстового редактора редко выдаёт нужное отображение - таблицы выходят кривыми, вёрстка теряет задуманный вид. Чтобы этого избежать можно использовать экспорт пользовательских данных в csv файл (так обычно и происходит с 1С-Бухгалтерией) и последующей обработкой csv-файла или просто текста и вывод его в виде таблицы.

Если вы экспортируете данные в виде файла, то сниппет csvfiletotable будет иметь следующий вид:

Код
<?php function getArrayFromCsv($file,$delimiter) { if (($handle = fopen($file, "r")) !== FALSE) { $i = 0; while (($lineArray = fgetcsv($handle, 4000, $delimiter)) !== FALSE) { for ($j=0; $j<count($lineArray); $j++) { $data2DArray[$i][$j] = $lineArray[$j]; } $i++; } fclose($handle); } return $data2DArray; } $file = MODX_BASE_PATH.$input; $delimiter=','; $a = getArrayFromCsv($file, $delimiter); foreach ($a as $element) { $output .=" <tr> <td> {$element[0]} </td> <td> {$element[1]} </td> <td> {$element[2]} </td> <td> {$element[3]} </td> <td> {$element[4]} </td> <td> {$element[5]} </td> </tr>"; }; $output= iconv("CP1251", "UTF-8", $output); return $output;

Использование сниппета:

Код
[[*fileTypeTV:csvfiletotable]]

где fileTypeTV - Переменная шаблона, тип ввода - файл

Кому-то этот код покажеться сложным (он мне и самому сейчас таким представляется:) ), поэтому для самых маленьких есть сниппет попроще: csvtotable:

Код
<?php $a = explode("\n", $input); foreach ($a as $key => $line) { $a[$key] = explode(",", $line); }; foreach ($a as $element) { $output .=" <tr> <td> {$element[0]} </td> <td> {$element[1]} </td> <td> {$element[2]} </td> <td> {$element[3]} </td> <td> {$element[4]} </td> <td> {$element[5]} </td> </tr>"; }; return $output;
Код
[[*textTypeTV:csvtotable]]

где textTypeTV - Переменная шаблона, тип ввода - текст

2408