troeput 0 Опубликовано: 16 февраля 2013 Рассказать Опубликовано: 16 февраля 2013 Здравствуйте. Сделал для своих нужд небольшой модуль, позволяющий выводить в шаблоне список категорий, отмеченных в админке для показа. Работа проверана на версиях 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] и внести в них нужные вам стили. Цитата Ссылка на сообщение Поделиться на других сайтах
IgorA100 90 Опубликовано: 21 февраля 2013 Рассказать Опубликовано: 21 февраля 2013 Читал, думал... Думал, перечитывал... Но так и не понял что именно делает хак. Чую, вещь полезная, но никак не пойму что именно делается.... Цитата Ссылка на сообщение Поделиться на других сайтах
troeput 0 Опубликовано: 1 марта 2013 Рассказать Опубликовано: 1 марта 2013 Автор При создании или редактировании категории появится пункт вывода категории в шаблоне. Меню категорий к примеру выводить без изменений в шаблоне можно. Для удобства, правда, лучше админку к модулю сделать. Цитата Ссылка на сообщение Поделиться на других сайтах
IgorA100 90 Опубликовано: 1 марта 2013 Рассказать Опубликовано: 1 марта 2013 (изменено) Меню категорий к примеру выводить без изменений в шаблоне можно. Т.е. будут выводиться в ul список те категории, которые отмечены галками в админке? Если да, то тогда, ИМХО, лучше по умолчанию выводить все категории, а те, которые не нужны - помечать галкой "не выводить"... Изменено 1 марта 2013 пользователем IgorA100 Цитата Ссылка на сообщение Поделиться на других сайтах
troeput 0 Опубликовано: 1 марта 2013 Рассказать Опубликовано: 1 марта 2013 Автор Т.е. будут выводиться в ul список те категории, которые отмечены галками в админке? Если да, то тогда, ИМХО, лучше по умолчанию выводить все категории, а те, которые не нужны - помечать галкой "не выводить"... Верно. Выводить все категории по умолчанию - возможно вы правы. Просто мне этого не требовалось, вот и сделал в таком виде. В ближайшие дни, наверно, сделаю админку - чтоб categories.php править не приходилось. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.