Система объявлений

Система объявлений 1.0.0

Нет прав для скачивания
Совместимость
не проверялся на совместимость
Изменения в БД
требуются
Автор
frost444
Общественное достояние
да
Описание: добавляет администрации возможность размещать объявления для пользователей.

Возможности:
  • Кеширование, AJAX
  • Внешний вид и прокрутка точь в точь как у XenForo
  • Скрытие объявлений у отдельного пользователя, с запоминанием закрытых блоков
Инструкция по установке
PHP:
####[ВЫПОЛНИТЬ]-----SQL

CREATE TABLE IF NOT EXISTS `bb_rules` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL DEFAULT '',
  `text` text NOT NULL,
  `active` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;;

ALTER TABLE `bb_users` ADD `user_showsrules` text NOT NULL;

####[КОНЕЦ]-----SQL

####[ОТКРЫТЬ]----- index.php
-----[найти]-----

$user->session_start();

-----[добавить после]-----

if ($bb_cfg['rules']['on'])
{
  
    if (!CACHE('bb_cache')->get('rules'))
    {
        $max = DB()->fetch_row("SELECT COUNT(id) as max FROM ". BB_RULES ." LIMIT 1");
        if ($max['max'] <= 0)
        {
            $template->assign_block_vars('not_rules', array());
        }else{
            $sql =  DB()->fetch_rowset("SELECT *
                FROM ". BB_RULES ." WHERE active = 1 GROUP BY id");
            foreach ($sql as $rules)
            {
                $sql_r['rules'][$rules['id']] = array('id'=>$rules['id'],'title'=>$rules['title'],'text'=>$rules['text']);
            }
            CACHE('bb_cache')->set('rules', $sql_r, $bb_cfg['rules']['cache']);
        }  
    }else{
        $sql_r = CACHE('bb_cache')->get('rules');
    }
    if(!empty($sql_r))
    {
        $rules_show = !empty($userdata['user_showsrules']) ? array_val_diff($sql_r['rules'], safe_unserialize($userdata['user_showsrules'])) : $sql_r['rules'];
        if(!empty($rules_show))
        {
            $template->assign_vars(array(
                'RULES_ON'    => true,
            ));
            $i=0;
            foreach ($rules_show as $rules)
            {
                $orig_word = $replacement_word = array();
                obtain_word_list($orig_word, $replacement_word);
                $title = str_replace('\"', '"', substr(@preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "@preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $rules['title'] . '<'), 1, -1));
              
                $template->assign_block_vars('rules',array(
                    'ID'        => $rules['id'],
                    'BLOCK_ID'    => $i,
                    'TITLE'     => $title,
                    'TITLE_MIN' => str_short($title, 31),
                    'TEXT'      => $rules['text'],
                ));
                $i++;
            }
        }  
    }  
}

####[СОХРАНИТЬ_ФАЙЛ]####

####[ОТКРЫТЬ]----- index.tpl

-----[в любое место]-----

<!-- IF RULES_ON -->
<link rel="stylesheet" href="{TPL_DIR}/rules.css?v={$bb_cfg['css_ver']}" type="text/css">
<script type="text/javascript" src="{SITE_URL}misc/js/slides.jquery.js"></script>
<div id="NoticesStart" style="display:none">
<div id="Notices" class="PanelScroller">
    <div id="RulesBlock">
        <div class="scrollContainer">
            <div class="PanelContainer">
                <div class="PanelsRules">
                <!-- BEGIN rules -->
                    <div class="panel Notice ShowCtrlBlock notice_{rules.ID}" style="float: left;" data-id="{rules.ID}">
                        <div class="noticeContent">{rules.TEXT}</div>
                        <!-- IF LOGGED_IN -->
                        <a href="#notice_{rules.ID}" data-id="{rules.ID}" title="Скрыть объявление" class="ShowCtrlButton">Скрыть объявление</a>
                        <!-- ENDIF -->
                    </div>
                <!-- END rules -->
                </div>
            </div>
        </div>
        <div class="navContainer">
            <span class="navControls">
                <ul class="UlNavControls">
                    <!-- BEGIN rules -->
                    <li data-id="{rules.ID}" ><a href="#" class="current" title="{rules.TITLE}" data-slide-index="{rules.BLOCK_ID}">
                        <span id="select" class="arrow"><span></span></span>
                        <!--{rules.ID} -->
                        {rules.TITLE_MIN}
                    </a></li>
                    <!-- END rules -->
                </ul>
            </span>
        </div>
    </div>  
</div>
</div>
<script type="text/javascript">
<!-- IF LOGGED_IN -->
$(document).ready(hide_rules);
$(document).ajaxComplete(hide_rules);
function hide_rules() {  
    $('.ShowCtrlButton').on("click", function () {
        var RBlock = $("div#Notices");
        var id = $(this).data('id');
        ajax.exec({
            action  : 'rules',
            rules_id : id
        });
        ajax.callback.rules = function(data) {
            if(data.info) alert(data.info);
            if(data.show)
            {
                $('div.PanelsRules li[data-id='+ data.rules_id +']', RBlock).remove();
                $('div.PanelsRules li.bx-clone[data-id='+ data.rules_id +']', RBlock).remove();
                $('ul.UlNavControls li[data-id='+ data.rules_id +']', RBlock).remove();
                slidesRules($("div.PanelContainer", RBlock), true);      
            }
        };  
    });
}
<!-- ENDIF -->
function resizerules(block, LeftHeight, RightHeight) {
    var winWidth = $(window).width();
    winWidth = winWidth - LeftHeight - RightHeight;
    $(block).css({width: winWidth + 'px'});
    $("li.Notice",block).css({width: winWidth + 'px'});
}

function slidesRules(data, rem){
    $("div.PanelContainer", data).each(function(){
        if(!rem){
            var slider = $(".PanelsRules", $(this)).bxSlider({
                slideSelector: "div.panel",
                pagerCustom: '.UlNavControls',
                speed: 500,
                auto: true,
                autoHover: true,
                pause: 5000,
                controls: false,
            });
        }else{
            slider.reloadSlider();
        }
    });
}

$(function(){
    var block = $("div#Notices"); //Блок с новостями

    $(window).on("resize", function(){resizerules(block, 225, 25);});
    $(window).on("load", function(){resizerules(block, 225, 25);});
    $(window).on("load", function(){$("div#NoticesStart").css("display", "block");slidesRules(block, false)});
});
</script>
<!-- ENDIF -->

####[СОХРАНИТЬ_ФАЙЛ]####

####[ОТКРЫТЬ]----- init_bb.php

-----[найти]-----

define('BB_PRIVMSGS_TEXT',        'bb_privmsgs_text');

-----[добавить после]-----

//RULES MODE
define('BB_RULES',              'bb_rules');
//RULES MODE

####[СОХРАНИТЬ_ФАЙЛ]####

####[ОТКРЫТЬ]----- ajax.php

-----[найти]-----

-----[найти]-----

        'index_data'        => array('guest'),

-----[добавить после]-----

        'rules'             => array('user'),

-----[найти последнюю скобку и перед ней добавить]-----

    function rules()
    {
        require(AJAX_DIR .'rules.php');
    }

####[СОХРАНИТЬ_ФАЙЛ]####

####[ОТКРЫТЬ]----- config.php

-----[в конец добавить]-----

$bb_cfg['rules'] = array(
  'on'          => true,
  'cache'       => 24, //кеш держится в часах
);

####[СОХРАНИТЬ_ФАЙЛ]####

####[ОТКРЫТЬ]----- lang_main.php

-----[в конец добавить]-----

//RULES MODE
$lang['RULES'] = 'Управление объявлениями';
$lang['RULES_TEXT'] = 'Содержание';
$lang['RULES_ID'] = 'ID';
$lang['RULES_TITLE'] = 'Название';
$lang['RULES_ACTIVATE'] = 'Активность';
$lang['RULES_INFO'] = 'Данная страница предназначена для вывода объявлений на главной странице сайта';
$lang['RULES_INFO_EDIT'] = 'Данная страница предназначена для редактирования/добавления объявлений';
$lang['RULES_ADD'] = 'Добавить объявление';
$lang['MISSING_RULES_ID'] = "ID объявления пропущено";
$lang['RULES_REMOVED'] = "Объявление удалено";
$lang['RULES_UPDATED'] = "Объявление обновлено";
$lang['RULES_ADDED'] = "Объявление добавлено";
$lang['CLICK_RETURN_RULESADMIN'] = 'Нажмите %sСюда%s для возврата к управлению объявлениями';
//RULES MODE

####[СОХРАНИТЬ_ФАЙЛ]####

####[ОТКРЫТЬ]----- functions.php

-----[в конец добавить]-----


function safe_unserialize($serialized) {
    if (is_string($serialized) && strpos($serialized, "\0") === false) {
        if (strpos($serialized, 'O:') === false) {
            return @unserialize($serialized);
        } else if (!preg_match('/(^|;|{|})O:[0-9]+:"/', $serialized)) {
            return @unserialize($serialized);
        }
    }
    return false;
}
function might_serialize($val){
    if(is_object($val)){
        $obj_keys = array_keys(get_object_vars($val));
        foreach($obj_keys as $k){ $val->$k = might_serialize($val->$k); }
        $val = serialize($val);
    }
    if(is_array($val)){
        foreach($val as &$v){ $v = might_serialize($v); }
        $val = serialize($val);
    }

    return $val;
}
function array_key_diff($ar1, $ar2) {  // , $ar3, $ar4, ...
    $aSubtrahends = array_slice(func_get_args(),1);
    foreach ($ar1 as $key => $val)
        foreach ($aSubtrahends as $aSubtrahend)
            if (array_key_exists($key, $aSubtrahend))
                unset ($ar1[$key]);
    return $ar1;
}
function array_val_diff($ar1, $ar2) {  // , $ar3, $ar4, ...
    $aSubtrahends = array_slice(func_get_args(),1);
    foreach ($ar1 as $key => $val)
        foreach ($aSubtrahends as $aSubtrahend)
            if (in_array($key, $aSubtrahend))
                unset ($ar1[$key]);
    return $ar1;
}

####[СОХРАНИТЬ_ФАЙЛ]####
Автор
Exile
Скачивания
47
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя Exile