shop script 8 поиск сортировка

планируется сделать предварительную сортировку в поиске

например выдача результатов с уже отсортированными продуктами

по типу товаров (причем именно по такому порядку какой установлен в настройках Типы и характеристики товаров) и по цене и наличию одновременно

или нет?

11 ответов

  • 1
    Алексей Webasyst 14 ноября 2018 14:30 #

    Релиз версии через неделю, сможете проверить на демо-витрине.

    • 0
      Петр Петр 14 ноября 2018 14:47 #

      мне кажется нет смысла проверять, а есть хотя бы хук чтобы вклиниться в запрос и сделать свою сортировку?

      • +1
        Алексей Алексей Webasyst 14 ноября 2018 15:20 #

        Полный список новых хуков будет после релиза. Текущий список есть в git-версии для разработчиков.

      • +1
        Алексей Алексей Webasyst 14 ноября 2018 15:35 #

        ss8/search/?query=Коралл&sort=price
        ss8/search/?query=Коралл&sort=name
        Работают

        • +1
          Петр Петр 14 ноября 2018 16:50 #

          ну в 7 тоже можно в форму вставить <input type="hidden" name="sort" value="rating">

          но этого мало надо чтобы это можно было сразу настроить во бекенде в настройках поиска

          в каком порядке и по какому признаку выводить товары из поиска

          а еще два или более сорта не вставить работает только одно последнее

          ss8/search/?query=Коралл &sort=type_id &sort=price

          • +1
            Алексей Алексей Webasyst 14 ноября 2018 19:52 #

            1. Вы можете указать параметр в Дополнительные параметры в настройках поселения и использовать его для этой витрины для сортировки.
            2. Поле для сортировки только одно, максимум можете добавить порядок сортировки через order.

            • +1
              Петр Петр 15 ноября 2018 09:46 #

              1 да так можно разделить по витринам, нет необходимости

              2 было бы здорово чтобы можно было бы вставлять несколько полей, и сортировка была бы по очерёдности, и больше параметров для сортировки

  • 1
    Алексей Webasyst 14 ноября 2018 16:46 #

    В 7-й версии тоже работает, поэтому сортировка зависит от используемой темы дизайна.

  • 2
    Петр 15 ноября 2018 12:50 #

    я сделал хелпер для своей сортировки

    <?php
    
    class shopHelperSearch
    {
    	public static function viewType() /* вывод типов характеристик */
        {
    		$types = array();
    		$model = new shopTypeModel();
    		$types = $model->getAll('id');
    		return $types;
    	}
    	
    	public static function array_msort($array, $cols) { /* функция сортировки */
    		
    		$colarr = array();
    		foreach ($cols as $col => $order) {
    			$colarr[$col] = array();
    			foreach ($array as $k => $row) { $colarr[$col]['_'.$k] = strtolower($row[$col]); }
    		}
    		$eval = 'array_multisort(';
    		foreach ($cols as $col => $order) {
    			$eval .= '$colarr[\''.$col.'\'],'.$order.',';
    		}
    		$eval = substr($eval,0,-1).');';
    		eval($eval);
    		$ret = array();
    		foreach ($colarr as $col => $arr) {
    			foreach ($arr as $k => $v) {
    				$k = substr($k,1);
    				if (!isset($ret[$k])) $ret[$k] = $array[$k];
    				$ret[$k][$col] = $array[$k][$col];
    			}
    		}
    		
    		return $ret;
    
    	}
    
        public static function searchSort($products, $sort = array('in_stock'=>SORT_DESC, 'type_id'=>SORT_ASC, 'price'=>SORT_ASC)) /* сортировка товаров */
        {
    		$types = self::viewType();
    		
    		/* подмена ид типов товара на ид отсортированных в настройках Типы и характеристики товаров */
    		foreach ($products as $key => &$p) {			
    				$p['type_id'] = $types[$p['type_id']]['sort'];
    		}
    		if ($sort) {
    			$products = self::array_msort($products, $sort);
    		}
    		return $products;
    	}
    	
    	
    	
    }

    в шаблоне вот так {$products = shopHelperSearch::searchSort($products)}

    работает и сортирует, так как нужно, функцию сортировки я честно стырил из мануала пхп в коментах

    единственное хочу правило сортировки вынести в шаблон

    вот так {$products = shopHelperSearch::searchSort($products,array('in_stock'=>SORT_DESC, 'type_id'=>SORT_ASC, 'price'=>SORT_ASC))}

    но он ругается что синтаксис не правильный, как правильно записать массив в смарти?

    интересно еще какая будет нагрузка из за него?

    • +2
      Петр Петр 15 ноября 2018 13:03 #

      вот так работает {$products = shopHelperSearch::searchSort($products,['in_stock'=>SORT_DESC, 'type_id'=>SORT_ASC, 'price'=>SORT_ASC])}

      теперь можно сортировать по любому признаку

      не только в поиске

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите