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,7 +102,16 @@ class ParserController extends Controller | ||
| 102 | 'pageSize' => 10, | 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 | $assoc_data_arr = $this->is_assoc($data[0]); | 115 | $assoc_data_arr = $this->is_assoc($data[0]); |
| 107 | 116 | ||
| 108 | if ( $assoc_data_arr ) { | 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 | \ No newline at end of file | 3 | \ No newline at end of file |
examples/config.php
| @@ -46,7 +46,6 @@ return [ | @@ -46,7 +46,6 @@ return [ | ||
| 46 | 'template' => | 46 | 'template' => |
| 47 | ['class' => 'yii\multiparser\XmlParser', | 47 | ['class' => 'yii\multiparser\XmlParser', |
| 48 | 'node' => 'Товар', | 48 | 'node' => 'Товар', |
| 49 | - 'has_header_row' => false, | ||
| 50 | 'keys' => [ | 49 | 'keys' => [ |
| 51 | "BRAND" => 'Производитель', | 50 | "BRAND" => 'Производитель', |
| 52 | "ARTICLE" => 'Код', | 51 | "ARTICLE" => 'Код', |
| @@ -59,14 +58,9 @@ return [ | @@ -59,14 +58,9 @@ return [ | ||
| 59 | 'converter_conf' => [ | 58 | 'converter_conf' => [ |
| 60 | 'class' => 'yii\multiparser\Converter', | 59 | 'class' => 'yii\multiparser\Converter', |
| 61 | 'configuration' => [ | 60 | 'configuration' => [ |
| 62 | - 'converter_conf' => [ | ||
| 63 | - 'class' => 'yii\multiparser\Converter', | ||
| 64 | - 'configuration' => ["encode" => 'DESCR', | ||
| 65 | "string" => ['DESCR', 'BRAND'], | 61 | "string" => ['DESCR', 'BRAND'], |
| 66 | "float" => 'PRICE', | 62 | "float" => 'PRICE', |
| 67 | "integer" => ['BOX', 'ADD_BOX'], | 63 | "integer" => ['BOX', 'ADD_BOX'], |
| 68 | - ], | ||
| 69 | - ], | ||
| 70 | ], | 64 | ], |
| 71 | ], | 65 | ], |
| 72 | ], | 66 | ], |
| @@ -82,17 +76,30 @@ return [ | @@ -82,17 +76,30 @@ return [ | ||
| 82 | ], | 76 | ], |
| 83 | ], | 77 | ], |
| 84 | 'xlsx' => | 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 | 'converter_conf' => [ | 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
| @@ -15,7 +15,7 @@ class ObjectCreator { | @@ -15,7 +15,7 @@ class ObjectCreator { | ||
| 15 | $class = trim( $configuration['class'] ); | 15 | $class = trim( $configuration['class'] ); |
| 16 | unset( $configuration['class'] ); | 16 | unset( $configuration['class'] ); |
| 17 | } else{ | 17 | } else{ |
| 18 | - throw new \ErrorException('Error configuration - undefined class'); | 18 | + return null; |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | $object = new $class(); | 21 | $object = new $class(); |
lib/Parser.php
| @@ -10,8 +10,6 @@ namespace yii\multiparser; | @@ -10,8 +10,6 @@ namespace yii\multiparser; | ||
| 10 | 10 | ||
| 11 | //@todo - заменить read на parse | 11 | //@todo - заменить read на parse |
| 12 | 12 | ||
| 13 | -use common\components\CustomVarDamp; | ||
| 14 | - | ||
| 15 | abstract class Parser | 13 | abstract class Parser |
| 16 | { | 14 | { |
| 17 | public $converter_conf = []; | 15 | public $converter_conf = []; |
lib/XlsxParser.php
| @@ -130,10 +130,14 @@ class XlsxParser extends TableParser | @@ -130,10 +130,14 @@ class XlsxParser extends TableParser | ||
| 130 | 130 | ||
| 131 | protected function readStrings() | 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,7 +174,12 @@ class XlsxParser extends TableParser | ||
| 170 | 174 | ||
| 171 | if ( isset($attr['t']) ){ | 175 | if ( isset($attr['t']) ){ |
| 172 | // it's not a value it's a string, so fetch it from string array | 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 | } else { | 183 | } else { |
| 175 | $value = (string)round( $value, $this->float_precision ); | 184 | $value = (string)round( $value, $this->float_precision ); |
| 176 | } | 185 | } |