Сортировка объектов УК по буквам
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);
}
если конечно это то что мне нужно, кто разбирается подскажите как возможно это совместить
Проще не model.php, а файл шаблона править —вот код из model.php который как я понял отвечает за вывод категорий из УК
/components/com_catalog_cats.tpl
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";
попробуйте так ))
группирует по первому символу заголовка
Не надо лишний раз лезть в файлы движка.
Просто в файле шаблона /components/com_catalog_cats.tpl
После
вставить
{if $bukva != $cat.title|truncate:1:"" } {assign var="bukva" value=$cat.title|truncate:1:""} {$bukva} {/if}
не очень правильное решение проблемы )
лучше уж запрос составить нормальный если это позволяет бд )
спасибо что отозвались, но не помогло(( теперь все выглядит вот так
Не надо лишний раз лезть в файлы движка.
Просто в файле шаблона /components/com_catalog_cats.tpl
После
вставить
{if $bukva != $cat.title|truncate:1:"" } {assign var="bukva" value=$cat.title|truncate:1:""} {$bukva} {/if}
подскажите как это можно сделать?не очень правильное решение проблемы )
лучше уж запрос составить нормальный если это позволяет бд )
я плохо разбираюсь, где это нужно делать и куда этот код вставлять?$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";
попробуйте так ))
группирует по первому символу заголовка
А покажите свой файл /components/com_catalog_cats.tplспасибо что отозвались, но не помогло(( теперь все выглядит вот так
Полагаю, не помогло потому что у нас они разные,
и, возможно, вставлять мой кусок кода надо немного в другую часть файла.
А покажите свой файл /components/com_catalog_cats.tplспасибо что отозвались, но не помогло(( теперь все выглядит вот так
Полагаю, не помогло потому что у нас они разные,
и, возможно, вставлять мой кусок кода надо немного в другую часть файла.
вот мой фаил
{* ================================================================================ *}
{* ================ 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>
т.е. сколько категорий, столько раз тег</p> будет ставиться.
В то время как открытие этого абзаца, только одно — в начале перебора массива категорий.
Можете проверить в исходном коде странички каталога (Ctrl U)
Но главная причина почему не отобразилось как задумано — в стилях.
Просто поправьте стили и все будет OK.
<ul class="uc_cat_list"> {if $bukva != $cat.title|truncate:1:"" } {assign var="bukva" value=$cat.title|truncate:1:""} <br><div class="bukva">{$bukva}</div> {/if} <li class="uc_cat_item"><a href="/catalog/{$cat.id}"> {$cat.title}</a> ({$cat.content_count})</li> {/foreach} </ul>
Знать бы как это сделать, попробовал так как вы описали и вставил ваш код, все так же отображается, где то нормально а гдето буквы просто сбоку по порядку идутНо главная причина почему не отобразилось как задумано — в стилях.