コード例 #1
0
ファイル: filters.php プロジェクト: akiyatkin/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 = infra_forFS($value);
                 $id = mb_strtolower($idi);
                 if (!Xlsx::isSpecified($id)) {
                     continue;
                 }
                 $r = true;
                 $params[$k]['option'][$id]['filter']++;
             }
             if ($r) {
                 $params[$k]['filter']++;
             }
             //Позиций с этим параметром
         }
     }
     //У скольки позиций в выборке у которых этот параметр не указан
     $params[$k]['nofilter'] = sizeof($poss) - $params[$k]['filter'];
     //
 }
コード例 #2
0
ファイル: Catalog.php プロジェクト: oduvanio/catalog
 public static function option($values, $count, $search, $showhard = false)
 {
     foreach ($values as $value => $s) {
         break;
     }
     $opt = array('type' => '', 'values' => $values);
     $min = $value;
     $max = $value;
     $yes = 0;
     $yesall = 0;
     foreach ($opt['values'] as $v => $c) {
         if (Xlsx::isSpecified($v)) {
             $yes += $c['search'];
             $yesall += $c['count'];
         }
     }
     $opt['yes'] = $yes;
     if (!$showhard && $count > $yesall * 10) {
         //Если отмеченных менее 10% то такие опции не показываются
         return false;
     }
     $type = false;
     foreach ($opt['values'] as $val => $c) {
         //Слайдер
         if (is_string($val)) {
             $type = 'string';
             break;
         }
         if ($val < $min) {
             $min = $val;
         }
         if ($val > $max) {
             $max = $val;
         }
     }
     if (!$type) {
         $len = sizeof($opt['values']);
         if ($len > 5) {
             //Слайдер
             $opt['min'] = $min;
             $opt['max'] = $max;
             $type = 'slider';
             unset($opt['values']);
         } else {
             $type = 'string';
         }
     }
     $opt['type'] = $type;
     if ($opt['type'] == 'string') {
         if (sizeof($opt['values']) > 30) {
             $opt['values'] = array();
             if (!$showhard) {
                 return false;
             }
         }
         if ($showhard) {
             foreach ($showhard as $show => $one) {
                 if ($show == 'yes') {
                     continue;
                 }
                 if ($show == 'no') {
                     continue;
                 }
                 if ($opt['values'][$show]) {
                     continue;
                 }
                 $title = $show;
                 $opt['values'][$show] = array('id' => $show, 'title' => $title);
             }
         }
         /*foreach($opt['values'] as $v){//Когда всех значений по 1
         			if($v!=1){
         				//Единичные опции
         				$opt['values']=array();
         				break;
         			}
         		}*/
         //if(sizeof($opt['values'])>10){
         //$opt['values_more']=array_slice($opt['values'],6,sizeof($opt['values'])-6,true);
         //$opt['values']=array_slice($opt['values'],0,6,true);
         //}
     }
     if ($opt['type'] == 'string') {
         usort($opt['values'], function ($v1, $v2) {
             //if ($v1['filter']>$v2['filter']) return -1;
             //if ($v1['filter']<$v2['filter']) return 1;
             if ($v1['count'] > $v2['count']) {
                 return -1;
             }
             if ($v1['count'] < $v2['count']) {
                 return 1;
             }
         });
     }
     /*if(sizeof($opt['values'])==1){
           if($opt['yes']==$count){//Значение есть у всех позиций и только один вариант
               unset($params[$k]);
               continue;
           }
       }*/
     if (!$opt['values'] && $opt['type'] != 'slider') {
         if ($opt['yesall'] == $count) {
             //Слишком много занчений но при этом у всех позиций они указаны и нет no yes
             return false;
         }
     }
     $opt['yesall'] = $yesall;
     $opt['no'] = $search - $opt['yes'];
     //из общего количества вычесть количество с yes
     $opt['noall'] = $count - $opt['yesall'];
     //из общего количества вычесть количество с yes
     return $opt;
 }
