Привет, читатель!
Сегодня я расскажу, как админке материала добавить все родительские категории автоматически, избежав надоедливых поисков и кликов мышкой. Ведь я уверен, Вы тоже не любите тратить на это время.
От слов к делу.
Решение представляет собой 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.