Редактор темы

Вопрос? Помогите настроить фильтр в шаблоне.

Tolstyak87

Бывалый
Регистрация
21 Мар 2018
Сообщения
638
Рейтинг реакций
50
Баллы
28
Возраст
39
1/3
Автор темы
Доброго времени суток уважаемые форумчане. Столкнулся с такой проблеммой: в шаблоне моего сайта есть фильтр для отображения новостей для посетителей, никак не могу разобраться, как его настроить и подкоректировать, чтоб работал. Что бы я ни пробовал - выдает ошибку.
Ниже приведен код из файла фильтра (filter.tpl)......

PHP:
<script type="text/javascript" src="{THEME}/js/filter.js"></script>
<div class="filter no-select">
    <div class="title"><i class="fa fa-calendar"></i> Год выпуска</div>
    <div id="xf_year" class="filter-slider">
        <span class="filter-value val1"></span>
        <span class="filter-value val2"></span>
    </div>
    <div class="title"><i class="fa fa-star-o"></i> Рейтинг КиноПоиск</div>
    <div id="xf_kinopoisk" class="filter-slider">
        <span class="filter-value val1"></span>
        <span class="filter-value val2"></span>
    </div>
    <div class="clr"></div>
</div>
<div class="filter-buttons no-select">
    <div class="butt yellow">
        <span>Выбрать жанры <i class="fa fa-angle-down"></i></span>
        <div class="list" id="genre-id">
            <div class="top">
            Фильмы
                <span class="offin"><span id="one-genre">и</span><span id="all-genres" class="active">или</span></span>
                <span class="about">
                    <b>и:</b> отберутся фильмы, соответствующие всем выбранным жанрам;<br />
                    <b>или:</b> отберутся все фильмы хотя бы одного жанра
                </span>
                <div class="clr"></div>
            </div>
            <button class="cbtn [category=2] active[/category]" data-id="11">Биография</button>
            <button class="cbtn [category=3] active[/category]" data-id="12">Боевик</button>
            <button class="cbtn [category=4] active[/category]" data-id="13">Вестерн</button>
            <button class="cbtn [category=5] active[/category]" data-id="14">Военный</button>
            <button class="cbtn [category=6] active[/category]" data-id="15">Детектив</button>
            <button class="cbtn [category=7] active[/category]" data-id="16">Детский</button>
            <button class="cbtn [category=8] active[/category]" data-id="17">Документальный</button>
            <button class="cbtn [category=9] active[/category]" data-id="18">Драма</button>
            <button class="cbtn [category=10] active[/category]" data-id="20">Игра</button>
            <button class="cbtn [category=10] active[/category]" data-id="21">Исторический</button>
            <button class="cbtn [category=11] active[/category]" data-id="22">Комедия</button>
            <button class="cbtn [category=11] active[/category]" data-id="23">Короткометражка</button>
            <button class="cbtn [category=12] active[/category]" data-id="24">Криминал</button>
            <button class="cbtn [category=13] active[/category]" data-id="25">Мелодрама</button>
            <button class="cbtn [category=17] active[/category]" data-id="26">Мюзикл</button>
            <button class="cbtn [category=18] active[/category]" data-id="27">Приключения</button>
            <button class="cbtn [category=22] active[/category]" data-id="28">Семейный</button>
            <button class="cbtn [category=23] active[/category]" data-id="6">Спорт</button>
            <button class="cbtn [category=24] active[/category]" data-id="3">Триллер</button>
            <button class="cbtn [category=25] active[/category]" data-id="4">Ужасы</button>
            <button class="cbtn [category=26] active[/category]" data-id="7">Фантастика</button>
            <button class="cbtn [category=14] active[/category]" data-id="31">Фильм-нуар</button>
            <button class="cbtn [category=27] active[/category]" data-id="32">Фэнтези</button>

            <div class="top">Сериалы</div>
            <button class="cbtn [category=19] active[/category]" data-id="35">Русские сериалы</button>
            <button class="cbtn [category=20] active[/category]" data-id="36">Зарубежные сериалы</button>
            <button class="cbtn [category=21] active[/category]" data-id="37">Турецкие сериалы</button>

            <div class="top">Мультфильмы</div>
            <button class="cbtn [category=15] active[/category]" data-id="9">Аниме</button>
            <button class="cbtn [category=16] active[/category]" data-id="10">Мультфильмы</button>

        </div>
        </div>
    <div class="butt yellow">
        <span>Выбрать страны <i class="fa fa-angle-down"></i></span>
        <div class="list" id="xf_country">
            <div class="top">Выберите необходимые страны</div>
            <button class="cbtn">Австралия</button>
            <button class="cbtn">Бразилия</button>
            <button class="cbtn">Великобритания</button>
            <button class="cbtn">Германия</button>
            <button class="cbtn">Дания</button>
            <button class="cbtn">Индия</button>
            <button class="cbtn">Ирландия</button>
            <button class="cbtn">Испания</button>
            <button class="cbtn">Италия</button>
            <button class="cbtn">Канада</button>
            <button class="cbtn">Люксембург</button>
            <button class="cbtn">Нидерланды</button>
            <button class="cbtn">Норвегия</button>
            <button class="cbtn">Польша</button>
            <button class="cbtn">Россия</button>
            <button class="cbtn">Румыния</button>
            <button class="cbtn">СССР</button>
            <button class="cbtn">США</button>
            <button class="cbtn">Украина</button>
            <button class="cbtn">Франция</button>
        </div>
    </div>
    <div class="butt red">
        <span>Подобрать <i class="fa fa-filter"></i></span>
    </div>
    <div class="clr"></div>
