Сортировка объектов УК по буквам

Сортировка объектов УК по буквам

#1 17 июля 2014 в 12:04
Добрый день. Интересует такой вопрос. На данный момент объекты универсального каталога у меня выводятся списком в три колонки в алфавитном порядке. Вопрос, как можно сделать так чтобы каждая группа объектов начинающаяся на букву А например была с заголовком. Примерно вот нарисовал что мне нужно. Заранее огромнейшее спасибо кто подскажет как можно это осуществить!!!
Прикрепленный файл
_gq6fr.jpg 54 Кб
#2 17 июля 2014 в 13:04
вот код из model.php который как я понял отвечает за вывод категорий из УК
public function getSubCats($parent_id, $left_key, $right_key) {
$subcats=array();

$sql = "SELECT cat.*
FROM cms_uc_cats cat
WHERE cat.parent_id = '$parent_id' AND cat.published = 1
ORDER BY cat.title";

$result = $this->inDB->query($sql);

if (!$this->inDB->num_rows($result)) { return false; }

while($subcat = $this->inDB->fetch_assoc($result)){

$count_sql = "SELECT con.id
FROM cms_uc_items con, cms_uc_cats cat
WHERE con.category_id = cat.id AND (cat.NSLeft >= {$subcat['NSLeft']} AND cat.NSRight <= {$subcat['NSRight']}) AND con.published = 1";

$count_result = $this->inDB->query($count_sql);

$subcat['content_count'] = $this->inDB->num_rows($count_result);

$subcats[] = $subcat;

}

$subcats = cmsCore::callEvent('GET_CATALOG_SUBCATS', $subcats);

return $subcats;

}
В интернете нашел что то похожее то что мне нужно… вот этот код
foreach(range('a', 'z') as $v) {
$ar = array();
foreach($arr as $val) {
$s = strtolower($val);
if ( $v == $s[0] ) {
$ar[] = $val;
}
}
if ( !empty($ar) ) {
echo '<h1>'. strtoupper($v). '</h1>'. implode('<br />', $ar);
}
если конечно это то что мне нужно, кто разбирается подскажите как возможно это совместить
#3 29 июля 2014 в 15:25
ап!!!
#4 29 июля 2014 в 15:49

вот код из model.php который как я понял отвечает за вывод категорий из УК

Apsent
Проще не model.php, а файл шаблона править —
/components/com_catalog_cats.tpl
#5 29 июля 2014 в 15:58
$sql = "SELECT cat.*
FROM cms_uc_cats cat
WHERE cat.parent_id = '$parent_id' AND cat.published = 1
group by substr(cat.title,1,1)
ORDER BY cat.title";

попробуйте так ))
группирует по первому символу заголовка
#6 30 июля 2014 в 18:58
Не надо лишний раз лезть в файлы движка.
Просто в файле шаблона /components/com_catalog_cats.tpl

После
  1. {foreach key=tid item=cat from=$cats}
вставить
  1. {if $bukva != $cat.title|truncate:1:"" }
  2. {assign var="bukva" value=$cat.title|truncate:1:""}
  3. <h3>{$bukva}</h3>
  4. {/if}
#7 30 июля 2014 в 19:36


Не надо лишний раз лезть в файлы движка.
Просто в файле шаблона /components/com_catalog_cats.tpl

После

  1. {foreach key=tid item=cat from=$cats}
вставить
  1. {if $bukva != $cat.title|truncate:1:"" }
  2. {assign var="bukva" value=$cat.title|truncate:1:""}
  3. {$bukva}
  4. {/if}

Sonat

не очень правильное решение проблемы )
лучше уж запрос составить нормальный если это позволяет бд )
#8 1 августа 2014 в 09:51


Не надо лишний раз лезть в файлы движка.
Просто в файле шаблона /components/com_catalog_cats.tpl

После

  1. {foreach key=tid item=cat from=$cats}
вставить
  1. {if $bukva != $cat.title|truncate:1:"" }
  2. {assign var="bukva" value=$cat.title|truncate:1:""}
  3. {$bukva}
  4. {/if}

Sonat
спасибо что отозвались, но не помогло(( теперь все выглядит вот так
#9 1 августа 2014 в 09:52

не очень правильное решение проблемы )
лучше уж запрос составить нормальный если это позволяет бд )

IceJOKER
подскажите как это можно сделать?
#10 1 августа 2014 в 09:59

$sql = "SELECT cat.*
FROM cms_uc_cats cat
WHERE cat.parent_id = '$parent_id' AND cat.published = 1
group by substr(cat.title,1,1)
ORDER BY cat.title";

попробуйте так ))
группирует по первому символу заголовка

IceJOKER
я плохо разбираюсь, где это нужно делать и куда этот код вставлять?
#11 1 августа 2014 в 12:02

спасибо что отозвались, но не помогло(( теперь все выглядит вот так

Apsent
А покажите свой файл /components/com_catalog_cats.tpl
Полагаю, не помогло потому что у нас они разные,
и, возможно, вставлять мой кусок кода надо немного в другую часть файла.
#12 4 августа 2014 в 09:33


спасибо что отозвались, но не помогло(( теперь все выглядит вот так

Apsent
А покажите свой файл /components/com_catalog_cats.tpl
Полагаю, не помогло потому что у нас они разные,
и, возможно, вставлять мой кусок кода надо немного в другую часть файла.

Sonat

вот мой фаил

{* ================================================================================ *}
{* ================ Cписок [под]рубрик универсального каталога ==================== *}
{* ================================================================================ *}

<ul class="uc_cat_list">
<p align="center"> {foreach key=tid item=cat from=$cats}</p>
<li class="uc_cat_item"><a href="/catalog/{$cat.id}"> {$cat.title}</a> ({$cat.content_count})</li>
{/foreach}
</ul>
#13 5 августа 2014 в 17:28
Неправильная конструкция
  1. <p align="center"> {foreach key=tid item=cat from=$cats}</p>
Закрытие абзаца будет происходить каждый раз в начале каждой категории.
т.е. сколько категорий, столько раз тег</p> будет ставиться.
В то время как открытие этого абзаца, только одно — в начале перебора массива категорий.
Можете проверить в исходном коде странички каталога (Ctrl U)

Но главная причина почему не отобразилось как задумано — в стилях.
Просто поправьте стили и все будет OK. v


  1. <ul class="uc_cat_list">
  2. {foreach key=tid item=cat from=$cats}
  3. {if $bukva != $cat.title|truncate:1:"" }
  4. {assign var="bukva" value=$cat.title|truncate:1:""}
  5. <br><div class="bukva">{$bukva}</div>
  6. {/if}
  7. <li class="uc_cat_item"><a href="/catalog/{$cat.id}"> {$cat.title}</a> ({$cat.content_count})</li>
  8. {/foreach}
  9. </ul>
Для оформления буквы добавьте стиль классу .bukva в css-файл
#14 6 августа 2014 в 13:57

Но главная причина почему не отобразилось как задумано — в стилях.

Sonat
Знать бы как это сделать, попробовал так как вы описали и вставил ваш код, все так же отображается, где то нормально а гдето буквы просто сбоку по порядку идут
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.