Сегодня я приведу пример модуля для CMS DLE. Задача данного модуля вывести список подкатегорий в рамках категории.
Не знаю почему, либо я не нашел, либо не до конца разобрался с системой. Но я так и не нашел как вывести дочерние категории в данной системе. Поэтому мною был написан небольшой простой модуль, который прекрасно решает данную задачу.
Первым делом Вам нужно создать файл tpl в папке с шаблоном. Назовем его childscat.tpl. Примерное содержимое ниже.
<div> <table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td> <div>[full-link]<img alt="{title}" src="{image}" />[/full-link]</div> </td> </tr> <tr> <td> <div> <div>[full-link]{title}[/full-link]</div> <div>Новостей {newscount}</div> </div> </td> </tr> </table> </div>
Шаблон представлен ради примера. Вы должны будете подправить его под свои нужды. Чтобы не описывать список доступных тегов, просто посмотрите код самого модуля, думаю все вопросы сразу отпадут 🙂
Код самого модуля. Файл childs.php который необходимо положить в папку /engine/modules системы DLE.
<?php if( ! defined( 'DATALIFEENGINE' ) ) { die( "Hacking attempt!" ); } $id = (int)$id; if(!empty($limit)) { $limit = ' LIMIT '.$limit; } $template = strip_tags($template); $order = empty($order) ? 'ASC' : $order; $all = empty($all) ? 1 : $all; $orderf = empty($orderf) ? 'id' : $orderf; $dateFormat = empty($dateFormat) ? 'd.m.Y' : $dateFormat; if(empty($id)) { echo 'No ID'; return; } if(!function_exists('GetAllChilds')) { function GetAllChilds(&$result, $cacheFile, $dbObj, $table, $fieldGet, $fieldSearch, $keySearch, $onlyFirstLevel = false) { $dir = __DIR__.'/../cache/'; if(!is_dir($dir)) { mkdir($dir, 0777); } $separator = ','; $cache = $dir.'gettree_'.$cacheFile.'_'.$keySearch.'_'.($onlyFirstLevel ? '1' : '0'); $cacheContent = file_exists($cache) ? file_get_contents($cache) : null; if($cacheContent !== null) { $result = explode($separator, $cacheContent); if(time() < $result[0]) { array_shift($result); return count($result); } } $sql = 'SELECT `'.$fieldGet.'` FROM `'.$table.'` WHERE `'.$fieldSearch.'` = "'.$keySearch.'"'; $resultQuery = $dbObj->query($sql); $level = array(); while($row = $dbObj->get_row($resultQuery)) { //$resultQuery->fetch_assoc() $id = $row[$fieldGet]; if(!in_array($id, $result)) { $level[] = $id; $result[] = $id; } } if($onlyFirstLevel !== true) { foreach($level as $id) { GetAllChilds($result, $cacheFile, $dbObj, $table, $fieldGet, $fieldSearch, $id, false); } } file_put_contents($cache, implode($separator, $result)); return count($result); } } $allChilds = array($id); GetAllChilds($allChilds, 'catchilds', $db, PREFIX."_category", 'id', 'parentid', $id); $tpl->load_template($template); $sql = $all == 1 ? "SELECT c.*, cp.id as parentId, cp.alt_name as parentAlt, cp.name as parentName FROM ".PREFIX."_category c JOIN ".PREFIX."_category cp ON cp.id = c.`parentid` WHERE c.`parentid` = '".$id."' ORDER BY c.`".$orderf."` ".$order.$limit : 'SELECT c.*, cp.id as parentId, cp.alt_name as parentAlt, cp.name as parentName FROM '.PREFIX.'_category c JOIN '.PREFIX.'_category cp ON cp.id = c.`parentid` WHERE c.`id` = (SELECT category FROM '.PREFIX.'_post WHERE id = (SELECT MAX(id) FROM '.PREFIX.'_post WHERE category IN ('.implode(',', $allChilds).'))) ORDER BY c.`'.$orderf.'` '.$order.$limit; //echo $sql; $result = $db->query($sql); $db2 = new db; while($row = $db->get_row($result)) { //print_r($row); $tpl->set_block("'\\[catlist=".$id."\\](.*?)\\[/catlist\\]'si", "\$1"); $tpl->set_block("'\\[catlist=\d+\\](.*?)\\[/catlist\\]'si", ""); $count = $db2->super_query('SELECT COUNT(id) as c FROM '.PREFIX.'_post WHERE category = "'.$row['id'].'"'); $lastNew = $db2->super_query('SELECT * FROM '.PREFIX.'_post WHERE category = "'.$row['id'].'" ORDER BY date DESC LIMIT 1'); $full_link = $config['http_home_url'].get_url($row['id']).'/'; //Список тегов $tpl->set('{newscount}', $count['c']); $tpl->set('{lastpost-comments-num}', $lastNew ? $lastNew['comm_num'] : 0); $tpl->set('{comments-text}', getCommentString($lastNew ? $lastNew['comm_num'] : 0)); $tpl->set('{lastpost-title}', str_replace(array('\"', "\'"), array('"', "'"), $lastNew['title'])); $tpl->set('{lastpost-url}', $full_link.$lastNew['id'].'-'.$lastNew['alt_name'].'.html'); $tpl->set('{lastpost-date}', $lastNew ? date($dateFormat, strtotime($lastNew['date'])) : ''); $tpl->set('{image}', $row['icon'] == '' ? '/templates/Tail/images/seasone-1.png' : $row['icon']); $tpl->set('{title}', $row['name']); $tpl->set('{parent-title}', $row['parentName']); $tpl->set('{parent-url}', $config['http_home_url'].get_url($row['parentId']).'/'); $tpl->set( '[full-link]', "<a href=\"" . $full_link . "\">" ); $tpl->set( '[/full-link]', "</a>" ); $tpl->compile('categorychilds'); } $db2->close(); $tpl->clear(); $db->free($result); echo $tpl->result['categorychilds'];
Теперь чтобы вставить вывод подкатегорий категории в нужном месте Вашего шаблона пропишите код:
{include file="engine/modules/childs.php?id=[ID КАТЕГОРИИ ПРЕДКА]&all=1&template=childscat.tpl&order=DESC"}
Главное, что стоит поменять в данной строчки — это id категории (цифра). Так же Вы можете видеть, что можно указать нужный шаблон, сортировку, а так же еще несколько параметров. Все они инициализируются в начале файла childs.php.