</div>

А это код из .js в шаблоне, отвечающий за фильтр...

PHP:
function move_Fvalue(e,ui0,ui1){
    $(e+' .val1').stop().animate({left:$(e+' .ui-slider-handle').eq(0).css('left')},200).html( ui0?ui0:(e=='#xf_kinopoisk'?$( e ).slider( "values", 0 ).toFixed(1):$( e ).slider( "values", 0 )) );
    $(e+' .val2').stop().animate({left:$(e+' .ui-slider-handle').eq(1).css('left')},200).html( ui1?ui1:(e=='#xf_kinopoisk'?$( e ).slider( "values", 1 ).toFixed(1):$( e ).slider( "values", 1 )) );
}

$(document).ready(function() {
    $( "#xf_year" ).slider({
        range: true,
        min: 1970,
        max: 2016,
        step: 1,
        values: [ 2000, 2015 ],
        slide: function( event, ui ) {
            move_Fvalue('#xf_year',ui.values[ 0 ],ui.values[ 1 ]);
        },
        stop: function( event, ui ) {
            move_Fvalue('#xf_year',ui.values[ 0 ],ui.values[ 1 ]);
            $('#xf_year .ui-slider-handle').each(function(i){
                i++;
                if($(this).hasClass('ui-state-focus')) {
                    $('#xf_year .filter-value').css({'z-index':0});
                    $('#xf_year .val'+i).css({'z-index':1});
                }
            });
        }
    })
    .append('<div class="steps"><span class="s1">'+1970+'</span><span class="s2">'+1982+'</span><span class="s3">'+1993+'</span><span class="s4">'+2005+'</span><span class="s5">'+2016+'</span></div>');
    move_Fvalue('#xf_year');
    
    $( "#xf_kinopoisk" ).slider({
        range: true,
        min: 1,
        max: 10,
        step: 0.1,
        values: [ 5.5, 9.2 ],
        slide: function( event, ui ) {
            move_Fvalue('#xf_kinopoisk',ui.values[ 0 ].toFixed(1),ui.values[ 1 ].toFixed(1));
        },
        stop: function( event, ui ) {
            move_Fvalue('#xf_kinopoisk',ui.values[ 0 ].toFixed(1),ui.values[ 1 ].toFixed(1));
            $('#xf_kinopoisk .ui-slider-handle').each(function(i){
                i++;
                if($(this).hasClass('ui-state-focus')) {
                    $('#xf_kinopoisk .filter-value').css({'z-index':0});
                    $('#xf_kinopoisk .val'+i).css({'z-index':1});
                }
            });
        }
    })
    .append('<div class="steps"><span class="s1">'+1.1+'</span><span class="s2">'+3.3+'</span><span class="s3">'+5.5+'</span><span class="s4">'+7.8+'</span><span class="s5">'+9.9+'</span></div>');
    move_Fvalue('#xf_kinopoisk');
    
    $('.filter-buttons .masha_index').remove();
    
    $('.filter-buttons .cbtn').click(function(){
        $(this).toggleClass('active');
    })
    .mouseleave(function(){
        $(this).blur();
    });
    
    $('.filter-buttons .butt > span').click(function(){
        list=$(this).parent().children('.list');
        if( list.css('display')=='none' ) {
            $('.filter-buttons .list').hide();
            $('.filter-buttons .butt > span').removeClass('active');
            $('.filter-buttons .butt .fa').removeClass('fa-rotate-180');
            $(this).addClass('active').children('.fa').addClass('fa-rotate-180');
            list.show();
            } else {
            $('.filter-buttons .list').hide();
            $('.filter-buttons .butt > span').removeClass('active');
            $('.filter-buttons .butt .fa').removeClass('fa-rotate-180');
        }
    });
    
    $('.filter-buttons .offin #one-genre, .filter-buttons .offin #all-genres').click(function(){
        $('.filter-buttons .offin span').removeClass('active');
        $(this).addClass('active');
    });
    
})
.click(function(e){
    if($('.filter-buttons .butt .active').length==0)
    return;
    e=e||window.event;
    var target=e.target||e.srcElement;
    while(target)
    {
        if(target==$('.filter-buttons').get(0))
        return;
        target=target.parentNode;
    }
    $('.filter-buttons .list').hide();
    $('.filter-buttons .butt > span').removeClass('active');
    $('.filter-buttons .butt .fa').removeClass('fa-rotate-180');
})
.on('click', '.filter-buttons .butt.red, #filter-next', function() {
        var genre = [],
        xf_country = [],
        cstart = $(this).data('cstart');
        if($('#filter-next').length==0) $('#content').prepend('<div class="navigation-button"><a id="filter-next"></a></div>');
        nextBtn = $('#filter-next');
        i = 0;
        $('#genre-id .cbtn').each(function(){
            if( $(this).hasClass('active') ) {
                genre[i] = $(this).data('id');
                i++;
            }
        });
        i = 0;
        $('#xf_country .cbtn').each(function(){
            if( $(this).hasClass('active') ) {
                xf_country[i] = $(this).html();
                i++;
            }
        });
        if( !cstart ) cstart = 0;
        xf_year_start = $('#xf_year .val1').html();
        xf_year_end = $('#xf_year .val2').html();
        xf_kinopoisk_start = $('#xf_kinopoisk .val1').html();
        xf_kinopoisk_end = $('#xf_kinopoisk .val2').html();
        gf = $('.filter-buttons .offin .active').index();
        nextBtn.css({'text-indent':'-9999px','position':'relative','margin':'4px 0 -10px',backgroundColor:'#eee'}).animate({height:3,border:0,width:'100%'},'fast',function(){
        $(this).append('<span></span>').children('span').animate({width:'50%'},'slow');
        $.get("/engine/ajax/filter.php", {genre:genre,genre_filter:gf,xf_country:xf_country,xf_year_start:xf_year_start,xf_year_end:xf_year_end,xf_kinopoisk_start:xf_kinopoisk_start,xf_kinopoisk_end:xf_kinopoisk_end,cstart:cstart},
        function(data){
            nextBtn.children('span').animate({width:'100%'},'slow',function(){
            if( cstart > 0 ) $('#content').append(data);
            else $('#content').html(data);
            $(this).parents('.navigation-button').fadeOut(200,function(){$(this).remove()});
            });
        }
        );
        });
        return false;
    });
    

