Перейти к публикации

Вывод выбранных категорий в шаблоне


Рекомендованные сообщения

Здравствуйте.

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

Работа проверана на версиях 9.6 и 9.8. Может кому-то подобное пригодится.

И да, хотелось бы услышать о допущенных мной ошибках, которых скорее всего достаточно.

Установка:

1. Сделать запрос в БД

ALTER TABLE dle_category ADD `auto_cat_view` smallint(1) NOT NULL DEFAULT '0'

2. Создать файл "auto_cat_view.php" в папке /engine/modules/ с содержимым

<?php
if( !defined( 'DATALIFEENGINE' ))
{
die( "Hacking attempt!" );
}
$auto_cat_view = $dle_api->load_from_cache('auto_cat_view');
if(!$auto_cat_view)
{
$sql = $db->query("SELECT alt_name,name FROM " . PREFIX . "_category WHERE auto_cat_view=1 ORDER BY posi");

while($row = $db->get_row($sql))
{
$auto_cat_view.='<li class="auto_cat_li"><a href="/'.$row['alt_name'].'/">'.$row['name']."</a></li>";
}
$db->free();
$dle_api->save_to_cache("auto_cat_view", $auto_cat_view);
}
echo <<<HTML
<ul class="auto_cat_ul">$auto_cat_view</ul>
HTML;
?>[/php]

3. Провести изменения в файле categories.php в папке /engine/inc/

Это необходимо для отображения настройки вывода категорий в админпанели.

Найти

[php]if ( $_POST['news_number'] > 0)
$news_number = intval( $_POST['news_number'] );
else $news_number = 0;

ниже вставить

if ( in_array($_POST['auto_cat_view'], array("1", "0")) ) {

$auto_cat_view = $db->safesql( $_POST['auto_cat_view'] );

} else $auto_cat_view = ""; [php]

Найти

[php]$db->query( "INSERT INTO " . PREFIX . "_category (parentid, name, alt_name, icon, skin, descr, keywords, news_sort, news_msort, news_number, short_tpl, full_tpl, metatitle) values ('$category', '$cat_name', '$alt_cat_name', '$cat_icon', '$skin_name', '$description', '$keywords', '$news_sort', '$news_msort', '$news_number', '$short_tpl', '$full_tpl', '$meta_title')" ); [/php]

заменить на

[php] $db->query( "INSERT INTO " . PREFIX . "_category (parentid, name, alt_name, icon, skin, descr, keywords, news_sort, news_msort, news_number, auto_cat_view, short_tpl, full_tpl, metatitle) values ('$category', '$cat_name', '$alt_cat_name', '$cat_icon', '$skin_name', '$description', '$keywords', '$news_sort', '$news_msort', '$news_number', '$auto_cat_view', '$short_tpl', '$full_tpl', '$meta_title')" );

Найти

$row['news_msort'] = makeDropDown( array ("" => $lang['sys_global'], "DESC" => $lang['opt_sys_mminus'], "ASC" => $lang['opt_sys_mplus'] ), "news_msort", $row['news_msort'] ); 

ниже вставить

$row['auto_cat_view'] = makeDropDown( array ("0" => "Нет", "1" => "Да" ), "auto_cat_view", $row['auto_cat_view'] ); 

Найти

<tr>
<td style="padding:4px;">{$lang['opt_sys_sort']}</td>
<td>{$row['news_sort']}</td>
</tr> [/php]

ниже вставить

[php]<tr>
<td style="padding:4px;">Отображение категории в шаблоне</td>
<td>{$row['auto_cat_view']}</td>
</tr>

Найти

if ( in_array($_POST['news_msort'], array("ASC", "DESC")) ) {

$news_msort = $db->safesql( $_POST['news_msort'] );

} else $news_msort = ""; [/php]

ниже вставить

[php]if ( in_array($_POST['auto_cat_view'], array("0", "1")) ) {

$auto_cat_view = $db->safesql( $_POST['auto_cat_view'] );

} else $auto_cat_view = "";

Найти

$db->query( "UPDATE " . PREFIX . "_category set parentid='$parentid', name='$cat_name', alt_name='$alt_cat_name', icon='$cat_icon', skin='$skin_name', descr='$description', keywords='$keywords', news_sort='$news_sort', news_msort='$news_msort', news_number='$news_number', short_tpl='$short_tpl', full_tpl='$full_tpl', metatitle='$meta_title' WHERE id='$catid'" ); 

заменить на

$db->query( "UPDATE " . PREFIX . "_category set parentid='$parentid', name='$cat_name', alt_name='$alt_cat_name', icon='$cat_icon', skin='$skin_name', descr='$description', keywords='$keywords', news_sort='$news_sort', news_msort='$news_msort', news_number='$news_number', auto_cat_view='$auto_cat_view', short_tpl='$short_tpl', full_tpl='$full_tpl', metatitle='$meta_title' WHERE id='$catid'" ); 

Найти

<tr>
<td style="padding:4px;">{$lang['opt_sys_newc']}</td>
<td><input class="edit bk" type="text" name="news_number"><a href="#" class="hintanchor" onMouseover="showhint('{$lang[hint_news_number]}', this, event, '250px')">[?]</a></td>
</tr> [/php]

ниже вставить

[php]<tr>
<td style="padding:4px;">Отображение категории в шаблоне</td>
<td><select size=1 name="auto_cat_view">
<option value="1">Да</option>
<option value="0">Нет</option>
</select>
</td>
</tr>

4. Вставить в шаблоне в нужное вам место {include file="/engine/modules/auto_cat_view.php"}

5. Для изменения стилей выводимых категорий добавить в ваш файл style.css

.auto_cat_ul
{
}
.auto_cat_li
{
}
[/php]

и внести в них нужные вам стили.

Ссылка на сообщение
Поделиться на других сайтах

Читал, думал... Думал, перечитывал... Но так и не понял что именно делает хак. Чую, вещь полезная, но никак не пойму что именно делается....

Ссылка на сообщение
Поделиться на других сайтах

При создании или редактировании категории появится пункт вывода категории в шаблоне. Меню категорий к примеру выводить без изменений в шаблоне можно.

Для удобства, правда, лучше админку к модулю сделать.

Ссылка на сообщение
Поделиться на других сайтах

Меню категорий к примеру выводить без изменений в шаблоне можно.

Т.е. будут выводиться в ul список те категории, которые отмечены галками в админке? Если да, то тогда, ИМХО, лучше по умолчанию выводить все категории, а те, которые не нужны - помечать галкой "не выводить"...

Изменено пользователем IgorA100
Ссылка на сообщение
Поделиться на других сайтах

Т.е. будут выводиться в ul список те категории, которые отмечены галками в админке? Если да, то тогда, ИМХО, лучше по умолчанию выводить все категории, а те, которые не нужны - помечать галкой "не выводить"...

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

В ближайшие дни, наверно, сделаю админку - чтоб categories.php править не приходилось.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...