コード例 #3
0
ファイル: filters.php プロジェクト: oduvanio/catalog
             }
             if (!Xlsx::isSpecified($pos['more'][$v['posid']])) {
                 continue;
             }
             $params[$k]['option'][$pos['more'][$v['posid']]]['filter']++;
             $params[$k]['filter']++;
         }
     } else {
         $mymd = array_diff_key($md, array_flip(array($v['mdid'])));
         $res = Catalog::search($mymd);
         $poss = $res['list'];
         foreach ($poss as &$pos) {
             if (preg_match("/[:]/", $pos[$v['posid']])) {
                 continue;
             }
             if (!Xlsx::isSpecified($pos[$v['posid']])) {
                 continue;
             }
             $params[$k]['option'][$pos[$v['posid']]]['filter']++;
             $params[$k]['filter']++;
         }
     }
     $params[$k]['nofilter'] = sizeof($poss) - $params[$k]['filter'];
 }
 //ДОБАВИЛИ option values
 foreach ($params as $k => $v) {
     if ($v['more']) {
         $right = array('more', $v['mdid']);
         $add = 'more.';
     } else {
         $right = array($v['mdid']);
コード例 #4
0
ファイル: Catalog.php プロジェクト: akiyatkin/catalog
 public static function option($values, $count, $search, $showhard = false)
 {
     foreach ($values as $value => $s) {
         break;
     }
     $opt = array('type' => '', 'values' => $values);
     $min = $value;
     $max = $value;
     $yes = 0;
     $yesall = 0;
     /*
     	$values массив со всеми возможными занчениями каждого параметра
     	каждое значение характеризуется
     	count - сколько всего в текущем разделе, определяющего набор фильтров
     	search - сколько всего найдено с md
     	filter - сколько найдено если данный параметр не указана в md
     */
     foreach ($opt['values'] as $v => $c) {
         if (Xlsx::isSpecified($v)) {
             $yes += $c['search'];
             //Сколько найдено
             $yesall += $c['count'];
             //Сколько в группе
         }
     }
     $opt['search'] = $yes;
     $opt['count'] = $yesall;
     if (!$showhard && $count > $yesall * 10) {
         //Если отмеченных менее 10% то такие опции не показываются
         return false;
     }
     $type = false;
     foreach ($opt['values'] as $val => $c) {
         //Слайдер
         if (is_string($val)) {
             $type = 'string';
             break;
         }
         if ($val < $min) {
             $min = $val;
         }
         if ($val > $max) {
             $max = $val;
         }
     }
     if (!$type) {
         $len = sizeof($opt['values']);
         if ($len > 5) {
             //Слайдер
             $opt['min'] = $min;
             $opt['max'] = $max;
             $type = 'slider';
             unset($opt['values']);
         } else {
             $type = 'string';
         }
     }
     $opt['type'] = $type;
     if ($opt['type'] == 'string') {
         if (sizeof($opt['values']) > 30) {
             $opt['values'] = array();
             if (!$showhard) {
                 return false;
             }
         }
         if ($showhard) {
             foreach ($showhard as $show => $one) {
                 $title = $show;
                 $show = mb_strtolower($show);
                 if ($show == 'yes') {
                     continue;
                 }
                 if ($show == 'no') {
                     continue;
                 }
                 if ($opt['values'][$show]) {
                     continue;
                 }
                 $opt['values'][$show] = array('id' => $show, 'title' => $title);
             }
         }
         /*foreach($opt['values'] as $v){//Когда всех значений по 1
         			if($v!=1){
         				//Единичные опции
         				$opt['values']=array();
         				break;
         			}
         		}*/
         //if(sizeof($opt['values'])>10){
         //$opt['values_more']=array_slice($opt['values'],6,sizeof($opt['values'])-6,true);
         //$opt['values']=array_slice($opt['values'],0,6,true);
         //}
     }
     if ($opt['type'] == 'string') {
         usort($opt['values'], function ($v1, $v2) {
             //if ($v1['filter']>$v2['filter']) return -1;
             //if ($v1['filter']<$v2['filter']) return 1;
             if ($v1['count'] > $v2['count']) {
                 return -1;
             }
             if ($v1['count'] < $v2['count']) {
                 return 1;
             }
         });
     }
     /*if(sizeof($opt['values'])==1){
     			if($opt['yes']==$count){//Значение есть у всех позиций и только один вариант
     				unset($params[$k]);
     				continue;
     			}
     		}*/
     if (!$opt['values'] && $opt['type'] != 'slider') {
         if ($opt['count'] == $count) {
             //Слишком много занчений но при этом у всех позиций они указаны и нет no yes
             return false;
         }
     }
     $opt['nosearch'] = $search - $opt['search'];
     //из общего количества вычесть количество указанных
     $opt['nocount'] = $count - $opt['count'];
     //из общего количества вычесть количество с yes
     return $opt;
 }