Exemple #1
0
$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);
Exemple #2
0
<?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;
Exemple #3
0
$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']));
Exemple #4
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);
Exemple #5
0
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['Наименование'])) {
Exemple #6
0
 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;
 }