Commit b46a9c6c9fd8ba483df3182a94ebd8332fa86f40
1 parent
8cb5acbf
add examples for xml and data files
Showing
8 changed files
with
64 additions
and
22 deletions
Show diff stats
examples/ParserController.php
| ... | ... | @@ -102,7 +102,16 @@ class ParserController extends Controller |
| 102 | 102 | 'pageSize' => 10, |
| 103 | 103 | ], |
| 104 | 104 | ]); |
| 105 | + | |
| 106 | + if ( empty( $data[0] ) ) { | |
| 107 | + // если нет первого ряла - это xml custom-файл с вложенными узлами, массив ассоциативный (дерево), | |
| 108 | + // такой массив нет возможности вывести с помощью GridView | |
| 109 | + // просто выведем его как есть | |
| 110 | + echo "<pre>"; | |
| 111 | + return print_r($data); | |
| 112 | + } | |
| 105 | 113 | // если отпарсенные данные - ассоциативный массив, то пользователю нечего выбирать |
| 114 | + // но выведем его в GridView | |
| 106 | 115 | $assoc_data_arr = $this->is_assoc($data[0]); |
| 107 | 116 | |
| 108 | 117 | if ( $assoc_data_arr ) { | ... | ... |
| 1 | +name;art;price;brand;count | |
| 2 | +some name 1;94783;03.Âĺđ;Autofrance;298.00 | |
| 3 | +some name 2;BS-82001;23.31;Optimal;2.00 | |
| 4 | +some name 3;94782;Ńĺđ.27;Dayco;3.00 | |
| 5 | +some name 4;941019;13.88;Dayco;4.00 | |
| 6 | +some name 5;94554;Ëčď.37;Dayco;2.00 | |
| 7 | +some name 6;94785;×ĺđ.46;Dayco;17.00 | |
| 8 | +some name 7;10233;Ëţň.18;Quick Brake;2.00 | |
| 9 | +some name 8;94863;×ĺđ.54;Dayco;y | |
| 10 | +some name 9;94331;Ëčď.80;Dayco;2.00 | |
| 11 | +some name 10;94862;09.Ňđŕ;Dayco;6.00 | |
| 12 | +some name 11;94656;×ĺđ.72;Dayco;2.00 | |
| 13 | +some name 12;94785;Ňđŕ.21;Total;10.00 | |
| 14 | +some name 13;94786;Ňđŕ.36;Total;15.00 | |
| 15 | +some name 14;94789;19.71;Total;6.00 | |
| 16 | +some name 15;94754;24.21;Total;5.00 | |
| 17 | +some name 16;94780;20.93;Total;13.00 | ... | ... |
No preview for this file type
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<Каталог><Товар><Код>0 003 218 174</Код><Наименование>Стартер Iveco E-1/E-2 -99</Наименование><ОЕ>0 001 218 174</ОЕ><Колво>1000</Колво><Ожидаемое>0</Ожидаемое><Розница>213.33</Розница><Город>Киев</Город><Производитель>Bosch</Производитель><Категория>89</Категория><Группа>Bosch</Группа></Товар><Товар><Код>0 120 488 253</Код><Наименование>Генератор Bosh</Наименование><ОЕ>98417134</ОЕ><Колво>0</Колво><Ожидаемое>0</Ожидаемое><Розница>169.30</Розница><Город>Киев</Город><Производитель>Bosch</Производитель><Категория>89</Категория><Группа>Bosch</Группа></Товар><Товар><Код>0 221 503 407</Код><Наименование>Катушка зажигания Brava 1.2 16v/N.Punto 1.2 16v</Наименование><ОЕ></ОЕ><Колво>0</Колво><Ожидаемое>0</Ожидаемое><Розница>182.00</Розница><Город>Киев</Город><Производитель>Bosch</Производитель><Категория></Категория><Группа>Bosch</Группа></Товар><Товар><Код>0 221 503 417</Код><Наименование>Катушка зажигания</Наименование><ОЕ></ОЕ><Колво>0</Колво><Ожидаемое>10</Ожидаемое><Розница>10.00</Розница><Город>Киев</Город><Производитель>Bosch</Производитель><Категория></Категория><Группа>Bosch</Группа></Товар></Каталог> | |
| 0 | 3 | \ No newline at end of file | ... | ... |
examples/config.php
| ... | ... | @@ -46,7 +46,6 @@ return [ |
| 46 | 46 | 'template' => |
| 47 | 47 | ['class' => 'yii\multiparser\XmlParser', |
| 48 | 48 | 'node' => 'Товар', |
| 49 | - 'has_header_row' => false, | |
| 50 | 49 | 'keys' => [ |
| 51 | 50 | "BRAND" => 'Производитель', |
| 52 | 51 | "ARTICLE" => 'Код', |
| ... | ... | @@ -59,14 +58,9 @@ return [ |
| 59 | 58 | 'converter_conf' => [ |
| 60 | 59 | 'class' => 'yii\multiparser\Converter', |
| 61 | 60 | 'configuration' => [ |
| 62 | - 'converter_conf' => [ | |
| 63 | - 'class' => 'yii\multiparser\Converter', | |
| 64 | - 'configuration' => ["encode" => 'DESCR', | |
| 65 | 61 | "string" => ['DESCR', 'BRAND'], |
| 66 | 62 | "float" => 'PRICE', |
| 67 | 63 | "integer" => ['BOX', 'ADD_BOX'], |
| 68 | - ], | |
| 69 | - ], | |
| 70 | 64 | ], |
| 71 | 65 | ], |
| 72 | 66 | ], |
| ... | ... | @@ -82,17 +76,30 @@ return [ |
| 82 | 76 | ], |
| 83 | 77 | ], |
| 84 | 78 | 'xlsx' => |
| 85 | - ['web' => | |
| 86 | - ['class' => 'common\components\parsers\XlsxParser', | |
| 87 | - // 'path_for_extract_files' => \Yii::getAlias('@temp_upload') . '/xlsx/', | |
| 88 | - //'auto_detect_first_line' => true, | |
| 89 | - //'has_header_row' => true, | |
| 90 | - 'active_sheet' => 1, | |
| 79 | + ['custom' => | |
| 80 | + ['class' => 'yii\multiparser\XlsxParser', | |
| 81 | + 'path_for_extract_files' => $_SERVER["DOCUMENT_ROOT"] . '/tests/_data/xlsx_tmp/', | |
| 91 | 82 | 'converter_conf' => [ |
| 92 | - 'class' => 'common\components\parsers\CustomConverter', | |
| 93 | - 'configuration' => ["string" => []], | |
| 83 | + 'class' => 'yii\multiparser\Converter', | |
| 84 | + 'configuration' => ["encode" => []], | |
| 94 | 85 | ] |
| 95 | 86 | ], |
| 96 | - ] | |
| 87 | + 'template' => | |
| 88 | + ['class' => 'yii\multiparser\XlsxParser', | |
| 89 | + 'path_for_extract_files' => $_SERVER["DOCUMENT_ROOT"] . 'tests/_data/xlsx_tmp', | |
| 90 | + 'keys' => [ | |
| 91 | + 0 => 'Original', | |
| 92 | + 1 => 'Replacement', | |
| 93 | + ], | |
| 94 | + ], | |
| 95 | + 'basic_column' => [ | |
| 96 | + Null => 'null', | |
| 97 | + "Description" => 'Название', | |
| 98 | + "Article" => 'Артикул', | |
| 99 | + "Price" => 'Цена', | |
| 100 | + "Brand" => 'Производитель', | |
| 101 | + "Count" => 'Количество', | |
| 102 | + ], | |
| 103 | + ], | |
| 97 | 104 | ]; |
| 98 | 105 | ... | ... |
lib/ObjectCreator.php
lib/Parser.php
lib/XlsxParser.php
| ... | ... | @@ -130,10 +130,14 @@ class XlsxParser extends TableParser |
| 130 | 130 | |
| 131 | 131 | protected function readStrings() |
| 132 | 132 | { |
| 133 | - $xml = simplexml_load_file($this->path_for_extract_files . '/xl/sharedStrings.xml'); | |
| 134 | - foreach ($xml->children() as $item) { | |
| 135 | - $this->strings_arr[] = (string)$item->t; | |
| 133 | + $file_with_strings = $this->path_for_extract_files . '/xl/sharedStrings.xml'; | |
| 134 | + if ( file_exists( $file_with_strings ) ) { | |
| 135 | + $xml = simplexml_load_file($file_with_strings); | |
| 136 | + foreach ($xml->children() as $item) { | |
| 137 | + $this->strings_arr[] = (string)$item->t; | |
| 138 | + } | |
| 136 | 139 | } |
| 140 | + | |
| 137 | 141 | } |
| 138 | 142 | |
| 139 | 143 | |
| ... | ... | @@ -170,7 +174,12 @@ class XlsxParser extends TableParser |
| 170 | 174 | |
| 171 | 175 | if ( isset($attr['t']) ){ |
| 172 | 176 | // it's not a value it's a string, so fetch it from string array |
| 173 | - $value = $this->strings_arr[$value]; | |
| 177 | + if( empty( $this->strings_arr[$value] ) ){ | |
| 178 | + $value = ''; | |
| 179 | + } else { | |
| 180 | + $value = $this->strings_arr[$value]; | |
| 181 | + } | |
| 182 | + | |
| 174 | 183 | } else { |
| 175 | 184 | $value = (string)round( $value, $this->float_precision ); |
| 176 | 185 | } | ... | ... |