Как получить свободные данные из БД и вывести их
На данном примере рассмотрим создание шаблонного тега вывода 5 последних комментариев и аватара пользователя, добавившего комментарий.
Исходные коды всех шаблонных тегов, не относящихся к какому-либо модулю, находятся в папке themes/functions. Добавим наш файл для шаблонного тега. Назовем его show_last_comments.php:
Пример:
<?php
echo 'DIAFAN.CMS';
Теперь, если в одном из шаблонов, расположенных в папке themes, написать
шаблонный тег <insert name="show_last_comments">
, то на сайте мы увидим
надпись «DIAFAN.CMS».
Расширим наш метод, а именно – выберем с помощью SQL-запроса последние 5 активных комментариев, а также имена пользователей, их добавивших.
Пример:
$rows = DB::query_fetch_all("SELECT u.name, c.text FROM {comments} AS c LEFT JOIN {users} AS u ON c.user_id=u.id WHERE c.act='1' AND c.trash='0' ORDER BY c.id DESC LIMIT 5");
Теперь файл примет такой вид:
Пример:
<?php
$rows = DB::query_fetch_all("SELECT u.name, c.text FROM {comments} AS c
LEFT JOIN {users} AS u ON c.user_id=u.id WHERE c.act='1' AND c.trash='0'
ORDER BY c.id DESC LIMIT 5");
$text = '';
foreach ($rows as $row)
{
$text .= $row['text'].'<br>';
}
echo $text;
Но в таком виде он ничего не выводит. Давайте выведем текст комментариев:
Пример:
$text = '';
foreach ($rows as $row)
{
$text .= $row['text'].'<br>';
}
echo $text;
Исходный код стал выглядеть так:
Пример:
<?php
$rows = DB::query_fetch_all("SELECT u.name, c.text FROM {comments} AS c
LEFT JOIN {users} AS u ON c.user_id=u.id WHERE c.act='1' AND c.trash='0'
ORDER BY c.id DESC LIMIT 5");
$text = '';
foreach ($rows as $row)
{
$text .= $row['text'].'<br>';
}
echo $text;
Имея в наличии имена пользователей, вывести их аватары не составит труда. Но перед выводом необходимо проверить, включена ли в настройках системы возможность их добавления:
Пример:
if ($this->diafan->configmodules("avatar", "users"))
{
// ...
}
Если возможность есть, и существует изображение аватара, то можно выводить:
Пример:
if ($this->diafan->configmodules("avatar", "users") && file_exists(ABSOLUTE_PATH.USERFILES.'/avatar/'.$row['name'].'.png'))
{
$avatar = BASE_PATH.USERFILES.'/avatar/'.$row['name'].'.png';
$avatar_width = $this->diafan->configmodules("avatar_width", "users");
$avatar_height = $this->diafan->configmodules("avatar_height", "users");
$text .= '<img src="'.$avatar.'" width="'.$avatar_width.'"
height="'.$avatar_height.'" alt="'.$row['name'].'"><br>';
}
Получаем код:
Пример:
<?php
$rows = DB::query_fetch_all("SELECT u.name, c.text FROM {comments} AS c
LEFT JOIN {users} AS u ON c.user_id=u.id WHERE c.act='1' AND c.trash='0'
ORDER BY c.id DESC LIMIT 5");
$text = '';
foreach ($rows as $row)
{
if ($this->diafan->configmodules("avatar", "users") && file_exists(ABSOLUTE_PATH.USERFILES.'/avatar/'.$row['name'].'.png'))
{
$avatar = BASE_PATH.USERFILES.'/avatar/'.$row['name'].'.png';
$avatar_width = $this->diafan->configmodules("avatar_width", "users");
$avatar_height = $this->diafan->configmodules("avatar_height", "users");
$text .= '<img src="'.$avatar.'" width="'.$avatar_width.'"
height="'.$avatar_height.'" alt="'.$row['name'].'"><br>';
}
$text .= $row['text'].'<br>';
}
echo $text;
В начале файла добавим следующий код для исключения прямого доступа к файлу.
Пример:
<?php
if (! defined('DIAFAN'))
{
$path = __FILE__;
while(! file_exists($path.'/includes/404.php'))
{
$parent = dirname($path);
if($parent == $path) exit;
$path = $parent;
}
include $path.'/includes/404.php';
}
Получаем итоговый код:
Пример:
<?php
if (! defined('DIAFAN'))
{
$path = __FILE__;
while(! file_exists($path.'/includes/404.php'))
{
$parent = dirname($path);
if($parent == $path) exit;
$path = $parent;
}
include $path.'/includes/404.php';
}
$rows = DB::query_fetch_all("SELECT u.name, c.text FROM {comments} AS c
LEFT JOIN {users} AS u ON c.user_id=u.id WHERE c.act='1' AND c.trash='0'
ORDER BY c.id DESC LIMIT 5");
$text = '';
foreach ($rows as $row)
{
if ($this->diafan->configmodules("avatar", "users") && file_exists(ABSOLUTE_PATH.USERFILES.'/avatar/'.$row['name'].'.png'))
{
$avatar = BASE_PATH.USERFILES.'/avatar/'.$row['name'].'.png';
$avatar_width = $this->diafan->configmodules("avatar_width", "users");
$avatar_height = $this->diafan->configmodules("avatar_height", "users");
$text .= '<img src="'.$avatar.'" width="'.$avatar_width.'"
height="'.$avatar_height.'" alt="'.$row['name'].'"><br>';
}
$text .= $row['text'].'<br>';
}
echo $text;
Затем в любом основном шаблоне сайта, например в themes/site.php, функцию
можно вызвать в любом месте шаблонным тегом <insert name="show_last_comments">
.
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.