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


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

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

categories jquery

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

#1 fiction13

fiction13

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

*
Популярное сообщение!

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

 

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

 

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

 

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

  1. // FICTIONLABS ADD PARENT CATEGORIES START
  2.  
  3. // Get Category Level
  4.  
  5. function flGetCategoryLevel(text) {
  6. var level = text.split('.').length;
  7.  
  8. if (level == 0) {
  9. level = 1;
  10. }
  11.  
  12. return level;
  13. }
  14.  
  15. // Get Parent Categories By ID
  16.  
  17. function flGetParentCategories(id) {
  18.  
  19. var tree = [];
  20. var select = $('#categories');
  21. var prevLevel = currentLevel = 1;
  22. var parents = [];
  23. var idx = 0;
  24. var result = [];
  25.  
  26. // Get Categories Array
  27.  
  28. select.find('option').each(function(index, el) {
  29. currentLevel = flGetCategoryLevel($(el).text());
  30.  
  31. if (currentLevel > prevLevel) { // Child Category
  32. idx = index - 1; // Get Parent Option Index
  33. parents.push(select.find('option').eq(idx).attr('value')); // Get Parent Id
  34. } else if (currentLevel < prevLevel) { // Parent Category
  35. for (var i = parents.length; i >= currentLevel; i--) {
  36. parents.pop(); // Remove All IDs
  37. }
  38. }
  39.  
  40. var key = $(el).attr('value');
  41. var name = $(el).text().split('|_')[1] ? $(el).text().split('|_')[1] : $(el).text().split('|_')[0];
  42.  
  43. tree[key] = [];
  44. tree[key]['name'] = $.trim(name);
  45. tree[key]['level'] = flGetCategoryLevel($(el).text());
  46. tree[key]['parents'] = parents.join();
  47.  
  48. prevLevel = currentLevel; // Next Level
  49. });
  50.  
  51. result = tree[id]['parents'].split(',');
  52.  
  53. return result;
  54. }
  55.  
  56. // Change Select Function
  57.  
  58. function flChangeSelect(id) {
  59.  
  60. var parents = flGetParentCategories(id);
  61. var selectedItems = $('#categories').val();
  62. var result = $.merge(selectedItems, parents);
  63.  
  64. $('#categories').val(result).trigger('liszt:updated');
  65. }
  66.  
  67. // On Change Event
  68.  
  69. var valArray = ($('#categories').val()) ? $('#categories').val() : [];
  70.  
  71. $('#categories').on('change', function(event) {
  72. var val = $(this).val(),
  73. numVals = (val) ? val.length : 0,
  74. changes;
  75.  
  76. if (numVals != valArray.length) {
  77. var longerSet, shortSet;
  78. (numVals > valArray.length) ? longerSet = val : longerSet = valArray;
  79. (numVals > valArray.length) ? shortSet = valArray : shortSet = val;
  80. //create array of values that changed - either added or removed
  81. changes = $.grep(longerSet, function(n) {
  82. return $.inArray(n, shortSet) == -1;
  83. });
  84.  
  85. if (numVals > valArray.length) {
  86. flChangeSelect(changes);
  87. }
  88. }
  89.  
  90. valArray = ($(this).val()) ? $(this).val() : [];
  91.  
  92. });
  93.  
  94. // FICTIONLABS ADD PARENT CATEGORIES END

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

 

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

 

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

 

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

 

1.jpg

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

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

  • 5

#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

mr.varhola сказал(а) 26 Апр 2017 - 09:02:

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

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


  • 0





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

Click to return to top of page in style!