Сегодня я приведу пример модуля для 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.