$(window).resize(function(){
    move_Fvalue('#xf_year');
    move_Fvalue('#xf_kinopoisk');
});

И еще код из filter.php движка

PHP:
<?php
    /*
        =====================================================
        DataLife Engine - by SoftNews Media Group
        -----------------------------------------------------
        http://dle-news.ru/
        -----------------------------------------------------
        Copyright (c) 2004,2015 SoftNews Media Group
        =====================================================
        Данный код защищен авторскими правами
        =====================================================
        Файл: rating.php
        -----------------------------------------------------
        Назначение: AJAX для рейтинга новостей
        =====================================================
    */
    
    @error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
    @ini_set ( 'display_errors', true );
    @ini_set ( 'html_errors', false );
    @ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );
    
    define( 'DATALIFEENGINE', true );
    define( 'ROOT_DIR', substr( dirname(  __FILE__ ), 0, -12 ) );
    define( 'ENGINE_DIR', ROOT_DIR . '/engine' );
    
    include ENGINE_DIR . '/data/config.php';
    
    date_default_timezone_set ( $config['date_adjust'] );
    
    if( $config['http_home_url'] == "" ) {
        
        $config['http_home_url'] = explode( "engine/ajax/rating.php", $_SERVER['PHP_SELF'] );
        $config['http_home_url'] = reset( $config['http_home_url'] );
        $config['http_home_url'] = "http://" . $_SERVER['HTTP_HOST'] . $config['http_home_url'];
        
    }
    
    require_once ENGINE_DIR . '/classes/mysql.php';
    require_once ENGINE_DIR . '/data/dbconfig.php';
    require_once ENGINE_DIR . '/modules/functions.php';
    
    dle_session();
    
    $_REQUEST['skin'] = totranslit($_REQUEST['skin'], false, false);
    
    if( $_REQUEST['skin'] ) {
        if( @is_dir( ROOT_DIR . '/templates/' . $_REQUEST['skin'] ) ) {
            $config['skin'] = $_REQUEST['skin'];
            } else {
            die( "Hacking attempt!" );
        }
    }
    
    if( $config["lang_" . $config['skin']] ) {
        if ( file_exists( ROOT_DIR . '/language/' . $config["lang_" . $config['skin']] . '/website.lng' ) ) {   
            include_once ROOT_DIR . '/language/' . $config["lang_" . $config['skin']] . '/website.lng';
        } else die("Language file not found");
        } else {
        
        include_once ROOT_DIR . '/language/' . $config['langs'] . '/website.lng';
        
    }
    $config['charset'] = ($lang['charset'] != '') ? $lang['charset'] : $config['charset'];
    
    $allow_active_news = true;
    
    require_once ENGINE_DIR . '/classes/templates.class.php';
    
    $tpl = new dle_template();
    
    if ( ($config['allow_smartphone'] AND !$_SESSION['mobile_disable'] AND $tpl->smartphone) OR $_SESSION['mobile_enable'] ) {
        
        if ( @is_dir ( ROOT_DIR . '/templates/smartphone' ) ) {
            
            $config['skin'] = "smartphone";
            $smartphone_detected = true;
            
            if( $config['allow_comments_wysiwyg'] > 0 ) $config['allow_comments_wysiwyg'] = 0;
            
        }
        
    }
    
    $tpl->dir = ROOT_DIR . '/templates/' . totranslit($config['skin'], false, false);
    
    $cat_info = get_vars( "category" );
    
    if( ! is_array( $cat_info ) ) {
        $cat_info = array ();
        
        $db->query( "SELECT * FROM " . PREFIX . "_category ORDER BY posi ASC" );
        while ( $row = $db->get_row() ) {
            
            $cat_info[$row['id']] = array ();
            
            foreach ( $row as $key => $value ) {
                $cat_info[$row['id']][$key] = stripslashes( $value );
            }
            
        }
        set_vars( "category", $cat_info );
        $db->free();
    }
    
    while (list($key, $value) = each($_GET)) {
        
        if( $key == 'genre' ) {
            
            if ($config['allow_multi_category']) {
                
                if( $_GET['genre_filter'] == 1 ) $where[] = "category regexp '[[:<:]](" . implode( '|', $value ) . ")[[:>:]]'";
                
                else {
                    foreach( $value as $genre ) {
                        $genres[] = "category regexp '[[:<:]](".$genre.")[[:>:]]'";
                    }
                    $genre = implode(" AND ", $genres);
                    $where[] = '(' .$genre. ')';
                }
                
            } else  $where[] = "category = '{$value[0]}'";
            
            } elseif ( substr($key,0,3) == 'xf_' ) {
            
            preg_match_all('#xf_(.*)_(.*)#', $key, $matches, PREG_SET_ORDER);
            
            if( $matches[0][2] == 'start' OR $matches[0][2] == 'end'  ) {
                
                if($matches[0][2]=='start')
                {
                    $where[] = "SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, '{$matches[0][1]}|', -1 ) ,  '||', 1 )>$value-0.001";   
                }
                else
                {
                    $where[] = "SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, '{$matches[0][1]}|', -1 ) ,  '||', 1 )<$value+0.001";
                }
                } else {
                
                if( count($value) == 1 ) $where[] = "xfields LIKE '%".substr($key,3)."|%".convert_unicode( $value[0], $config['charset']  )."%'";
                
                else {
                    
                    foreach($value as $xf){
                        $searchLS[] = "xfields LIKE '%".substr($key,3)."|%".convert_unicode( $xf, $config['charset']  )."%'";
                    }
                    
                    $xfs = implode(" OR ", $searchLS);
                    $where[] = '(' .$xfs. ')';
                    
                }
            }
        }
        
    }
    
    if( isset($where) ) $where = ' AND ' . implode( ' AND ', $where );
    
    //$where = " AND (xfields LIKE '%kinopoisk|%8.5%' OR xfields LIKE '%kinopoisk|%8.0%')";
    
    if( $_GET['cstart'] ) $cstart = $_GET['cstart'];
    else $cstart = 0;
    
    $sql_select = "SELECT id, short_story, xfields, title, category, alt_name FROM " . PREFIX . "_post WHERE approve=1$where ORDER BY date DESC LIMIT $cstart,".$config['news_number'];
    $sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE approve=1$where";
    
    $config['news_navigation'] = 0;
    
    include ENGINE_DIR . '/modules/show.short.php';
    
    if( $tpl->result['content'] !== '' ) {
        
        if( $config['news_number'] AND $config['news_number'] < $count_all and $news_count < $count_all ) {
            
            $tpl->load_template( 'navigation.tpl' );
            
            $tpl->set_block( "'\[next-link\](.*?)\[/next-link\]'si", "<a href=\"#\" id=\"filter-next\" data-cstart=\"$news_count\">\\1</a>" );
            
            $tpl->compile( 'navi' );
            
            $tpl->result['content'] .= $tpl->result['navi'];
            
            $tpl->clear();
            
        }
        
        } else {
        
        $tpl->load_template( 'info.tpl' );
        $tpl->set( '{error}', "К сожалению, поиск по сайту не дал никаких результатов. Попробуйте изменить или упростить Ваш запрос." );
        $tpl->set( '{title}', $lang['all_err_1'] );
        $tpl->compile( 'content' );
        $tpl->clear();
        
    }
    
    @header( "Content-type: text/html; charset=" . $config['charset'] );
    echo $tpl->result['content'];
    
