
Итак первое что нам потребуется это простой текстовый редактор с подсветкой синтаксиса php, графическии редактор для создания
оформления нашего меню и немного терпения.
(если вы не новичок в написание скриптов на php то смело можете перейти к использованию функции)
Давайте определимся с основными возможностями нашего модуля.
1. Модуль должен быть самодостаточным и не требовать частого вмешательства со стороны создателя.
2. Мы должны иметь возможность изменять выводимую информацию не внося корректировок в php код.
3. Модуль не должен использовать много ресурсов и создавать после своей работы объекты не удаляемые из памяти (мусор).
4. Быть простым в подключение в случае изменения шаблона сайта.
Начнем мы с создания файла нашего модуля и подключения его в используемый для тестирования шаблон.
Я так же как и вы начинаю с 0, и буду подробно описывать все этапы создания нашего модуля.
Так как мы определили в 4.п. возможность изменения шаблона подключаться модуль будет стандартно
{include file="/engine/module/наш модуль.php"}
И так создаём файл с расширением .php следующего содержания
<?php
# Объязательно проверяем константу DLE,
# если константа не существует или не объявлена
# прерываем работу скрипта и выводим произвольный текст
# в нашем случае "XXXXXXXXXX"
if ( ! defined( 'DATALIFEENGINE' ) ) {
die( "XXXXXXXXXX" );
?>
Все дальнейшие действия в нашем скрипте будут производится до закрывающего дескриптора php ?>.
Для отладки мы будем исползовать функцию print_r и может быть var_dump.
И так сохраняем наш файл с любым понравившемся вам именем и подключаем в шаблон,у меня это файл с именем menu_1 и
подключил я его в шаблон Default
Таблица с ссылками в шаблоне Default до:
<table width="175" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="95" align="left" valign="top" class="nmenus" style="line-height: 18px"><a href="#">О сайте</a><br />
<a href="#">В мире</a><br />
<a href="#">Экономика</a><br />
<a href="#">Религия</a><br />
<a href="#">Криминал</a><br />
<a href="#">Спорт</a><br />
<a href="#">Культура</a><br />
<a href="#">Инопресса</a></td>
<td width="80" align="left" valign="top" class="nmenus" style="line-height: 18px"><a href="#">О сайте</a><br />
<a href="#">В мире</a><br />
<a href="#">Экономика</a><br />
<a href="#">Религия</a><br />
<a href="#">Криминал</a><br />
<a href="#">Спорт</a><br />
<a href="#">Культура</a><br />
<a href="#">Инопресса</a></td>
</tr>
</table>
Таблица с подключенным модулем в шаблоне Default после :
<table width="175" border="0" cellspacing="0" cellpadding="0">
<tr>
{include file="/engine/modules/menu_1.php"}
</tr>
</table>
Убедимся в наличие данных в переменных $cat_info и $category_id выполнив
var_dump($cat_info,$category_id);
или
echo"<pre>";
print_r($cat_info);
echo"</pre>";
увидим мы при этом примерно следующие

в переменной $cat_info находится ассоциативный массив категории dle, наша задача отсортировать его соответственно Родитель-->Дети-->Дети Детей и тд.
Для сортировки применяем функцию SortCategoriesArray приведённую ниже
function SortCategoriesArray( $arr )
{
$tree = array();
foreach ( $arr as & $val ) {
if ( empty( $val['parentid'] ) ) {
$tree[$val['id']] = &$val;
}
else {
foreach ( $arr as & $parent_rec ) {
if ( $val['parentid'] == $parent_rec['id'] ) {
if ( ! is_array( $parent_rec['children'] ) ) {
$parent_rec['children'] = array();
}
$parent_rec['children'][$rec['id']] = &$val;
}
}
}
}
return $tree;
}
{
$tree = array();
foreach ( $arr as & $val ) {
if ( empty( $val['parentid'] ) ) {
$tree[$val['id']] = &$val;
}
else {
foreach ( $arr as & $parent_rec ) {
if ( $val['parentid'] == $parent_rec['id'] ) {
if ( ! is_array( $parent_rec['children'] ) ) {
$parent_rec['children'] = array();
}
$parent_rec['children'][$rec['id']] = &$val;
}
}
}
}
return $tree;
}
Я не буду подробно останавливаться на разборе действии выполняемых данной функцией кто не знает язык тот не поймёт а кто знает тому не нужны объяснения замечу лишь одну особенность на php 4.4.8 при выполнение возникает ошибка синтаксиса.
Функции предложенные автором подойдут для php 4 я не буду подробно объяснять как их использовать в топике все описано и приведены примеры использования в результате выполнения мы получим то что нужно.
После вызова функции наш массив категории будет отсортирован "Родитель - Дети" количество дочерних элементов массива не ограниченно.
При просмотре массива вы увидите примерно следующие:
В следующем уроке мы создадим функцию генерации меню, поставим таймер который будет показывать время выполнения нашего скрипта и рассмотрим
несколько примеров реализации вывода сгенерированного меню.
Те же кто знает что делать с полученным отсортированным массивом не нуждается в следующем уроке)).
Кому что непонятно задавайте вопросы в комментариях.


