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

Реклама
Реклама

Вопрос? Выбор категорий галочками — чекбокс

  • Автор темы Автор темы oranges
  • Дата начала Дата начала

oranges

Бывалый
Регистрация
15 Май 2016
Сообщения
169
Рейтинг реакций
24
Баллы
18
Возраст
42
1/3
Автор темы
Есть код js, который облегчает работу с выбором категорий. Не нужно листать целый список, просто появляется таблица, где нужные категории, подборки и т.д. проставляешь галочками. Невероятно полезный, у кого 50+ категорий, а про 100 вообще молчу: просто визуально прошелся глазками за 5 секунд проставил галочки и готова.

Screenshot.jpg

Есть 1 минус — категории все по id в разнобой. id33 id50 id3 и т.д.
Может кому удастся помочь и слегка поправить код? Нужно сделать так, чтоб высвечивающиеся категории в списке можно было редактировать, выставлять по собственному желанию по id. То бишь выставлять в таком порядке, в котором мне нужно.
К примеру: сгруппировать все категории и подборки к боевиками id15, id16, id45. Драмы к драмам и т.д. Это будет уже для полного удобства и идеально для работы с сайтом!

Открыть 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();});

}

});
 
Спасибо! Полезная штука.

Был вроде модуль, в ктором можно было групировать по спискам категории. Но он был кривой и током не работал.
Поищу, если найду выложу.
 
Попробовал данный плагин на 15.3, но что то вообще не чего не меняется, увы
 
Автор темы
Это не плагин. Просто скопируй и помести в самый низ engine/skins/jаvascripts/application.js
Да, так и сделал, вот скрин файла с кодом: Imgur: The magic of the Internet

А вот как на сайте выглядит: imgur.com

Кеш почистил и в браузере и в дле и даже кеширование в фастпанеле выключил
 
oranges А, так это работает только на админскую часть или на пользовательскую тоже?
 
Автор темы
MrPechenkO К сожалению только в админке.
 
Автор темы
Может кто сможет, доработает его?
1) Расставлять категории по нужному ид.
2) Как оказалось для парсера
3) Для белых тематик, чтоб у пользователей при добавлении такая же форма заполнения категорий была.
Если бесплатно нет желания помогать, может тогда платно хоть поможете?
 
Кто-то в кино проставляет категории сам?)
 
Heiz Я иногда)
 
Есть код js, который облегчает работу с выбором категорий. Не нужно листать целый список, просто появляется таблица, где нужные категории, подборки и т.д. проставляешь галочками. Невероятно полезный, у кого 50+ категорий, а про 100 вообще молчу: просто визуально прошелся глазками за 5 секунд проставил галочки и готова.

Посмотреть вложение 29590

Есть 1 минус — категории все по id в разнобой. id33 id50 id3 и т.д.
Может кому удастся помочь и слегка поправить код? Нужно сделать так, чтоб высвечивающиеся категории в списке можно было редактировать, выставлять по собственному желанию по id. То бишь выставлять в таком порядке, в котором мне нужно.
К примеру: сгруппировать все категории и подборки к боевиками id15, id16, id45. Драмы к драмам и т.д. Это будет уже для полного удобства и идеально для работы с сайтом!

Открыть 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();});

}

});

Вариант конечно не очень хорошо, но вроде заявленные требования выполняет. Может кто лучше предложит потом.

Итак код js убираем.
Чистим кэш браузера и дле.

Открываем engine/inc/addnews.php
находим:

