DataLife Engine / Выбор категорий галочками DLE

Выбор категорий галочками DLE


Как сделать выбор категории с галочками для DLE в форме добавления новостей? Удобное добавление новостей - хак выбор категорий галочками для DLE на https://dle9.com/ под любую версию движка DataLife Engine, проверен на dle 10.4, должен работать на dle 10.5 версии.

Хак для dle заменяет стандартный выбор категорий при добавление новостей в пользовательской части и административном разделе галочками для DLE.
Сделать выбор категорий select на checkbox в форме добавления новостей, поможет хак (Выбор категорий галочками) в DLE в админ панели и пользовательской части сайта.

В этой статье рассмотрим два варианта замены на JS и PHP.

Вариант первый на JS
Для пользовательской части делаем выбор категорий галочками в DLE
Открыть addnews.tpl и в самый вверх вставить

<script> 

$(function() {

var new_box = '', name_select = $('#entryform #category');

if(typeof name_select.attr('name')!=='undefined'){

$.each($('option', name_select),function (i,c) {

if(this.value!=0){

new_box += '<div style="width:200px;float: left;">'

+'<input type="checkbox" name="'+name_select.attr('name')+'" id="chk'+i+'" onclick="onCategoryChange(this);" value="'+this.value+'"'+(this.selected==true ? ' checked' : '')+'>'

+' <label for="chk'+i+'">'+this.text+'</label>'

+'</div>';}});    

name_select.after('<div class="categoryCheckbox">'+new_box+'</div>').remove();

function smartColumns() { 

$(".categoryCheckbox").css({ 'width' : "100%"});  

var colWrap = $(".categoryCheckbox").width();

var colNum = Math.floor(colWrap / 200);

var colFixed = Math.floor(colWrap / colNum);

$(".categoryCheckbox").css({ 'width' : colWrap}); 

$(".categoryCheckbox div").css({ 'width' : colFixed});}  

smartColumns();

$(window).resize(function(){smartColumns();}); 

}

});

</script>

Готово!

Для админ панели Выбор категорий галочками для
Открыть engine/skins/jаvascripts/application.js в самом низу вставить

$(function() {

var new_box = '', name_select = $('#addnews #category');

if(typeof name_select.attr('name')!=='undefined'){

$.each($('option', name_select),function (i,c) {

if(this.value!=0){

new_box += '<div style="width:200px;float: left;">'

+'<input type="checkbox" name="'+name_select.attr('name')+'" id="chk'+i+'" onclick="onCategoryChange(this);" value="'+this.value+'"'+(this.selected==true ? ' checked' : '')+'>'

+' <label for="chk'+i+'">'+this.text+'</label>'

+'</div>';}});    

name_select.after('<div class="categoryCheckbox">'+new_box+'</div>').remove();

function smartColumns() { 

$(".categoryCheckbox").css({ 'width' : "100%"});  

var colWrap = $(".categoryCheckbox").width();

var colNum = Math.floor(colWrap / 200);

var colFixed = Math.floor(colWrap / colNum);

$(".categoryCheckbox").css({ 'width' : colWrap}); 

$(".categoryCheckbox div").css({ 'width' : colFixed});}  

smartColumns();

$(window).resize(function(){smartColumns();}); 

}

});


Готово!

Вариант второй на PHP
Для пользовательской части выбор категорий галочками DLE
Открыть engine/modules/functuions.php найти

function CategoryNewsSelection
......
return $returnstring;
}


Заменить на

function CategoryNewsSelection($categoryid = 0, $parentid = 0, $nocat = TRUE, $sublevelmarker = '', $returnstring = '') {
    global $cat_info, $user_group, $member_id;
    
    $allow_list = explode( ',', $user_group[$member_id['user_group']]['cat_allow_addnews'] );
    $spec_list = explode( ',', $user_group[$member_id['user_group']]['cat_add'] );

    $root_category = array ();
    
    if( $parentid == 0 ) {
        if( $nocat ) $returnstring .= '';
    } else {
        $sublevelmarker .= '&nbsp;&nbsp;&nbsp;';
    }
    
    if( count( $cat_info ) ) {
        
        foreach ( $cat_info as $cats ) {
            if( $cats['parentid'] == $parentid ) $root_category[] = $cats['id'];
        }
        
        if( count( $root_category ) ) {
            foreach ( $root_category as $id ) {
                
                if( $allow_list[0] == "all" or in_array( $id, $allow_list ) ) {
                    
                    if( $spec_list[0] == "all" or in_array( $id, $spec_list ) ) $color = "black";
                    else $color = "red";

                    $returnstring .= $sublevelmarker . "<input id="catlist_".$id."" onchange="onCategoryChange(this.value)" name="catlist[]" type="checkbox" value="".$id."" ";
                    if( is_array( $categoryid ) ) {
                        foreach ( $categoryid as $element ) {
                            if( $element == $id ) $returnstring .= ' CHECKED ';
                        }
                    } elseif( $categoryid == $id ) $returnstring .= ' CHECKED ';
                    
                    $returnstring .= '/><label for="catlist_".$id."" style="color: {$color}">' . $cat_info[$id]['name'] . '</label><br />';
                }
                $returnstring = CategoryNewsSelection( $categoryid, $id, $nocat, $sublevelmarker, $returnstring );
            }
        }
    }
    return $returnstring;
}


Найти

$returnstring .= $sublevelmarker . "<input id="catlist_".$id."" onchange="onCategoryChange(this.value)" name="catlist[]" type="checkbox" value="".$id."" ";


Заменить на

$returnstring .= "<div style="float:left;width:200px;"><input id="catlist_".$id."" onchange="onCategoryChange(this.value)" name="catlist[]" type="checkbox" value="".$id."" ";


Найти

$returnstring .= '/><label for="catlist_".$id."" style="color: {$color}">' . $cat_info[$id]['name'] . '</label><br />';


Заменить на

$returnstring .= '/><label for="catlist_".$id."" style="color: {$color}">' . $cat_info[$id]['name'] . '</label></div>';


Открыть engine/modules/addnews.php найти

$tpl->set( '{category}', $cats );


Заменить на

$tpl->set( '{category}', $categories_list );


Готово!

Для админ панели
Рабочей версии я не нашел, чуть позже попробую прикрутить!

Версия DLE: Любаая проверен на DLE 10.4 в админке и в пользовательской чати. Всё отлично работает, спасибо автору :)
Автор JS версии: rocksmart
Автор PHP версии: ХЗ

Если категорий и подкатегорий много получается не очень, а если парочка подкатегорий, то очень даже удобно.

Внимание, если в профиле исчезли все закладки, то следует почистить Кеш браузера, после обновите страницу! Я поставил закладки в модальном окне!
Скачать другие у нас хаки для dle, как хак выбор категорий галочками

Vybor-kategoriy-galochkami-v-DLE.rar [25,33 Kb] (cкачиваний: 89)
27-06-2015, 10:07
Вернуться назад