Шпаргалка: Сортировка элементов компонента catalog.section по пользовательским параметрам

Бывает, что нужно перед списком элементов вывести строку для сортировку, примерно такую: 
"Сортировать по: цене, названию, артикулу" 

С комплексным компонентом это немного проще с точки зрения управления сортировкой - её параметры можно вывести в общие настройки компонента и будет вполне приемлемый вариант. 
А вот с обычным компонентом ситуация осложняется тем, что параметры сортировки придется передавать в настройки компонента в «чистом виде». 

Итак первое предложение - кустарное решение (буду крайне признателен, если в комментариях предложите лучшее): 
На странице с компонентом в первый блок дописываем примерно такой код:
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Страница раздела");

function my_in_multi_array($needle, $haystack) {
   $in_multi_array = false;
   if(in_array($needle, $haystack)) {
      $in_multi_array = true;
   } else {
      for($i = 0; $i < sizeof($haystack); $i++) {
         if(is_array($haystack[$i])) { 
            if(my_in_multi_array($needle, $haystack[$i])) {
               $in_multi_array = true;
               break;
            }
         }
      }
   }
   return $in_multi_array; 
}

$arSortVars = Array(
   Array(
      "NAME" => "цене",
      "SORT" => "PROPERTY_PRICE",
      "ORDER"=> "ASC"
   ),
   Array(
      "NAME" => "названию",
      "SORT" => "NAME",
      "ORDER"=> "ASC"
   ),
   Array(
      "NAME" => "артикулу",
      "SORT" => "PROPERTY_ART",
      "ORDER"=> "ASC"
   ),
);

$sSortName = (my_in_multi_array($_GET["sort"], $arSortVars)) ? $_GET["sort"] : $arSortVars[0]["SORT"];
$sSortOrder = (my_in_multi_array($_GET["order"], $arSortVars)) ? $_GET["order"] : $arSortVars[0]["ORDER"];

А перед самим компонентом списка элементов:
<div class="block-sort">
   Сортировать по:
   <?foreach($arSortVars as $arSort):?>
      <? $link = $APPLICATION->GetCurPageParam("sort=".$arSort["SORT"]."&order=".$arSort["ORDER"], Array("sort", "order"));?>
      <a href="<?=$link?>" class="sort <?if($arSort["SORT"] == $sSortName):?>selected<?endif;?>"><?=$arSort["NAME"]?></a>
   <?endforeach;?>
</div>


Как видно, решение не учитывает направление сортировки. Это только добавит новые проверки, но сути не меняет - работать с этим неудобно. 

Если бы компонент мог принимать внешний массив параметров сортировки, как это происходит с массивом для фильтрации, то по моему мнению, было бы намного проще. Тогда можно было бы перед элементами раздела вывести компонент сортировки (подобно умному фильтру), который бы генерировал нужный массив для сортировки. 

Поэтому второе моё предложение - проголосовать за идею доработки штатного компонента «Элементы раздела» вот здесь: 
http://idea.1c-bitrix.ru/13447/ 

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