Показ описания категории при её просмотре

Автор: Антон Матвейчук


opis_kat_1


В этой статье я подробно покажу, как на сайте, созданном в LinkorCMS 1.4.1-3, добавить возможность показывать описание категории (непосредственно находясь в ней) при её просмотре.


opis_kat_2


Для этого на хостинге сайта в файл base\inc\tree.class.php добавим код после функции GetParentId (функцию находим в коде с помощью строки поиска, вызываемой комбинацией клавиш CTRL+F):


opis_kat_3

 

/** 
* Возвращает данные родительского элемента 
* 
* @param int $curId Идентификатор объекта 
* @return array родительского объекта 
*/ 
public function GetParent( $curId ){ 
if(isset($this->IdCats[$curId])){ 
return $this->IdCats[$curId]; 
}else{ 
return 0; 
} 
}


opis_kat_4


Далее, в файле base\inc\tree_b.class.php заменим функцию ShowCats на

 

/** 
* Выводит данные каталога. 
* @param type $cat_id 
*/ 
public function ShowCats( $cat_id ){ 
$vars = array(); 




$cats = $this->GetChildTree($cat_id); // получаем категории 
$c = count($cats); // кол-во категорий в тек 




$vars['desc_parent'] = ''; 
if($cat_id != 0){ // если не корень, то получ. инф о родителе 
$parent = $this->GetParent($cat_id); // получаем данные родителя 
$vars['desc_parent'] = $parent['description']; // описание родителя 
} 




if( $c > 0 || $vars['desc_parent'] != '' ){ // если есть категории или описание родителя 




System::site()->AddTemplatedBox('', $this->catTemplate); // добавляем шаблон категорий 
// Включаем все блоки в шаблоне (по умолчанию) 
System::site()->AddBlock('this_cat', true, true, 'cat'); // Включаем блок this_cat 
System::site()->AddBlock('cats', true, true, 'cat'); // Включаем блок cats 
System::site()->AddBlock('cat_caption', true, false, '', '', ''); // Включаем блок cat_caption 




if(isset($vars['desc_parent'])){ // если есть описание родителя 
System::site()->AddSubBlock('this_cat', true, $vars); // Включаем субблок this_cat 
} 




if($c > 0){ // если есть категории 




for($i = 0; $i < $c; $i++){ // перебираем категории 
$id = SafeDB($cats[$i]['id'], 11, int); 
$vars['url'] = Ufu('index.php?name='.$this->moduleName.'&'.$this->id_par_name.'='.$id, $this->moduleName.'/{'.$this->id_par_name.'}/'); 
$vars['title'] = SafeDB($cats[$i]['title'], 255, str); 
$vars['icon_url'] = 'images/cat_'.$this->moduleName.'_noicon.png'; 
if(file_exists($cats[$i]['icon'])){ // если существует файл иконки 
$vars['icon_url'] = SafeDB(RealPath2($cats[$i]['icon']), 255, str); 
} 
$vars['description'] = ''; 
if($cats[$i]['description'] != ''){ 
$vars['description'] = trim(str_replace('&nbsp;', ' ', $cats[$i]['description'])); 
$vars['description'] = SafeDB($vars['description'], 999, str, true, false); 
$vars['description'] = substr($vars['description'], 0, 80).'&hellip;'; 
} 
$counters = $this->GetCountersRecursive($id); 
$vars['count'] = $counters['files']; 
$vars['cat_count'] = $counters['cats'];




// Выводим подкатегории 
$childs = ''; 
$sub = ''; 
if(isset($cats[$i][TREE_CHILD_ID])){ 
for($j = 0, $k = count($cats[$i][TREE_CHILD_ID]); $j < $k; $j++){ 
$child_id = SafeDB($cats[$i][TREE_CHILD_ID][$j]['id'], 11, int); 
$child_counters = $this->GetCountersRecursive($child_id); 
$link = Ufu('index.php?name='.$this->moduleName.'&'.$this->id_par_name.'='.$child_id, $this->moduleName.'/{'.$this->id_par_name.'}/'); 
$sub .= '<a href="'.$link.'">'.$cats[$i][TREE_CHILD_ID][$j]['title'].'</a>'.'&nbsp;('.$child_counters['files'].'), '; 
} 
$childs .= substr($sub, 0, -2); 
} 
$vars['childs_cats'] = $childs;




System::site()->AddSubBlock('cats', true, $vars); // Добавляем субблок cats 
} 
$text = ''; 
if($cat_id == 0 && function_exists($this->NumItems)){ // если в корне и в модуле есть фун-я подсчета кол-ва элементов 
$text = $this->NumItemsCaption.call_user_func($this->NumItems); // кол-во всех элементов во всех категориях 
} 
System::site()->AddBlock('cat_caption', true, false, '', '', $text); // Включаем блок cat_caption 
} 
}elseif($cat_id == 0){ 
System::site()->AddTextBox('', '<p align="center">Категорий пока нет.</p>'); 
} 
}

