$ans = Catalog::cache('Catalog::search.php', function ($md, $page) use($ans) { //1 $ans['is'] = ''; //group producer search Что было найдено по запросу val (Отдельный файл is:change) $ans['descr'] = ''; //абзац текста в начале страницы'; $ans['text'] = ''; //большая статья снизу всего $ans['name'] = ''; //заголовок длинный и человеческий $ans['breadcrumbs'] = array(); //Путь где я нахожусь //$ans['val']=$val;//Заголовок страницы //$ans['title']=$val;//Что именно было найдено название для FS $ans['filters'] = array(); //Данные для формирования интерфейса фильтрации, опции и тп $ans['groups'] = array(); $ans['producers'] = array(); $ans['numbers'] = array(); //Данные для построения интерфейса постраничной разбивки $ans['list'] = array(); //Массив позиций Catalog::search($md, $ans); $conf = Catalog::$conf; //BREADCRUMBS TITLE if (!$md['group'] && $md['producer'] && sizeof($md['producer']) == 1) { //ПРОИЗВОДИТЕЛЬ if ($md['producer']) { foreach ($md['producer'] as $producer => $v) { break; } } else { $producer = false; } //is!, descr!, text!, name!, breadcrumbs! $ans['is'] = 'producer'; $name = Catalog::getProducer($producer); $ans['name'] = $name; $ans['title'] = $name; $conf = Config::get('catalog'); $ans['breadcrumbs'][] = array('title' => $conf['title'], 'add' => 'producer:'); $menu = Load::loadJSON('-catalog/menu.json'); $ans['breadcrumbs'][] = array('href' => 'producers', 'title' => $menu['producers']['title']); $ans['breadcrumbs'][] = array('add' => 'producer::producer.' . $name . '=1', 'title' => $name); $ans['breadcrumbs'][sizeof($ans['breadcrumbs']) - 1]['active'] = true; } else { if (!$md['group'] && $md['search']) { $ans['is'] = 'search'; $ans['name'] = $md['search']; $ans['title'] = Path::encode($md['search']); $ans['breadcrumbs'][] = array('title' => $conf['title'], 'add' => 'search:'); $menu = Load::loadJSON('-catalog/menu.json'); $ans['breadcrumbs'][] = array('href' => 'find', 'title' => $menu['find']['title']); $ans['breadcrumbs'][] = array('title' => $ans['name']); $ans['breadcrumbs'][sizeof($ans['breadcrumbs']) - 1]['active'] = true; } else { //is!, descr!, text!, name!, breadcrumbs!, title if ($md['group']) { foreach ($md['group'] as $group => $v) { break; } } else { $group = false; } $group = Catalog::getGroup($group); $ans['is'] = 'group'; $ans['breadcrumbs'][] = array('href' => '', 'title' => $conf['title'], 'add' => 'group:'); array_map(function ($p) use(&$ans) { $group = Catalog::getGroup($p); $ans['breadcrumbs'][] = array('href' => '', 'title' => $group['name'], 'add' => 'group::group.' . $p . '=1'); }, $group['path']); if (sizeof($ans['breadcrumbs']) == 1) { array_unshift($ans['breadcrumbs'], array('main' => true, "title" => "Главная", "nomark" => true)); } $ans['name'] = $group['name']; //имя группы длинное $ans['descr'] = @$group['descr']['Описание группы']; $ans['title'] = $group['title']; $ans['breadcrumbs'][sizeof($ans['breadcrumbs']) - 1]['active'] = true; if (!$group['path']) { $ans['breadcrumbs'][] = array('href' => 'producers', 'title' => 'Производители'); } } } Catalog::sort($ans['list'], $md); //Numbers $pages = ceil(sizeof($ans['list']) / $md['count']); if ($pages < $page) { $page = $pages; } $ans['numbers'] = Catalog::numbers($page, $pages, 11); $ans['list'] = array_slice($ans['list'], ($page - 1) * $md['count'], $md['count']); //Text $src = Rubrics::find($conf['dir'] . 'articles/', $ans['title']); if ($src) { $ans['textinfo'] = Rubrics::info($src); $ans['text'] = Load::loadTEXT('-doc/get.php?src=' . $src); //Изменение текста не отражается как изменение каталога, должно быть вне кэша } foreach ($ans['list'] as $k => $pos) { $pos = Catalog::getPos($pos); $group = Catalog::getGroup($pos['group']); $pos['descr'] = $group['descr']; unset($pos['texts']); unset($pos['files']); $ans['list'][$k] = $pos; } return $ans; }, $args, $re);
<?php namespace infrajs\yml; use infrajs\catalog\Catalog; use infrajs\config\Config; if (!is_file('vendor/autoload.php')) { chdir('../../../'); require_once 'vendor/autoload.php'; } $html = Catalog::cache('ymlshow', function () { return Yml::init(); }); header("Content-type: text/xml"); echo $html;
$res = Catalog::cache('filters.php filter list', function ($md) { $conf = Config::get('catalog'); $ans = array(); $params = Catalog::getParams($md['group']); $poss = Catalog::getPoss($md['group']); //Поиск $count = sizeof($poss); //Позиций в группе $res = Catalog::search($md); $poss = $res['list']; $search = sizeof($poss); //Позиций найдено //ПОСЧИТАЛИ FILTER со всеми md foreach ($params as $k => $prop) { if ($prop['more']) { foreach ($poss as &$pos) { if (!Xlsx::isSpecified($pos['more'][$prop['posid']])) { continue; } $r = false; if ($prop['separator']) { $arval = explode($prop['separator'], $pos[$prop['posid']]); } else { $arval = array($pos[$prop['posid']]); } foreach ($arval as $value) { $idi = Path::encode($value); $id = mb_strtolower($idi); if (!Xlsx::isSpecified($id)) { continue; } $r = true; $params[$k]['option'][$idi]['search']++; } if ($r) { $params[$k]['search']++; } } } else { foreach ($poss as &$pos) { if (!Xlsx::isSpecified($pos[$prop['posid']])) { continue; } $r = false; if ($prop['separator']) { $arval = explode($prop['separator'], $pos[$prop['posid']]); $arname = explode($prop['separator'], $pos[$prop['posname']]); } else { $arval = array($pos[$prop['posid']]); $arname = array($pos[$prop['posname']]); } foreach ($arval as $i => $value) { $idi = Path::encode($value); $id = mb_strtolower($idi); if (!Xlsx::isSpecified($id)) { continue; } $r = true; $params[$k]['option'][$idi]['search']++; } if ($r) { $params[$k]['search']++; } //Позиций с этим параметром } } $params[$k]['nosearch'] = sizeof($poss) - $params[$k]['search']; } //ПОСЧИТАЛИ FILTER как если бы не было выбрано в этой группе md foreach ($params as $k => $prop) { if ($prop['more']) { $mymd = $md; $mymd['more'] = array_diff_key($md['more'], array_flip(array($prop['mdid']))); $res = Catalog::search($mymd); $poss = $res['list']; foreach ($poss as &$pos) { if (preg_match("/[:]/", $pos['more'][$prop['posid']])) { continue; } if (!Xlsx::isSpecified($pos['more'][$prop['posid']])) { continue; } $r = false; if ($prop['separator']) { $arval = explode($prop['separator'], $pos['more'][$prop['posid']]); } else { $arval = array($pos['more'][$prop['posid']]); } foreach ($arval as $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']++; } } } else { $mymd = array_diff_key($md, array_flip(array($prop['mdid']))); $res = Catalog::search($mymd); $poss = $res['list']; foreach ($poss as &$pos) { 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']; // } /* $params промежуточный массив со всеми возможными занчениями каждого параметра каждое значение характеризуется count - сколько всего в группе позиций с указанным параметром search - сколько всего найдено с md filter - сколько найдено если данный параметр не указана в md */ //ДОБАВИЛИ option values foreach ($params as $k => $v) { if ($v['more']) { $right = array('more', $v['mdid']); $add = 'more.'; } else { $right = array($v['mdid']); $add = ''; } $showhard = Sequence::get($md, $right); if (!is_array($conf['filtershowhard'])) { $conf['filtershowhard'] = array($conf['filtershowhard']); } if (in_array($v['mdid'], $conf['filtershowhard'])) { $showhard = true; } $opt = Catalog::option($params[$k]['option'], $count, $search, $showhard); if (!$opt) { unset($params[$k]); } else { $params[$k]['option'] = $opt; } } $ans['params'] = $params; //$ans['params']=$params; $ans['search'] = $search; //Позиций найдено $ans['count'] = $count; //Позиций в группе $ans['template'] = array(); foreach ($params as $param) { $block = array(); if ($param['more']) { $right = array('more', $param['mdid']); $add = 'more.'; } else { $right = array($param['mdid']); $add = ''; } $mymd = Sequence::get($md, $right); if (!$mymd) { $mymd = array(); } $paramid = Sequence::short(array(Catalog::urlencode($param['mdid']))); $block['checked'] = !!$mymd['yes']; if ($block['checked']) { $block['add'] = $add . $paramid . '.yes='; } else { $block['add'] = $add . $paramid . '.yes=1'; } $block['title'] = $param['title']; $block['type'] = $param['option']['type']; $block['filter'] = $param['filter']; $block['search'] = $param['search']; $block['count'] = $param['count']; $block['row'] = array(); if ($param['option']['nocount']) { $row = array('title' => 'Не указано', 'filter' => $param['nofilter']); $row['checked'] = !!$mymd['no']; if ($row['checked']) { $row['add'] = $add . $paramid . '.no='; } else { $row['add'] = $add . $paramid . '.no=1'; } $block['row'][] = $row; } if ($block['type'] == 'string') { foreach ($param['option']['values'] as $value) { $row = array('title' => $value['title'], 'filter' => $value['filter']); $row['checked'] = !!$mymd[$value['id']]; $valueid = Sequence::short(array(Catalog::urlencode($value['id']))); if ($row['checked']) { $row['add'] = $add . $paramid . '.' . $valueid . '='; } else { $row['add'] = $add . $paramid . '.' . $valueid . '=1'; } $block['row'][] = $row; } } if ($conf['filteroneitem'] || sizeof($block['row']) > 1) { $ans['template'][] = $block; } } return $ans; }, $args, isset($_GET['re']));
} $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);
use infrajs\ans\Ans; 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['Наименование'])) {
public static function search($md, &$ans = array()) { $args = array(Catalog::nocache($md)); $res = Catalog::cache('search.php filter list', function ($md) { $ans['list'] = Catalog::getPoss($md['group']); //ЭТАП filters list $ans['filters'] = Catalog::filtering($ans['list'], $md); $now = null; foreach ($md['group'] as $now => $one) { break; } $ans['childs'] = Catalog::getGroups($ans['list'], $now); $ans['count'] = sizeof($ans['list']); return $ans; }, $args, isset($_GET['re'])); $ans = array_merge($ans, $res); return $ans; }