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

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


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

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


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

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

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


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

{ include file}


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

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

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

$category_id
NEWS_ID


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

Также не стал заморачиваться на универсальный запрос в базу и разбил его на 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) и пристыковать его к хронологии (см. после жирного пункта):

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


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

<?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 }
        }
    }

?>


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

4. Шаблон

В нужном месте файла 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]


Скачать invest_diary.zip Размер: 816 b Скачиваний: 10


Понравилась статья "DLE - мой первый модуль, как написать свой модуль Datalife Engine" из раздела PHP кодинг, Решения для DLE? Подпишись на RSS. Будь в курсе всего происходящего на сайте
Комментариев: 0 •  Просмотров: 405   Дата: 23-мар-2017, 01:49

Похожие статьи

Комментарии

b
i
u
s
|
left
center
right
|
emo
color
|
hide
quote
translit

© 2010-2017 devarts.pro v 7.0: flexyflat tpl Designed by devarts
Карта сайта HTMLКарта сайта XMLПравообладателям
Яндекс.Метрика