Код:
$categories_list = CategoryNewsSelection( 0, 0 );
Перед :
Код:
</script>
ставим:
Код:
function smartColumns() {

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

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

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

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

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

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

smartColumns();

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

Далее после:
Код:
$categories_list = CategoryNewsSelection( 0, 0 );
ставим:

Код:
$array = ['1' => [11,4,3], '2' => [5,6,8], '3' => [7,1,2],];// Каждая новая подборка категорий '*' => [здесь ид категорий через запятую],
    $fg = '';
    $i = 1;
    preg_match_all('#value="(.*?)"#',$categories_list,$cats);
  
    foreach($array as $ir){
      
      
        foreach($ir as $sd){
          
            if(in_array($sd,$cats[1])){
              
                $fg .= "<input type=\"checkbox\" name='category[]' id='chk".$i."'onclick=\"onCategoryChange(this);\" value='".$sd."'>";
                $fg .= '<label for="chk'.$i.'" style="width:50%;max-width:75px;">&nbsp'.$cat_info[$sd]['name'].'</label>';
                if($sd == end($ir)){
                    $fg .= "<br/>";
                }
                $i += 1;
            }
        }
    }
Ниже находим:
Код:
<select data-placeholder="{$lang['addnews_cat_sel']}" title="{$lang['addnews_cat_sel']}" name="category[]"id="category" onchange="onCategoryChange(this)" $category_multiple style="width:100%;max-width:350px;">{$categories_list}</select><input type="hidden" name="category_custom_sort" id="category_custom_sort" value="">

После ставим:
Код:
<div class="categoryCheckbox">{$fg}</div>

Сохраняем файл и проверяем. Без ручного указания идишек категории не удалось найти решение, возможно кто выдаст более удачное решение.

Пример как выдает информацию :
Список категорий:
upload_2023-3-4_12-35-27.png

Как выглядит :
upload_2023-3-4_12-35-56.png
 
Последнее редактирование:
oranges А, так это работает только на админскую часть или на пользовательскую тоже?
Для вашего случая делаем так.
Открываем engine/modules/addnews.php
находим:
Код:
else $categories_list = CategoryNewsSelection( 0, 0 );
ниже ставим
Код:
            $array = ['1' => [11,4,3,12,13,8,2,1,14], '2' => [5,6], '3' => [7],];// Каждая новая подборка категорий '*' => [здесь ид категорий через запятую],
            $fg = '';
            $i = 1;
            preg_match_all('#value="(.*?)"#',$categories_list,$catse);
            
            foreach($array as $ir){
                
                
                foreach($ir as $sd){
                    
                    if(in_array($sd,$catse[1])){
                        
                        $fg .= "<input type=\"checkbox\" name='catlist[]' id='chk".$i."'onclick=\"onCategoryChange(this);\" value='".$sd."'>";
                        $fg .= '<label for="chk'.$i.'" style="width:50%;max-width:75px;">'.$cat_info[$sd]['name'].'</label>&nbsp';
                        if($sd == end($ir)){
                            $fg .= "<br/>";
                        }
                        $i += 1;
                    }
                }
            }
Далее находим
Код:
if( $config['allow_multi_category'] ) {
            
            $cats = "<select data-placeholder=\"{$lang['addnews_cat_sel']}\" name=\"catlist[]\" id=\"category\" onchange=\"onCategoryChange(this)\" style=\"width:350px;height:140px;\" multiple=\"multiple\">";
        
        } else {
            
            $cats = "<select data-placeholder=\"{$lang['addnews_cat_sel']}\" name=\"catlist[]\" id=\"category\" onchange=\"onCategoryChange(this)\" style=\"width:350px;\">";
        }
        
        $cats .= $categories_list;
        $cats .= "</select>";
Изменяем на:
Код:
if( $config['allow_multi_category'] ) {
            
            //$cats = "<select data-placeholder=\"{$lang['addnews_cat_sel']}\" name=\"catlist[]\" id=\"category\" onchange=\"onCategoryChange(this)\" style=\"width:350px;height:140px;\" multiple=\"multiple\">";
        
        } else {
            
            //$cats = "<select data-placeholder=\"{$lang['addnews_cat_sel']}\" name=\"catlist[]\" id=\"category\" onchange=\"onCategoryChange(this)\" style=\"width:350px;\">";
        }
        
        //$cats .= $categories_list;
        $cats .= "<div class=\"categoryCheckbox\">{$fg}</div>";

Далее находим :
Код:
        $script = "
<script>
после <script> ставим

Код:
function smartColumns() {

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

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

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

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

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

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

smartColumns();

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

В
Код:
$array =[
помещаем свои ид категорий в нужном порядке.
Чистим кэш дле и браузера пробуем.
 
Один огромный минут. Парсер кинопоиска откзываетя прописывать категории.
Попробуйте так.
В js файлах парсера pspvolt
найти такую функцию
Код:
function kinopoikcategory( categoryMINI ){
если конечно он ее уже не изменил на другую.
сразу после
Код:
function kinopoikcategory( categoryMINI ){
ниже ставим

Код:
var htmls = document.getElementsByTagName("html")[0].innerHTML;
    var matches = htmls.match(/id="chk(.*?)"/g);
    
    for (var i=0; i<categoryMINI.length; i++) {
        for (var j=0; j < matches.length; j++) {   
        if ($('#chk'+j).val() == categoryMINI[i]) {
               document.getElementById('chk'+j).checked = true;
               document.getElementById('chk'+j).setAttribute('checked', 'checked');
            }     
        }
    }
чистим кэш браузера и сайта и пробуем.
 
Автор темы
Вариант конечно не очень хорошо, но вроде заявленные требования выполняет. Может кто лучше предложит потом.

Итак код js убираем.
Чистим кэш браузера и дле.

Открываем engine/inc/addnews.php
находим:

Код:
$categories_list = CategoryNewsSelection( 0, 0 );
Перед :
Код:
</script>
ставим:
Код:
function smartColumns() {

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

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

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

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

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

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

smartColumns();

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

Далее после:
Код:
$categories_list = CategoryNewsSelection( 0, 0 );
ставим:

Код:
$array = ['1' => [11,4,3], '2' => [5,6,8], '3' => [7,1,2],];// Каждая новая подборка категорий '*' => [здесь ид категорий через запятую],
    $fg = '';
    $i = 1;
    preg_match_all('#value="(.*?)"#',$categories_list,$cats);
 
    foreach($array as $ir){
   
   
        foreach($ir as $sd){
       
            if(in_array($sd,$cats[1])){
           
                $fg .= "<input type=\"checkbox\" name='category[]' id='chk".$i."'onclick=\"onCategoryChange(this);\" value='".$sd."'>";
                $fg .= '<label for="chk'.$i.'" style="width:50%;max-width:75px;">&nbsp'.$cat_info[$sd]['name'].'</label>';
                if($sd == end($ir)){
                    $fg .= "<br/>";
                }
                $i += 1;
            }
        }
    }
Ниже находим:
Код:
<select data-placeholder="{$lang['addnews_cat_sel']}" title="{$lang['addnews_cat_sel']}" name="category[]"id="category" onchange="onCategoryChange(this)" $category_multiple style="width:100%;max-width:350px;">{$categories_list}</select><input type="hidden" name="category_custom_sort" id="category_custom_sort" value="">

После ставим:
Код:
<div class="categoryCheckbox">{$fg}</div>

Сохраняем файл и проверяем. Без ручного указания идишек категории не удалось найти решение, возможно кто выдаст более удачное решение.

Пример как выдает информацию :
Список категорий:
Посмотреть вложение 29607

Как выглядит :
Посмотреть вложение 29608

Сделал все по инструкции, 2 раза пробовал. Как добавлять или редактировать новость, выскакивает ошибка:
Код:
Parse error: syntax error, unexpected '(', expecting variable (T_VARIABLE) or '{' or '$' in /home/admin/web/сайт/public_html/engine/inc/addnews.php on line 444
Подскажи пожалуйста, что это за ошибка такая и как исправить?
 
Сделал все по инструкции, 2 раза пробовал. Как добавлять или редактировать новость, выскакивает ошибка:
Код:
Parse error: syntax error, unexpected '(', expecting variable (T_VARIABLE) or '{' or '$' in /home/admin/web/сайт/public_html/engine/inc/addnews.php on line 444
Подскажи пожалуйста, что это за ошибка такая и как исправить?
Скиньте свой addnews.php
 

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

Назад
Сверху