예제 #1
0
파일: filters.php 프로젝트: infrajs/catalog
             if (preg_match("/[:]/", $pos[$prop['posid']])) {
                 continue;
             }
             if (!Xlsx::isSpecified($pos[$prop['posid']])) {
                 continue;
             }
             $r = false;
             if ($prop['separator']) {
                 $arval = explode($prop['separator'], $pos[$prop['posid']]);
             } else {
                 $arval = array($pos[$prop['posid']]);
             }
             foreach ($arval as $i => $value) {
                 $idi = Path::encode($value);
                 $id = mb_strtolower($idi);
                 if (!Xlsx::isSpecified($id)) {
                     continue;
                 }
                 $r = true;
                 $params[$k]['option'][$idi]['filter']++;
             }
             if ($r) {
                 $params[$k]['filter']++;
             }
             //Позиций с этим параметром
         }
     }
     //У скольки позиций в выборке у которых этот параметр не указан
     $params[$k]['nofilter'] = sizeof($poss) - $params[$k]['filter'];
     //
 }
예제 #2
0
파일: tester.php 프로젝트: infrajs/excel
use infrajs\excel\Xlsx;
use infrajs\router\Router;
use infrajs\ans\Ans;
if (!is_file('vendor/autoload.php')) {
    chdir('../../../');
    require_once 'vendor/autoload.php';
    Router::init();
    //Требуется автоматическая установка
}
$ans = array();
//Три уровня разбора данных
//1 Минимум требований к структуре Excel документа, данные "как есть"
$data = Xlsx::parse('vendor/infrajs/excel/test.xlsx');
if (sizeof($data) != 22) {
    return Ans::err($ans, 'Некорректный результат Xlsx::parse ' . sizeof($data));
}
//2 Простая структура - Распознаются заголовки таблицы, описание таблицы, структура групп. Можно применять Xlsx::runPoss и Xlsx::runGroups
$data = Xlsx::get('vendor/infrajs/excel/test.xlsx');
if (sizeof($data) != 7) {
    return Ans::err($ans, 'Некорректный результат Xlsx::get ' . sizeof($data));
}
//3 Оптимизировання структура. Обязательна колонка Артикул, объединение групп. Большой список опций вторым аргументом
$data = Xlsx::init('vendor/infrajs/excel/test.xlsx');
/*echo count($data);
echo '<pre>';
print_r($data);
exit;*/
if (sizeof($data['childs']) != 1) {
    return Ans::err($ans, 'Некорректный результат Xlsx::init ' . sizeof($data));
}
return Ans::ret($ans);
예제 #3
0
}
$p = explode(',', $lim);
if (sizeof($p) != 2) {
    return Ans::err($ans, 'Is wrong paramter lim');
}
$start = (int) $p[0];
$count = (int) $p[1];
$args = array($start, $count);
$list = Catalog::cache('producers.php', function ($start, $count) {
    $ans = array();
    $data = Catalog::init();
    $prods = array();
    Xlsx::runPoss($data, function &(&$pos) use(&$prods) {
        if (empty($prods[$pos['producer']])) {
            $prods[$pos['producer']] = 0;
        }
        $prods[$pos['producer']]++;
        $r = null;
        return $r;
    });
    arsort($prods, SORT_NUMERIC);
    $prods = array_slice($prods, $start, $count);
    return $prods;
}, $args, isset($_GET['re']));
$ans['menu'] = Load::loadJSON('-catalog/menu.json');
$ans['list'] = $list;
$conf = Catalog::$conf;
$ans['breadcrumbs'][] = array('main' => true, 'href' => '', 'title' => 'Главная', 'add' => 'group');
$ans['breadcrumbs'][] = array('href' => '', 'title' => $conf['title'], 'add' => 'group');
$ans['breadcrumbs'][] = array('active' => true, 'href' => 'producers', 'title' => 'Производители');
return Ans::ret($ans);
예제 #4
0
<?php

namespace infrajs\excel;

use infrajs\access\Access;
use infrajs\ans\Ans;
use infrajs\config\Config;
Access::test(true);
$ans = array();
$data = Xlsx::init('-test-akiyatkin/resources/test.xlsx');
if (!$data) {
    return Ans::err($ans, 'Cant read test.xlsx');
}
$data = Xlsx::init('-test-akiyatkin/resources/test.csv');
if (!$data) {
    return Ans::err($ans, 'Cant read test.csv');
}
if (sizeof($data['childs']) != 1) {
    return Ans::err($ans, 'Cant read test.csv ' . sizeof($data['childs']));
}
$num = ini_get('mbstring.func_overload');
if ($num != 0) {
    $ans['class'] = 'bg-warning';
    return Ans::err($ans, 'mbstring.func_overload should be 0, not ' . $num);
} else {
    $data = Xlsx::get('-test-akiyatkin/resources/test.xls');
    if (sizeof($data['childs'][0]['data']) != 30) {
        return Ans::err($ans, 'Cant read test.xls ' . sizeof($data['childs'][0]['data']));
    }
}
return Ans::ret($ans, 'csv, xls, xlsx read ok!');
예제 #5
0
파일: Yml.php 프로젝트: infrajs/yml
 public static function init()
 {
     $data = Catalog::init();
     Xlsx::runGroups($data, function (&$group, $i, &$parent) {
         $group['data'] = array_filter($group['data'], function (&$pos) {
             //Убираем позиции у которых не указана цена
             //if($pos['Синхронизация']!='Да')return false;
             if (!$pos['Цена']) {
                 return false;
             }
             $pos['Цена'] = preg_replace('/\\s/', '', $pos['Цена']);
             if (!$pos['Цена']) {
                 return false;
             }
             if (strtolower($pos['Маркет']) == 'да') {
                 $pos['Описание'] = strip_tags($pos['Описание']);
                 $pos['Описание'] = preg_replace('/&nbsp;/', ' ', $pos['Описание']);
                 return true;
             }
         });
         $group['data'] = array_values($group['data']);
     });
     Xlsx::runGroups($data, function (&$group, $i, &$parent) {
         if ($group['childs']) {
             $group['childs'] = array_filter($group['childs'], function (&$g) {
                 if (!$g['data'] && !$g['childs']) {
                     return false;
                 }
                 return true;
             });
             $group['childs'] = array_values($group['childs']);
         }
     }, array(), true);
     Xlsx::runPoss($data, function (&$pos) {
         $conf = Catalog::$conf;
         Xlsx::addFiles($conf['dir'], $pos, array('Производитель', 'article'));
         foreach ($pos['images'] as $k => $v) {
             $src = $pos['images'][$k];
             $p = explode('/', $src);
             foreach ($p as $i => $n) {
                 $p[$i] = urlencode($n);
                 $p[$i] = preg_replace('/\\+/', '%20', $p[$i]);
             }
             $pos['images'][$k] = implode('/', $p);
         }
     });
     return static::parse($data);
 }
