DLE – мой первый модуль, как написать свой модуль Datalife Engine

invests diary dle module - DLE - мой первый модуль, как написать свой модуль Datalife Engine

Как ни пытался уйти с DLE из-за того, что он платный, а на рынке существует куча бесплатных аналогов, не получается — главный сайт стоит на этом движке и я все больше и больше углубляюсь в его техническую часть!

Задача: Для заданной категории автоматически формировать блок ссылок в хронологической последовательности. Определять текущую, несколько ранее опубликованных и позже. Позже последней, соответственно, будет пустота!

Создаем файл модуля

Создаем *.php файл с любым именем в каталоге engine/modules, например, mymodule.php и в самом верху пишем такие строки кода, который не позволит обращаться к модулю напрямую т.к. ему не будет передаваться константа DATALIFEENGINE, которую невозможно получить извне.

<?php
if (!defined('DATALIFEENGINE'))
    die("Go fuck yourself!");

Модуль технически достаточно прост, поэтому решил не заморачиваться на отдельный шаблон и все, что с ним связано. Просто код и вывод его в шаблоне мета-тегом:

{include file="path_to_file.php"}

Основные параметры

Далее необходимо получить айди текущей категории и поста. Никаких лишних телодвижений делать не нужно, они существуют глобально.

Айди новости существует в виде суперглобальной константы, а категории – глобальной переменной:

$category_id
NEWS_ID

Запросы в базу данных

Также не стал заморачиваться на универсальный запрос в базу и разбил его на 2 простых:

$row1 = array_reverse($db->super_query("
        SELECT `id`, `alt_name`, `title` 
        FROM " . PREFIX . "_post 
        WHERE id > $id AND category = $catid 
        ORDER BY id ASC LIMIT 3
    ",1));
    
$row2 = $db->super_query("
        SELECT `id`, `alt_name`, `title` 
        FROM " . PREFIX . "_post 
        WHERE id <= $id AND category = $catid 
        ORDER BY id DESC LIMIT 3
    ",1);

Метод super_query($query, $return) работает в двух режимах. Если вторым параметром передать false, то вернет строку — mysqli_fetch_row, что не есть хорошо в нашем случае т.к. нужен mysqli_fetch_array. Поэтому передаем ему единицу!

Прогнал $row1 через функцию array_reverse(), чтобы перевернуть отсортированный в обратном порядке (10,9,8) массив наоборот (8,9,10) и пристыковать его к хронологии (см. после жирного пункта):

    null
  • запись +2
  • запись +1
  • текущая запись
  • запись -1
  • запись -2
  • запись -3

Готовый модуль

<?php
if (!defined('DATALIFEENGINE'))
    die("Go fuck yourself!");

//-----------Заменить на свои данные

//записываем айди категории в переменную для удобства
$catid = 36;

//---------------------------------------

//умененьшаем нагрузку и вызываем модуль только там, где нужно!
//модуль сработает, если текущая категория будет равна интересующей нас, т.е. 36
if($category_id == $catid) {
    
    //получаем из суперглобальной константы айди текущего поста
    $id = NEWS_ID;
    
    $row1 = array_reverse($db->super_query("
      SELECT `id`, `alt_name`, `title` 
      FROM " . PREFIX . "_post 
      WHERE id > $id AND category = $catid 
      ORDER BY id ASC LIMIT 3
", 1));

    $row2 = $db->super_query("
     SELECT `id`, `alt_name`, `title` 
     FROM " . PREFIX . "_post 
     WHERE id <= $id AND category = $catid 
     ORDER BY id DESC LIMIT 3", 
1);
            
    foreach ($row1 as $ro) { ?>

        <li><a href="<?= $ro['id'] ?>-<?= $ro['alt_name'] ?>.html"><?= $ro['title'] ?></a></li>

    <?php }

    foreach ($row2 as $ro) {

        if ($ro['id'] == $id) { ?>

            <li><a href="<?= $ro['id'] ?>-<?= $ro['alt_name'] ?>.html"><b><?= $ro['title'] ?></b></a></li>

        <?php }else{ ?>

            <li><a href="<?= $ro['id'] ?>-<?= $ro['alt_name'] ?>.html"><?= $ro['title'] ?></a></li>

        <?php }
        }
    }

?>

Полученные данные прогоняем через циклы и формируем в них блок ссылок!

Шаблон

В нужном месте файла fullstory.tpl выводим следующий код:

[catlist=36] 
        <h2>Предыдущие записи дневника</h2>
        <div class="quote">
            <ul>
                 <!-- убрать пробел ниже -->
                { include file="engine/modules/mymodule.php"} 
            </ul>
        <br/>
        <a href="/658-kak-nachat-zarabatyvat-na-investiciyah-bazovye-pravila-investrora.html">Как я начинал инвестировать!</a>

    </div>            	
[/catlist]

Похожие записи


PHP — простой ротатор баннеров, ротатор для DLE и WordPress
Аналог на javascriptАналог на PHP для больших кодов Очень простой ротатор кода на PHP. Сначала мы объявляем простой двумерный массив...
Как изменить пароль пользователя CMS DLE и WordPress через SQL-запрос
Перебираю старые статьи с целью их оптимизации и наткнулся на эту. В принципе, способ подойдет для любой системы на любом...
Полный гайд по миграции с CMS DLE на WordPress
Данный сайт в апреле 2019 года полностью переехал на CMS WordPress и в июне, после завершения всех правок (а их...
DLE – быстрый переезд на хостинг не используя инсталятор
Установка движка DLE на хостинг происходит через специальный файл — инсталятор, в котором необходимо заполнить все поля (имя базы данных,...
DLE — монетизируем загруженные в новостях файлы через отдельный домен
Как много у вас загруженных файлов (приложений к постам) не считая картинок? У меня много и придумал способ их монетизировать!...

Добавить комментарий