Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Помогите, плиз, с сортировкой данных из инфоблока

00 голосов
5
спросил 01 Дек, 13 от Lastrain (100 баллов)

5 Ответы

00 голосов
Ребят, неужели, никаких соображений?
ответил 28 Янв, 14 от Lastrain (100 баллов)
00 голосов
конечно такая же жесть как и у тебя...
но попробуй))

Код

<? /* -- Функция сортировки многомерного массива и функция-блок вывода результатов -- */ 

function cmp_s($a, $b) {
    $r1 = strcmp($a["NAME"], $b["NAME"]);
    return ($r1 == 0) ? strcmp($a["NAME"], $b["NAME"]) : $r1;
}

function block_accordion($a, $flag)
{
if($a)
{
usort($a, "cmp_s");
for ($ic=0;$ic<count($a);$ic++)
{
$XarIBlockElement = GetIBlockElement($a[$ic]["PROPERTIES"]["link_country"]["VALUE"]);



if ($ID_country<>$XarIBlockElement["ID"])
{
print '<p> </p>';
print '<b>'.$XarIBlockElement["NAME"].'';
}
$str = strtoupper($a[$ic]["PROPERTIES"]["route"]["VALUE"]);
if ($a[$ic]["PROPERTIES"]["redirect"]["VALUE"])
{
print'<li>[]<< '.$a[$ic]["NAME"].'>></li>';
}
else
{

print'<li><< '.$a[$ic]["NAME"].' >></li>';
}

$ID_country=$XarIBlockElement["ID"];
}
}
}

if(count($arResult["ITEMS"])>0):

?>


а вообще это к битриксу никакого отношения не имеет
ответил 16 Май, 14 от Hax (1,100 баллов)
00 голосов
Не вышло.. Намешал все и лишил ссылок элементы блока)
ответил 13 Сен, 14 от Lastrain (100 баллов)
00 голосов
м.б. нужно найти где достаются элементы?,
обычно это делается с помощью:
CIBlockElement::GetList http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php
и уже здесь согласно данной документации отсортировать.
ответил 18 Янв, 15 от EDKA (980 баллов)
00 голосов
Спасибо за тему!
Оптимальное решение, дописывать компонент под себя, но в качестве заплатки сгодится
добавил еще одну сортировку
Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?function cmp_s($a, $b) { 
   if ($a["PROPERTIES"]["ABR_COUNTRY"]["SORT"] == $b["PROPERTIES"]["ABR_COUNTRY"]["SORT"]) return 0;
   return ($a["PROPERTIES"]["ABR_COUNTRY"]["SORT"] < $b["PROPERTIES"]["ABR_COUNTRY"]["SORT"]) ? -1 : 1;
}?>

<?function cmp_id($a, $b) { 
   if ($a["PROPERTIES"]["ABR_COUNTRY"]["VALUE"] == $b["PROPERTIES"]["ABR_COUNTRY"]["VALUE"]) return 0;
   return ($a["PROPERTIES"]["ABR_COUNTRY"]["VALUE"] < $b["PROPERTIES"]["ABR_COUNTRY"]["VALUE"]) ? -1 : 1;
}?>

<?usort($arResult["ITEMS"], "cmp_s");?>
<?usort($arResult["ITEMS"], "cmp_id");?>
<ul>
<?foreach($arResult["ITEMS"] as $arItem):?>
   <?$XarIBlockElement = GetIBlockElement($arItem["PROPERTIES"]["ABR_COUNTRY"]["VALUE"]);?>
   <?if($ID_country<>$XarIBlockElement["ID"]):?>
      <p class="infoLink"><?=$XarIBlockElement["NAME"];?>:</p><br />
   <?endif?>
   <?
   $this->AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_EDIT"));
   $this->AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_DELETE"), array("CONFIRM" => GetMessage('CT_BNL_ELEMENT_DELETE_CONFIRM')));
   ?>
   <li><a href="<?=$arItem["DETAIL_PAGE_URL"];?>"><b><?=$arItem["NAME"];?></b></a><br /></li>
   <?$ID_country=$XarIBlockElement["ID"];?>
<?endforeach;?>
</ul>
ответил 04 Май, 15 от ordakazn (100 баллов)

Похожие вопросы

0 голосов
4 ответов
0 голосов
1 ответ
спросил 08 Окт, 13 от Jugoar (480 баллов)
0 голосов
5 ответов
спросил 22 Сен, 13 от ErSH (120 баллов)
0 голосов
2 ответов