Wiki
CMS / Сборник_сниппетов
Сниппеты в основном взяты из этой темы, исправлены и обновлены.
#Символы "<?php" в начале и "?>" в конце фрагментов кода написаны только для корректной работы подсветки синтаксиса. Не копируйте их при создании сниппета! #
Сниппет для проверки пришло ли новое сообщение в личку.
<?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