Clone 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