
Как сделать выбор категории с галочками для 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 .= ' ';
}
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, как хак выбор категорий галочками