Далее, нужно создать файлы images/cat_ИМЯ КАЖДОГО МОДУЛЯ_noicon.png — для категорий, у которых вы не установили свою иконку. С этим пунктом я не стал заморачиваться, так как сразу установил всем категориям на своём сайте свои иконки, и вам советую.


Кратко расскажу, как установить свою иконку в категории.


Для начала заготавливаем свою иконку. В шаблоне Bootstrap иконки для категорий можно делать размером не более 80x80 px, формат либо JPG, либо PNG или GIF, если нужен прозрачный фон или анимированная картинка. Заливаем готовую иконку на сайт через FTP (например, с помощью FileZilla). Копируем ссылку на иконку.


opis_kat_5


Теперь установим иконку в категорию. Для этого нужно в Админ-панели сайта открыть нужную нам категорию, либо при создании («Добавить категорию»), либо нажав на кнопку редактирования уже созданной категории.


opis_kat_6


В строке «Иконка» вставляем ссылку на иконку, сохраняем изменения.


opis_kat_7


И теперь у всех категорий на сайте свои иконки!


Продолжим добавление возможности показа описания категории.


opis_kat_8


На хостинге сайта откроем файл /templates/bootstrap/module/cat.html (либо вместо bootstrap другой шаблон, также возможно другое название файла, например, cats.html) и заменим весь код на этот (внимание: этот совет проверен на шаблоне bootstrap, в других шаблонах на всякий случай сохраняйте прежний код в Блокнот перед заменой на новый — если не получится, вернёте, как было):

 

{comment}
{this_cat} - блок для тек. категории
{cat.desc_parent} - описание текущей категории




{cats} - субблок для категорий в этой категории
{cat.title} - название категории
{cat.description} - описание категории (обрезка до 80 симв.)
{cat.childs_cats} - подкатегория (имя со ссылкой)
{cat.count} - кол-во объектов в категории
{cat.cat_count} - кол-во подкатегорий в категории
{cat.url} - ссылка на категорию
{cat.icon_url} - блок с кол-вом всех элементов во всех категориях




{cat_caption} - блок
{/comment}




<div class="content-wrapper content-padding">
<div class="cat-container clearfix">
{this_cat}{cat.desc_parent}{/this_cat}
{cats}
<div class="cat">
<div>
<div class="clearfix">
<a href="{cat.url}">
<img src="{cat.icon_url}" align="left" alt="cat" class="cat_image">
{!cat:description}
<div style="padding-top: 22px; padding-left: 70px;">
{/cat:description}
{cat:description}
<div style="padding-top: 6px; padding-left: 70px;">
{/cat:description}
<strong>{cat.title} ({cat.count})</strong>
</div>
{cat:description}<font class="cat_desc">{cat.description}</font>{/cat:description}
</a>
</div>
{cat:childs_cats}
<div><small>Подкатегории: {cat.childs_cats}</small></div>
{/cat:childs_cats}
</div>
</div>
{/cats}
</div>
<div class="cat-caption">{cat_caption}{/cat_caption}</div>
</div>


Готово — теперь, при нахождении в категории на вашем сайте, будет показано описание этой категории!


Написать статью мне помогла вот эта тема в форуме LinkorCMS.

 

 

В предыдущей статье: Настройка показа боковых блоков на страницах сайта.


В следующей статье: Отображение формата файла.

 

 


Вы можете отблагодарить меня за эту статью, положив денюжку на Яндекс.Деньги — 41001946245208; Webmoney — RUB - R228675470677, USD - Z403380463613, EUR - E114430860179; моб.тел. 8-985-301-51-80 (МТС).


Также я буду благодарен вам, если вы зарегистрируетесь в хостинге по ссылкам в моей статье — вам ничего не убудет, а я получу хоть какое, но вознаграждение ;-)

Опубликована: 12.05.2016
Просмотров 785



Комментарии

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