?>

Помогите решить проблему...
 
используй Field Search от гамира или xsort от сандера.
 
реально, если этими заняться, но насколько помню писали что тот фильтр дырявый, и без патча могут как то навредить сайту некоторые умельцы...
 
Автор темы
используй Field Search от гамира или xsort от сандера.
Так это Field Search от гамира и есть, судя по коду

реально, если этими заняться, но насколько помню писали что тот фильтр дырявый, и без патча могут как то навредить сайту некоторые умельцы...
Хорошо, сейчас попробую Field Search от гамира
 
Последнее редактирование модератором:
Автор темы
Нет, это не он, и даже по коду он никак не похож!
Поставил его, тот же результат....

Нет, это не он, и даже по коду он никак не похож!
Сори, пробовал Smart xfields search engine - фильтр по доп полям на аякс free [dle 10.x-11.x]
Это тот же самый и он не пашет
 

Вложения

  • Безымянный.png
    Безымянный.png
    1,2 МБ · Просмотры: 1
  • Безымянный.png
    Безымянный.png
    1,2 МБ · Просмотры: 1
Последнее редактирование модератором:
там даже по скрину можно понять что это тот же самый, в описании в той теме написано что выложенный фильтр вытащен из одного шаблона, просто название шаблона не указано 🙂
 
Спасибо, работает, толькодонастроить нужно😛
Пусть служит 😉
Привык не ставит нуллы и рипики, дабы не обижать Сандера, т.к. работал с ним не раз, отличный парень, старается же 😀
 

Похожие темы Последние темы Популярные темы

Назад
Сверху