Wiki
CMS / Сборник_сниппетов
Сниппеты в основном взяты из этой темы, исправлены и обновлены.
#Символы "" в конце фрагментов кода написаны только для корректной работы подсветки синтаксиса. Не копируйте их при создании сниппета! #
Сниппет для проверки пришло ли новое сообщение в личку.
<?php
// Чтоб показывалось только авторизованным
if (!empty($_SESSION['user']['id'])) {
// Считываем инфу о сообщениях. $cntNewMsg выводит число, сколько личек
$cntNewMsg = UserAuth::countNewMessages();
// Если личек 0 значит не пришло.
if ($cntNewMsg=="0") {
echo 'не пришло';
// Если нет, то пришло *СТОЛЬКО_ТО*
} else {
echo 'пришло ' . $cntNewMsg . '';
}
}
?>
Сниппет вывода рандомных тем.
<?php
$rand_themes = getDB()->select('themes', DB_ALL, array('order' => 'RAND()', 'limit' => 8));
if (count($rand_themes) > 0) {
echo '<ul>';
foreach ($rand_themes as $ra_theme) {
echo '<li><a href="' . WWW_ROOT . 'forum/view_theme/' . $ra_theme['id'] . '">' . $ra_theme['title'] . '</a></li>';
}
echo '</ul>';
}
?>
Cниппет вывода последних обновленных тем форума.
<?php
$last_added_posts = getDB()->select('themes', DB_ALL, array('limit' => 10, 'order' => 'last_post DESC'));
if (!empty($last_added_posts)) {
echo '<ul>';
foreach ($last_added_posts as $last_post) {
echo '<li class="point"><a style="font-weight:400;" href="' . WWW_ROOT . 'forum/view_theme/' . $last_post['id'] . '">' . $last_post['title'] . '</a> » <span style="color:#D6C39B;">' . $last_post['last_post'] . '</span></li>';
}
echo '</ul>';
}
?>
Вывод рандомных статей
<?php
$module = 'stat';
$last_added_mats = getDB()->select($module, DB_ALL, array('order' => 'RAND()', 'limit' => 7));
if (count($last_added_mats) > 0) {
echo '<ul>';
foreach ($last_added_mats as $mat) {
$url = get_url(matUrl($mat['id'], $mat['title'], $module));
echo '<li><a href="' . $url . '">' . $mat['title'] . '</a></li>';
}
echo '</ul>';
}
?>
5 последних зарегистрированных юзеров
<?php
$new_user = getDB()->select('users', DB_ALL, array('limit' => 5, 'order' => 'id DESC'));
if (!empty($new_user)) {
echo '<ul>';
foreach ($new_user as $n_u) {
echo '<li class="point"><a style="font-weight:400;" title="Последний раз был:' . $n_u['last_visit'] . '" href="/' . R . 'users/info/' . $n_u['id'] . '">' . $n_u['name'] . '</a> </li>';
}
echo '</ul>';
} else {
echo 'Юзеры все сбежали ))';
}
?>
Вывод категорий с отображением количества материалов в ней и подкатегориях
<?php
$module = 'stat';
$html = '';
if (isset($params['parent_id'])) {
$params = $params['parent_id'];
} else {
$params = 0;
}
$cats = getDB()->select($module.'_categories', DB_ALL, array(
'alias' => 'a',
'fields' => array(
'`id` as id',
'`parent_id` as parent_id',
'`title` as title',
'(SELECT COUNT(*) FROM `'.$module.'` WHERE `category_id` = `a`.`id`) as cnt',
),
));
function getCnt($cats, $parent_id) {
$cnt = 0;
foreach ($cats as $cat) {
if ($cat['parent_id']==$parent_id) {
$cnt = $cnt+$cat['cnt']+getCnt($cats, $cat['id']);
}
}
return $cnt;
}
$html .= '<ul class="atm-categories">';
foreach ($cats as $cat) {
if ($cat['parent_id']==$params) {
$cnt = $cat['cnt']+getCnt($cats, $cat['id']);
$html .= '<li><a href="/'.$module.'/category/' . $cat['id'] . '">' . h($cat['title']) . '</a><span class="cnt">(' . $cnt . ')</span></li>';
}
}
$html .= '<div class="clear"></div></ul>';
echo $html;
?>
Пример использования: {[categories?parent_id={{ params[2] }}]}
Вывод ссылок на предыдущий и последующий материал на странице материала
<?php
$modelName = Register::getClass('ModulesManager')->getModelName($params["module"]);
$model = new $modelName;
if (isset($params["prepend"]) && $params["prepend"] == true) {
$opt = array(
"limit"=> 1,
"cond"=> array('`id` < '.$params["id"]),
"order" => "`id` DESC"
);
$result = $model->getCollection($opt['cond'],$opt);
if (!empty($result))
echo '<a href="' . entryUrl($result[0], $params["module"]) . '">Предыдущий материал: ' . $result[0]->getTitle() . '</a>';
} else {
$opt = array(
"limit"=> 1,
"cond"=> array('`id` > '.$params["id"])
);
$result = $model->getCollection($opt['cond'],$opt);
if (!empty($result))
echo '<a href="' . entryUrl($result[0], $params["module"]) . '">Следующий материал: ' . $result[0]->getTitle() . '</a>';
}
?>
Пример использования
Предыдущий материал: {[!nextmaterial?id={{ entity.id }}&module={{ module }}&prepend=true]}
Следующий материал: {[!nextmaterial?id={{ entity.id }}&module={{ module }}]}
Сниппет для отображения новостей определённого пользователя в его профиле (Beta).
<?php
$module = 'news';
if (Config::read('use_local_preview', $module)) {
$preview = Config::read('use_preview', $module);
$size_x = Config::read('img_size_x', $module);
$size_y = Config::read('img_size_y', $module);
} else {
$preview = Config::read('use_preview');
$size_x = Config::read('img_size_x');
$size_y = Config::read('img_size_y');
}
$Register = Register::getInstance();
$params = $Register['params'];
$last_added_mats = getDB()->select('news', DB_ALL, array('order' => 'id DESC', 'cond' => array('author_id' => $params[2])));
$out = (isset($_SESSION['current_vars']['main'])) ? $_SESSION['current_vars']['main'] : '';
$text = new PrintText;
$where = array('author_id' => $id);
if (count($last_added_mats) > 0) {
foreach ($last_added_mats as $mat) {
$url = get_url(matUrl($mat['id'], $mat['title'], $module));
$announce = $text->getAnnounce($mat['main'], 0, 10000);
$attaches = getDB()->select('news_attaches', DB_ALL, array('cond' => array('entity_id' => $mat['id'])));
if (!empty($attaches) && count($attaches) > 0) {
foreach ($attaches as $attach) {
if ($attach['is_image'] == '1') {
$announce = str_replace('{IMAGE'.$attach['attach_number'].'}', '<img src="' . get_url('/data/images/news/'.$size_x.'x'.$size_y.'/'.$attach['filename']) . '" />', $announce);
}
}
}
echo '<div class="d-content">
<div class="news-title"><a href="' . $url . '">' . $mat['title'] . '</a></div>
<div class="short-text">' . $announce . '</div>'. $id .'
</div>';
}
}
?>
Updated