예제 #6
0
파일: Xlsx.php 프로젝트: infrajs/excel
 public static function &get($src)
 {
     $data = xls_make($src);
     xls_processDescr($data);
     xls_processPoss($data);
     Xlsx::runGroups($data, function &(&$gr) {
         unset($gr['parent']);
         $r = null;
         return $r;
     });
     Xlsx::runPoss($data, function &(&$pos) {
         unset($pos['parent']);
         $r = null;
         return $r;
     });
     return $data;
 }
예제 #7
0
파일: index.php 프로젝트: infrajs/excel
        if ($fdata['ext'] && $fdata['ext'] != $fd['ext']) {
            return;
        } elseif ($result) {
            //Расширение не указано и уже есть результат
            //Исключение.. расширение tpl самое авторитетное
            if ($fd['ext'] != 'tpl') {
                return;
            }
        }
        $result = $file;
    }, scandir(Path::theme($folder)));
    if (!$result) {
        return false;
    }
    return Path::theme($folder . $result);
}, array($fdata['path']), isset($_GET['re']));
$ans = array('src' => $isrc);
if (!$src) {
    if (!Load::isphp()) {
        header('HTTP/1.0 404 Not Found');
    }
    return;
}
$fdata = Load::srcInfo($src);
if (in_array($fdata['ext'], array('xls', 'xlsx', 'csv'))) {
    $ans = Xlsx::get($src);
    return Ans::ans($ans);
}
if (!Load::isphp()) {
    header('HTTP/1.0 400 Bad Request');
}
예제 #8
0
use infrajs\config\Config;
//Nostoer::on();
$orig_val = Path::toutf(strip_tags($_GET['val']));
$orig_art = Path::toutf(strip_tags($_GET['art']));
$val = mb_strtolower($orig_val);
$art = mb_strtolower($orig_art);
$args = array($val, $art);
$ans = array();
$pos = Catalog::cache('position', function ($val, $art) {
    $data = Catalog::init();
    // список всей продукции
    return Xlsx::runPoss($data, function &(&$pos, $i, &$group) use(&$val, &$art) {
        $r = null;
        if (mb_strtolower($pos['producer']) !== $val) {
            return $r;
        }
        if (mb_strtolower($pos['article']) !== $art) {
            return $r;
        }
        return $pos;
    });
}, $args, isset($_GET['re']));
if (isset($_GET['seo'])) {
    if (!$pos) {
        return Ans::err($ans, 'Position not found');
    }
    $link = $_GET['seo'];
    $link = $link . '/' . urlencode($pos['producer']) . '/' . urlencode($pos['article']);
    $ans['external'] = '-catalog/seo.json';
    $ans['title'] = $pos['Производитель'] . ' ' . $pos['Артикул'];
    if (!empty($pos['Наименование'])) {
        $ans['title'] = $pos['Наименование'] . ' ' . $ans['title'];
예제 #9
0
파일: Catalog.php 프로젝트: infrajs/catalog
 public static function getPos(&$pos)
 {
     $args = array($pos['producer'], $pos['article']);
     return Access::cache('Catalog::getPos', function () use($pos) {
         Xlsx::addFiles(Catalog::$conf['dir'], $pos);
         $files = explode(',', @$pos['Файлы']);
         foreach ($files as $f) {
             if (!$f) {
                 continue;
             }
             $f = trim($f);
             Xlsx::addFiles(Catalog::$conf['dir'], $pos, $f);
         }
         $files = array();
         foreach ($pos['files'] as $f) {
             if (is_string($f)) {
                 $f = Path::theme($f);
                 //убрали звездочку
                 $d = Load::srcInfo(Path::toutf($f));
             } else {
                 $d = $f;
                 $f = $d['src'];
             }
             $d['size'] = round(filesize(Path::tofs($f)) / 1000000, 2);
             if (!$d['size']) {
                 $d['size'] = '0.01';
             }
             $d['src'] = Path::pretty($d['src']);
             $files[] = $d;
         }
         $pos['files'] = $files;
         if ($pos['texts']) {
             foreach ($pos['texts'] as $k => $t) {
                 $pos['texts'][$k] = Load::loadTEXT('-doc/get.php?src=' . $t);
             }
         }
         return $pos;
     }, $args);
 }