Как ни пытался уйти с 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]
Комментарии