예제 #1
0
 public function uploadInformProduct()
 {
     // проверяем существует есть ли файл
     $filename = \Yii::$app->basePath . '/web/files/upload.xlsx';
     $chunkSize = 500;
     //размер считываемых строк за раз
     //начинаем читать со строки 2, в PHPExcel первая строка имеет индекс 1, и как правило это строка заголовков
     $startRow = 2;
     $exit = false;
     //флаг выхода
     $empty_value = 0;
     //счетчик пустых знаений
     $objReader = \PHPExcel_IOFactory::createReaderForFile($filename);
     $objReader->setReadDataOnly(true);
     $chunkFilter = new chunkReadFilter();
     $objReader->setReadFilter($chunkFilter);
     /**  Tell the Reader that we want to use the Read Filter that we've Instantiated  **/
     $objReader->setReadFilter($chunkFilter);
     //внешний цикл, пока файл не кончится
     while (!$exit) {
         $chunkFilter->setRows($startRow, $chunkSize);
         //устанавливаем знаечние фильтра
         $objPHPExcel = $objReader->load($filename);
         //открываем файл
         $objPHPExcel->setActiveSheetIndex(0);
         //устанавливаем индекс активной страницы
         $objWorksheet = $objPHPExcel->getActiveSheet();
         //делаем активной нужную страницу
         //внутренний цикл по строкам
         for ($i = $startRow; $i < $startRow + $chunkSize; $i++) {
             //получаем первое знаение в строке
             $value = $objWorksheet->getCellByColumnAndRow(0, $i)->getValue();
             if (!empty($value)) {
                 if (!PodruzkaProduct::findOne(['article' => $value])) {
                     $product = new PodruzkaProduct();
                 } else {
                     $product = PodruzkaProduct::findOne(['article' => $value]);
                 }
                 $product->article = trim(htmlspecialchars($objWorksheet->getCellByColumnAndRow(0, $i)->getValue()));
                 $product->title = (string) $objWorksheet->getCellByColumnAndRow(1, $i)->getValue();
                 $product->arrival = (string) $objWorksheet->getCellByColumnAndRow(2, $i)->getValue();
                 $product->group = (string) $objWorksheet->getCellByColumnAndRow(3, $i)->getValue();
                 $product->category = (string) $objWorksheet->getCellByColumnAndRow(4, $i)->getValue();
                 $product->sub_category = (string) $objWorksheet->getCellByColumnAndRow(5, $i)->getValue();
                 $product->detail = (string) $objWorksheet->getCellByColumnAndRow(6, $i)->getValue();
                 $product->brand = (string) $objWorksheet->getCellByColumnAndRow(7, $i)->getValue();
                 $product->sub_brand = (string) $objWorksheet->getCellByColumnAndRow(8, $i)->getValue();
                 $product->line = (string) $objWorksheet->getCellByColumnAndRow(9, $i)->getValue();
                 $product->price = (string) $objWorksheet->getCellByColumnAndRow(10, $i)->getValue();
                 $product->ma_price = (string) $objWorksheet->getCellByColumnAndRow(11, $i)->getValue();
                 $product->save();
             }
             $productPrice = new PodruzkaPrice();
             $productPrice->article = $objWorksheet->getCellByColumnAndRow(0, $i)->getValue();
             $productPrice->price = (string) $objWorksheet->getCellByColumnAndRow(10, $i)->getValue();
             $productPrice->ma_price = (string) $objWorksheet->getCellByColumnAndRow(11, $i)->getValue();
             if (!$productPrice->save()) {
                 //TODO ?
             }
             //проверяем значение на пустоту
             if (empty($value)) {
                 $empty_value++;
             }
             //после 1 пустого значения, завершаем обработку файла, думая, что это конец
             if ($empty_value == 1) {
                 $exit = true;
                 continue;
             }
         }
         $objPHPExcel->disconnectWorksheets();
         //чистим
         unset($objPHPExcel);
         //память
         $startRow += $chunkSize;
         //переходим на следующий шаг цикла, увеличивая строку, с которой будем читать файл
     }
     unlink($filename);
 }
예제 #2
0
 public function actionLpodr()
 {
     $entity = new LetualProduct();
     $offset = 0;
     do {
         $products = $entity->getEntity($offset, 20);
         if (!empty($products)) {
             foreach ($products as $product) {
                 if (empty($product->letu_id)) {
                     $query = new Query();
                     $str = '';
                     $rows = $query->from('pproduct')->match(new Expression(':match', ['match' => '@(description) ' . \Yii::$app->sphinx->escapeMatchValue($product->title)]))->all();
                     foreach ($rows as $row) {
                         if (!empty($row['id'])) {
                             // проставляем идентификатор
                             $str = $row['id'];
                             break;
                         }
                     }
                     // обновляем таблицу podruzka_product
                     if (!empty($str)) {
                         $productEntity = PodruzkaProduct::findOne(['id' => $str]);
                         if ($productEntity instanceof PodruzkaProduct) {
                             if (empty($productEntity->letu_id)) {
                                 $productEntity->letu_id = (string) $product->id;
                                 $productEntity->save();
                             }
                         }
                     }
                 }
             }
             $z = 1;
             $offset += 20;
             unset($productEntity);
             unset($query);
         } else {
             $z = 0;
         }
     } while ($z > 0);
     return 0;
 }
 /**
  * Finds the PodruzkaProduct model based on its primary key value.
  * If the model is not found, a 404 HTTP exception will be thrown.
  *
  * @param integer $id
  *
  * @return PodruzkaProduct the loaded model
  * @throws NotFoundHttpException if the model cannot be found
  */
 protected function findModel($id)
 {
     if (($model = PodruzkaProduct::findOne($id)) !== null) {
         return $model;
     } else {
         throw new NotFoundHttpException('The requested page does not exist.');
     }
 }