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']; // }
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);
} $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);
<?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!');
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('/ /', ' ', $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); }
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; }
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'); }
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'];
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); }