Перейти к содержимому


Фотография
- - - - -

Автоматическое добавление всех родительских категорий в материале

categories jquery

Сообщений в теме: 3

#1 fiction13

fiction13

Отправлено 14 March 2017 - 11:32

Привет, читатель!

 

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

 

От слов к делу.

 

Решение представляет собой JS код, который необходимо добавить в файл, который подключается в админке. Работу кода я описывать не буду, так как думаю, что если Вы хоть немного понимаете, то разберетесь. А если не понимаете, оно Вам и не нужно, ага?

// FICTIONLABS ADD PARENT CATEGORIES START

// Get Category Level 

function flGetCategoryLevel(text) {
    var level = text.split('.').length;

    if (level == 0) {
        level = 1;
    }

    return level;
}

// Get Parent Categories By ID

function flGetParentCategories(id) {

    var tree      = [];
    var select    = $('#categories');
    var prevLevel = currentLevel = 1;
    var parents   = [];
    var idx       = 0;
    var result    = [];

    // Get Categories Array

    select.find('option').each(function(index, el) {
        
        currentLevel = flGetCategoryLevel($(el).text());

        if (currentLevel > prevLevel) { // Child Category
            idx = index - 1; // Get Parent Option Index
            parents.push(select.find('option').eq(idx).attr('value')); // Get Parent Id
        } else if (currentLevel < prevLevel) { // Parent Category
            for (var i = parents.length; i >= currentLevel; i--) {
                parents.pop(); // Remove All IDs
            }
        }

        var key = $(el).attr('value');
        var name = $(el).text().split('|_')[1] ? $(el).text().split('|_')[1] : $(el).text().split('|_')[0];

        tree[key]               = [];
        tree[key]['name']       = $.trim(name);
        tree[key]['level']      = flGetCategoryLevel($(el).text());
        tree[key]['parents']    = parents.join();

        prevLevel = currentLevel; // Next Level
    });

    result = tree[id]['parents'].split(',');

    return result;
}

// Change Select Function

function flChangeSelect(id) {

    var parents         = flGetParentCategories(id);
    var selectedItems   = $('#categories').val();
    var result          = $.merge(selectedItems, parents);

    $('#categories').val(result).trigger('liszt:updated');
}

// On Change Event

var valArray = ($('#categories').val()) ? $('#categories').val() : [];

$('#categories').on('change', function(event) {
    var val = $(this).val(),
        numVals = (val) ? val.length : 0,
        changes;

    if (numVals != valArray.length) {
        var longerSet, shortSet;
        (numVals > valArray.length) ? longerSet = val : longerSet = valArray;
        (numVals > valArray.length) ? shortSet = valArray : shortSet = val;
        //create array of values that changed - either added or removed
        changes = $.grep(longerSet, function(n) {
            return $.inArray(n, shortSet) == -1;
        });

        if (numVals > valArray.length) {
            flChangeSelect(changes);
        }
        
    }

    valArray = ($(this).val()) ? $(this).val() : [];

});

// FICTIONLABS ADD PARENT CATEGORIES END

Например, это можно сделать, добавив этот код в файл /media/zoo/applications/jbuniversal/assets/js/back-end.js

 

Уже измененный файл я прикрепил отдельным сообщением для самых ленивых.

 

Все, теперь при добавлении любой дочерней категории в список категорий попадут и все ее родители.

 

Код рожден в муках, при финансовой поддержке happy home.

 

Прикрепленный файл  1.jpg   68.97К   0 Количество загрузок:

Прикрепленные файлы

  • Прикрепленный файл  back-end.js   4.96К   9 Количество загрузок:

  • 4

#2 happy home

happy home

Отправлено 15 March 2017 - 01:31

Здравствуйте!

 

Да, спасибо огромное Дмитрию за работу!

 

Обратившись к нему однажды, теперь, как только появляется необходимость в нестандартном решении задачи - сразу вспоминаем Дмитрия))

Рецепт этой ЗАВИСИМОСТИ прост:

1. срок исполнения и цена - МИНИМАЛЬНЫЕ!

2. качество работы  - МАКСИМАЛЬНОЕ!

Тут главное не перепутать ингредиенты))))))))

 

Ну, и конечно же, основной ингредиент - это высокий ПРОФЕССИОНАЛИЗМ!


Сообщение отредактировал happy home: 15 March 2017 - 02:08

  • 2

#3 mr.varhola

mr.varhola

Отправлено 26 April 2017 - 10:02

Здравствуйте!

Подксажите, а при наполнении магазнина с помощью импорта с указанием в *.csv для материалов только конечной категории это решение также подойдет, добавятся все родительские категории автоматом?


  • 0

#4 fiction13

fiction13

Отправлено 26 April 2017 - 15:25

с помощью импорта
 

Нет конечно. Для этого нужно другое решение.


  • 0





Темы с аналогичным тегами categories, jquery

Click to return to top of page in style!