У нас вы можете скачать бесплатно Делаем модуль Динамическое Меню для DLE .

Делаем модуль Динамическое Меню для DLE

 


Итак первое что нам потребуется это простой текстовый редактор с подсветкой синтаксиса 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;
}



Я не буду подробно останавливаться на разборе действии выполняемых данной функцией кто не знает язык тот не поймёт а кто знает тому не нужны объяснения замечу лишь одну особенность на php 4.4.8 при выполнение возникает ошибка синтаксиса.

Функции предложенные автором подойдут для php 4 я не буду подробно объяснять как их использовать в топике все описано и приведены примеры использования в результате выполнения мы получим то что нужно.


После вызова функции наш массив категории будет отсортирован "Родитель - Дети" количество дочерних элементов массива не ограниченно.
При просмотре массива вы увидите примерно следующие:



В следующем уроке мы создадим функцию генерации меню, поставим таймер который будет показывать время выполнения нашего скрипта и рассмотрим
несколько примеров реализации вывода сгенерированного меню.

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

Опросы

Какой CMS вы пользуетесь?

DataLife Engine
Joomla
WordPress
Bitrix
Eleanor
Live street
Самопис

Календарь новостей

«    Май 2012    »
ПнВтСрЧтПтСбВс
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 

Самое читаемое