app/template/admin/Product/category.twig line 1

Open in your IDE?
  1. {% extends '@admin/default_frame.twig' %}
  2. {% set menus = ['product', 'class_category'] %}
  3. {% block title %}{{ 'admin.product.category_management'|trans }}{% endblock %}
  4. {% block sub_title %}{{ 'admin.product.product_management'|trans }}{% endblock %}
  5. {% form_theme form '@admin/Form/bootstrap_4_horizontal_layout.html.twig' %}
  6. {% block stylesheet %}
  7.     <link rel="stylesheet" href="{{ asset('/html/user_data/assets/css/fileupload/jquery.fileupload.css', 'admin') }}">
  8.     <link rel="stylesheet" href="{{ asset('/html/user_data/assets/css/fileupload/jquery.fileupload-ui.css', 'admin') }}">
  9.     <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
  10.     <style>
  11.         .c-directoryTree ul > li > ul li:not(:last-of-type) > label:before,
  12.         .c-directoryTree ul > li > ul li:last-of-type > label:before {
  13.             margin-right: 1.6em;
  14.         }
  15.     </style>
  16. {% endblock stylesheet %}
  17. {% block javascript %}
  18.     <!--<script src="{{ asset('/html/user_data/assets/js/vendor/jquery.ui/jquery.ui.core.min.js', 'admin') }}"></script>-->
  19.     <!--<script src="{{ asset('/html/user_data/assets/js/vendor/jquery.ui/jquery.ui.widget.min.js', 'admin') }}"></script>-->
  20.     <!--<script src="{{ asset('/html/user_data/assets/js/vendor/jquery.ui/jquery.ui.mouse.min.js', 'admin') }}"></script>-->
  21.     <!--<script src="{{ asset('/html/user_data/assets/js/vendor/jquery.ui/jquery.ui.sortable.min.js', 'admin') }}"></script>-->
  22.     <script src="{{ asset('/html/user_data/assets/js/vendor/jquery.ui/jquery.ui.widget.js', 'admin') }}"></script>
  23.     <script src="{{ asset('/html/user_data/assets/js/vendor/fileupload/jquery.iframe-transport.js', 'admin') }}"></script>
  24.     <script src="{{ asset('/html/user_data/assets/js/vendor/fileupload/jquery.fileupload.js', 'admin') }}"></script>
  25.     <script src="{{ asset('/html/user_data/assets/js/vendor/fileupload/jquery.fileupload-process.js', 'admin') }}"></script>
  26.     <script src="{{ asset('/html/user_data/assets/js/vendor/fileupload/jquery.fileupload-validate.js', 'admin') }}"></script>
  27.     <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
  28.     <script>
  29.         //var bootstrapTooltip = $.fn.tooltip.noConflict();
  30.         //if ($.fn.tooltip && $.fn.tooltip.noConflict) {
  31.           //  var bootstrapTooltip = $.fn.tooltip.noConflict();
  32.         //}
  33.     </script>
  34.     <script>
  35.         //$.fn.tooltip = bootstrapTooltip;
  36.         $(document).on('drop dragover', function(e) {
  37.             e.preventDefault();
  38.         });
  39.         $(function() {
  40.             // 初期表示時のsort noを保持.
  41.             var oldSortNos = [];
  42.             $('.sortable-item').each(function() {
  43.                 oldSortNos.push(this.dataset.sortNo);
  44.             });
  45.             oldSortNos.sort(function(a, b) {
  46.                 return a - b;
  47.             }).reverse();
  48.             // 並び替え後にsort noを更新
  49.             var updateSortNo = function() {
  50.                 var newSortNos = {};
  51.                 var i = 0;
  52.                 $('.sortable-item').each(function() {
  53.                     newSortNos[this.dataset.id] = oldSortNos[i];
  54.                     i++;
  55.                 });
  56.                 $.ajax({
  57.                     url: '{{ url('admin_product_category_sort_no_move') }}',
  58.                     type: 'POST',
  59.                     data: newSortNos
  60.                 }).always(function() {
  61.                     $(".modal-backdrop").remove();
  62.                 });
  63.             };
  64.             // 最初と最後の↑↓を再描画
  65.             var redrawDisableAllows = function() {
  66.                 var items = $('.sortable-item');
  67.                 items.find('a.action-up').removeClass('disabled');
  68.                 items.find('a.action-down').removeClass('disabled');
  69.                 items.first().find('a.action-up').addClass('disabled');
  70.                 items.last().find('a.action-down').addClass('disabled');
  71.             };
  72.             // オーバレイ後, 表示順の更新を行う
  73.             var moveSortNo = function() {
  74.                 $('body').append($('<div class="modal-backdrop show"></div>'));
  75.                 updateSortNo();
  76.                 redrawDisableAllows();
  77.             };
  78.             // Drag and Drop
  79.             $('.sortable-container').sortable({
  80.                 items: '> .sortable-item',
  81.                 cursor: 'move',
  82.                 update: function(e, ui) {
  83.                     moveSortNo();
  84.                 }
  85.             });
  86.             // Up
  87.             $('.sortable-item').on('click', 'a.action-up', function(e) {
  88.                 e.preventDefault();
  89.                 var current = $(this).parents("li");
  90.                 if (current.prev().hasClass('sortable-item')) {
  91.                     current.prev().before(current);
  92.                     moveSortNo();
  93.                 }
  94.             });
  95.             // Down
  96.             $('.sortable-item').on('click', 'a.action-down', function(e) {
  97.                 e.preventDefault();
  98.                 var current = $(this).parents("li");
  99.                 if (current.next().hasClass('sortable-item')) {
  100.                     current.next().after(current);
  101.                     moveSortNo();
  102.                 }
  103.             });
  104.             var groupItem = $('.list-group-item');
  105.             groupItem.on('click', 'a.action-edit', function(e) {
  106.                 e.preventDefault();
  107.                 var current = $(this).parents('li');
  108.                 current.find('.mode-view').addClass('d-none');
  109.                 current.find('.mode-edit').removeClass('d-none');
  110.             });
  111.             groupItem.on('click', 'button.action-edit-cancel', function(e) {
  112.                 e.preventDefault();
  113.                 var current = $(this).parents('li');
  114.                 current.find('[data-origin-value]').each(function(e) {
  115.                     $(this).val($(this).attr('data-origin-value'));
  116.                 });
  117.                 current.find('.mode-view').removeClass('d-none');
  118.                 current.find('.mode-edit').addClass('d-none');
  119.             });
  120.             groupItem.find('.is-invalid').each(function(e) {
  121.                 e.preventDefault();
  122.                 var current = $(this).parents("li");
  123.                 current.find('.mode-view').addClass('d-none');
  124.                 current.find('.mode-edit').removeClass('d-none');
  125.             });
  126.             // 削除モーダルのhrefとmessageの変更
  127.             $('#DeleteModal').on('shown.bs.modal', function(event) {
  128.                 var target = $(event.relatedTarget);
  129.                 // hrefの変更
  130.                 $(this).find('[data-method="delete"]').attr('href', target.data('url'));
  131.                 // messageの変更
  132.                 $(this).find('p.modal-message').text(target.data('message'));
  133.             });
  134.             var hideThumbnail = function() {
  135.                 if ($('#thumb div').length > 0) {
  136.                     $('#icon_no_image').css('display', 'none');
  137.                 } else {
  138.                     $('#icon_no_image').css('display', '');
  139.                 }
  140.             };
  141.             var proto_img = '<div class="c-form__fileUploadThumbnail" style="background-image:url(\'__path__\');">' +
  142.                 '<a class="delete-image"><i class="fa fa-times" aria-hidden="true"></i></a>' +
  143.                 '</div>';
  144.             var category_image = $('#{{ form.category_image.vars.id }}').val();
  145.             if (category_image != '') {
  146.                 var filename = $('#{{ form.category_image.vars.id }}').val();
  147.                 {# if (category_image == '{{ oldCategoryImage }}') { #}
  148.                 var path = '{{ asset('', 'save_image') }}' + filename;
  149.                 //} else {
  150.                 {# var path = '{{ asset('', 'temp_image') }}' + filename; #}
  151.                 //}
  152.                 var $img = $(proto_img.replace(/__path__/g, path));
  153.                 $('#{{ form.category_image.vars.id }}').val(filename);
  154.                 $('#thumb').append($img);
  155.                 hideThumbnail();
  156.             }
  157.             hideThumbnail();
  158.             $('.file-upload').fileupload({
  159.                 url: "{{ url('admin_product_category_image_add') }}",
  160.                 type: 'post',
  161.                 dataType: 'json',
  162.                 dropZone: $('#upload-zone'),
  163.                 done: function(e, data) {
  164.                     $('.progress', $(this).parent()).hide();
  165.                     var path = '{{ asset('', 'temp_image') }}/' + data.result.filename;
  166.                     var $img = $(proto_img.replace(/__path__/g, path));
  167.                     $('.category-image', $(this).parent()).val(data.result.filename);
  168.                     $('.upload-image', $(this).parent()).append($img);
  169.                     $('img', $(this).parent()).remove();
  170.                     hideThumbnail();
  171.                 },
  172.                 fail: function(e, data) {
  173.                     alert('{{ 'admin.common.upload_error'|trans }}');
  174.                 },
  175.                 always: function(e, data) {
  176.                     $('.progress').hide();
  177.                     $('.progress .progress-bar').width('0%');
  178.                 },
  179.                 start: function(e, data) {
  180.                     if ($('.c-form__fileUploadThumbnail').length >= 1) {
  181.                         $.each($('.delete-image'), function(index, delete_image) {
  182.                             delete_image.click();
  183.                         });
  184.                     }
  185.                     $('.progress', $(this).parent()).show();
  186.                     $('#thumb', $(this).parent()).find('div').remove();
  187.                     $('#{{ form.category_image.vars.id }}').val('');
  188.                 },
  189.                 acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
  190.                 maxFileSize: 10000000,
  191.                 maxNumberOfFiles: 1,
  192.                 progressall: function(e, data) {
  193.                     var progress = parseInt(data.loaded / data.total * 100, 10);
  194.                     $('.progress .progress-bar', $(this).parent()).css(
  195.                         'width',
  196.                         progress + '%'
  197.                     );
  198.                 },
  199.                 processalways: function(e, data) {
  200.                     if (data.files.error) {
  201.                         alert("{{ 'admin.common.upload_error'|trans }}");
  202.                     }
  203.                 }
  204.             });
  205.             $('#thumb').on('click', '.delete-image', function() {
  206.                 $('#{{ form.category_image.vars.id }}').val('');
  207.                 var thumbnail = $(this).parents('div.c-form__fileUploadThumbnail');
  208.                 $(thumbnail).remove();
  209.                 hideThumbnail();
  210.             });
  211.             $(document).on('click', '.delete-image', function() {
  212.                 var thumbnail = $(this).parents('div.c-form__fileUploadThumbnail');
  213.                 $(thumbnail).remove();
  214.                 $(this).parent().find('img').remove();
  215.                 $(this).parent().find('.category-image').val('');
  216.                 $(this).hide();
  217.             });
  218.         });
  219.     </script>
  220. {% endblock %}
  221. {% block main %}
  222.     <div class="c-outsideBlock">
  223.         <div class="c-outsideBlock__contents mb-2">
  224.             <div class="row">
  225.                 <div class="col-6">
  226.                     <nav aria-label="breadcrumb" role="navigation">
  227.                         <ol class="breadcrumb mb-2 p-0">
  228.                             <li class="breadcrumb-item">
  229.                                 <a href="{{ url('admin_product_category') }}">
  230.                                     {{ 'admin.product.category_all'|trans }}
  231.                                 </a>
  232.                             </li>
  233.                             {% for ParentCategory in TargetCategory.path %}
  234.                                 {% if ParentCategory.id is not null %}
  235.                                     <li class="breadcrumb-item active" aria-current="page">
  236.                                         <a href="{{ url('admin_product_category_show', { parent_id : ParentCategory.id }) }}">
  237.                                             {{ ParentCategory.name }}
  238.                                         </a>
  239.                                     </li>
  240.                                 {% endif %}
  241.                             {% endfor %}
  242.                         </ol>
  243.                     </nav>
  244.                 </div>
  245.                 <div class="col-6 text-right">
  246.                     <div class="btn-group" role="group">
  247.                         <a class="btn btn-ec-regular" href="{{ url('admin_product_category_export') }}">
  248.                             <i class="fa fa-cloud-download mr-1 text-secondary"></i>
  249.                             <span>{{ 'admin.common.csv_download'|trans }}</span>
  250.                         </a>
  251.                         <a class="btn btn-ec-regular" href="{{ url('admin_setting_shop_csv', { id : constant('\\Eccube\\Entity\\Master\\CsvType::CSV_TYPE_CATEGORY') }) }}">
  252.                             <i class="fa fa-cog mr-1 text-secondary"></i>
  253.                             <span>{{ 'admin.setting.shop.csv_setting'|trans }}</span>
  254.                         </a>
  255.                     </div>
  256.                 </div>
  257.             </div>
  258.         </div>
  259.     </div>
  260.     <div class="c-contentsArea__cols">
  261.         <div class="c-contentsArea__primaryCol">
  262.             <div id="ex-primaryCol" class="c-primaryCol">
  263.                 <div class="card rounded border-0 mb-4">
  264.                     <div class="card-body p-0">
  265.                         <div class="card rounded border-0">
  266.                             <ul class="list-group list-group-flush sortable-container">
  267.                                 <li class="list-group-item">
  268.                                     <form role="form" name="form1" id="form1" method="post"
  269.                                           action="{% if TargetCategory.id %}{{ path('admin_product_category_edit', {id: TargetCategory.id}) }}{% elseif Parent %}{{ url('admin_product_category_show', {'parent_id': Parent.id}) }}{% else %}{{ url('admin_product_category') }}{% endif %}"
  270.                                           enctype="multipart/form-data">
  271.                                         {% if TargetCategory.hierarchy <= eccube_config.eccube_category_nest_level %}
  272.                                             {{ form_widget(form._token) }}
  273.                                             <div class="form-row mb-3">
  274.                                                 <div class="col-auto align-self-center mr-3"><span>カテゴリ名</span></div>
  275.                                                 <div class="col-7">
  276.                                                     {{ form_widget(form.name) }}
  277.                                                     {{ form_errors(form.name) }}
  278.                                                 </div>
  279.                                                 <div class="col-12 align-self-center"><span>詳細</span></div>
  280.                                                 <div class="col-12">
  281.                                                     {{ form_widget(form.free_area) }}
  282.                                                     {{ form_errors(form.free_area) }}
  283.                                                 </div>
  284.                                                 <div class="col-12 align-self-center"><span>カテゴリ画像</span></div>
  285.                                                 <div class="col-12 mb-2">
  286.                                                     <div class="progress" style="display: none;">
  287.                                                         <div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
  288.                                                     </div>
  289.                                                     <div id="thumb" class="c-form__fileUploadThumbnails clearfix"></div>
  290.                                                     <div class="upload-image"></div>
  291.                                                     {{ form_widget(form.category_image, { attr : {'class': 'category-image', style : 'display:none;' } }) }}
  292.                                                     {{ form_widget(form.category_file, { attr : {'class': 'file-upload', 'class': 'file-upload', accept : 'image/*', style : 'display:none;' } }) }}
  293.                                                     {{ form_errors(form.category_image) }}
  294.                                                     <a class="btn btn-ec-regular" onclick="$('#admin_category_category_file').click()">
  295.                                                         {{ 'admin.common.file_select'|trans }}
  296.                                                     </a>
  297.                                                 </div>
  298.                                                 <div class="col-auto">
  299.                                                     <button class="btn btn-ec-regular" type="submit">
  300.                                                         {{ 'admin.common.create__new'|trans }}
  301.                                                     </button>
  302.                                                 </div>
  303.                                             </div>
  304.                                             {# エンティティ拡張の自動出力 #}
  305.                                             {% for f in form if f.vars.eccube_form_options.auto_render %}
  306.                                                 {% if f.vars.eccube_form_options.form_theme %}
  307.                                                     {% form_theme f f.vars.eccube_form_options.form_theme %}
  308.                                                     {{ form_row(f) }}
  309.                                                 {% else %}
  310.                                                     <div class="form-row mb-3">
  311.                                                         <div class="col-3">
  312.                                                             <span>{{ f.vars.label|trans }}</span>
  313.                                                         </div>
  314.                                                         <div class="col">
  315.                                                             {{ form_widget(f) }}
  316.                                                             {{ form_errors(f) }}
  317.                                                         </div>
  318.                                                     </div>
  319.                                                 {% endif %}
  320.                                             {% endfor %}
  321.                                         {% endif %}
  322.                                     </form>
  323.                                 </li>
  324.                                 
  325.                                 
  326.                                 {% for Category in Categories %}
  327.                                     {% if Category.id == 630 or Category.id == 722 or Category.id == 730 or Category.id == 742 %}
  328.                                         <li class="list-group-item">
  329.                                             <p class="alert alert-warning">
  330.                                             ※レアリティの追加や並び替えを行う場合は、システム改修が必要となります。作業をご希望の際は、必ず事前にご連絡くださいますようお願いいたします。
  331.                                             </p>
  332.                                         </li>
  333.                                     {% endif %}
  334.                                 {% endfor %}
  335.                                 
  336.                                 <li class="list-group-item">
  337.                                     <div class="row">
  338.                                         <div class="col-auto"><strong>&nbsp;</strong></div>
  339.                                         <div class="col-auto"><strong>{{ 'admin.common.id'|trans }}</strong></div>
  340.                                         <div class="col-2"><strong>{{ 'admin.product.category'|trans }}</strong></div>
  341.                                     </div>
  342.                                 </li>
  343.                                 {% if Categories|length > 0 %}
  344.                                     {% for Category in Categories %}
  345.                                         <li id="ex-category-{{ Category.id }}" class="list-group-item sortable-item" data-id="{{ Category.id }}" data-sort-no="{{ Category.sort_no }}">
  346.                                             {% if Category.id != TargetCategory.id %}
  347.                                                 <div class="row justify-content-around mode-view">
  348.                                                     <div class="col-auto d-flex align-items-center"><i class="fa fa-bars text-ec-gray"></i></div>
  349.                                                     <div class="col-auto d-flex align-items-center">{{ Category.id }}</div>
  350.                                                     <div class="col d-flex align-items-center">
  351.                                                         <a href="{{ url('admin_product_category_show',  { parent_id : Category.id }) }}">{{ Category.name }}</a>
  352.                                                         {% if Category.category_image %}
  353.                                                             <div class="ml-5">
  354.                                                                 <img src="{{ asset(Category.category_image, 'save_image') }}" width="50px">
  355.                                                             </div>
  356.                                                         {% endif %}
  357.                                                     </div>
  358.                                                     <div class="col-auto text-right">
  359.                                                         <a class="btn btn-ec-actionIcon action-up mr-2 {% if loop.first %} disabled {% endif %}" href=""
  360.                                                            data-tooltip="true" data-placement="top"
  361.                                                            title="{{ 'admin.common.up'|trans }}">
  362.                                                             <i class="fa fa-arrow-up fa-lg text-secondary"></i>
  363.                                                         </a>
  364.                                                         <a class="btn btn-ec-actionIcon action-down mr-2 {% if loop.last %} disabled {% endif %}" href=""
  365.                                                            data-tooltip="true" data-placement="top"
  366.                                                            title="{{ 'admin.common.down'|trans }}">
  367.                                                             <i class="fa fa-arrow-down fa-lg text-secondary"></i>
  368.                                                         </a>
  369.                                                         <a class="btn btn-ec-actionIcon mr-2 action-edit"
  370.                                                            href="{{ url('admin_product_category_edit', {id: Category.id}) }}"
  371.                                                            data-tooltip="true" data-placement="top"
  372.                                                            title="{{ 'admin.common.edit'|trans }}">
  373.                                                             <i class="fa fa-pencil fa-lg text-secondary"></i>
  374.                                                         </a>
  375.                                                         <div class="d-inline-block mr-2" data-tooltip="true" data-placement="top"
  376.                                                              title="{{ 'admin.common.delete'|trans }}">
  377.                                                             <a class="btn btn-ec-actionIcon{% if Category.Children|length > 0 or Category.hasProductCategories %} disabled{% endif %}"
  378.                                                                data-bs-toggle="modal" data-bs-target="#DeleteModal"
  379.                                                                data-url="{{ url('admin_product_category_delete', {id: Category.id}) }}"
  380.                                                                data-message="{{ 'admin.common.delete_modal__message'|trans({ "%name%" : Category.name }) }}">
  381.                                                                 <i class="fa fa-close fa-lg text-secondary"></i>
  382.                                                             </a>
  383.                                                         </div>
  384.                                                         <!--<div class="d-inline-block mr-2" data-tooltip="true" data-placement="top"
  385.                                                             title="削除">
  386.                                                             <a class="btn btn-ec-actionIcon"
  387.                                                             data-bs-toggle="modal" data-bs-target="#DeleteModal"
  388.                                                             data-url="https://tcg-mana.com/management/product/category/6/delete"
  389.                                                             data-message="この操作はあとから取り消すことができません。「フルーツ」を削除してよろしいですか?">
  390.                                                                 <i class="fa fa-close fa-lg text-secondary"></i>
  391.                                                             </a>
  392.                                                         </div>-->
  393.                                                     </div>
  394.                                                 </div>
  395.                                                 <form class="form-row d-none mode-edit" method="POST" action="{{ (Parent and Parent.id) ? url('admin_product_category_show', {'parent_id': Parent.id}) : url('admin_product_category') }}" enctype="multipart/form-data">
  396.                                                     {{ form_widget(forms[Category.id]._token) }}
  397.                                                     <div class="col-auto align-self-center mr-3"><span>カテゴリ名</span></div>
  398.                                                     <div class="col-7">
  399.                                                         {{ form_widget(forms[Category.id].name, {'attr': {'data-origin-value': forms[Category.id].name.vars.value}}) }}
  400.                                                         {{ form_errors(forms[Category.id].name) }}
  401.                                                     </div>
  402.                                                     <div class="col-12 align-self-center"><span>詳細</span></div>
  403.                                                     <div class="col-12">
  404.                                                         {{ form_widget(forms[Category.id].free_area, {'attr': {'data-origin-value': forms[Category.id].free_area.vars.value}}) }}
  405.                                                         {{ form_errors(forms[Category.id].free_area) }}
  406.                                                     </div>
  407.                                                     <div class="col-12 align-self-center"><span>カテゴリ画像</span></div>
  408.                                                     <div class="col-12 mb-2">
  409.                                                         <div class="progress" style="display: none;">
  410.                                                             <div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
  411.                                                         </div>
  412.                                                         <div class="upload-image"></div>
  413.                                                         {% if forms[Category.id].category_image.vars.value %}
  414.                                                             <img src="{{ asset(forms[Category.id].category_image.vars.value, 'save_image') }}" width="150px">
  415.                                                         {% endif %}
  416.                                                         {{ form_widget(forms[Category.id].category_image, {'attr': {'class': 'category-image', 'data-origin-value': forms[Category.id].category_image.vars.value}}) }}
  417.                                                         {{ form_errors(forms[Category.id].category_image) }}
  418.                                                         {{ form_widget(forms[Category.id].category_file, { attr : { 'class': 'file-upload', accept : 'image/*', style : 'display:none;' } }) }}
  419.                                                         <a class="btn btn-ec-regular mr-2" onclick="$('#{{ forms[Category.id].category_file.vars.id }}').click()">
  420.                                                             {{ 'admin.common.file_select'|trans }}
  421.                                                         </a>
  422.                                                         <a class="btn btn-ec-regular mr-2 delete-image" {% if not forms[Category.id].category_image.vars.value %}style="display: none"{% endif %}>
  423.                                                             削除
  424.                                                         </a>
  425.                                                     </div>
  426.                                                     <div class="col-auto align-items-center">
  427.                                                         <button class="btn btn-ec-conversion" type="submit">{{ 'admin.common.decision'|trans }}</button>
  428.                                                     </div>
  429.                                                     <div class="col-auto align-items-center">
  430.                                                         <button class="btn btn-ec-sub action-edit-cancel" type="button">{{ 'admin.common.cancel'|trans }}</button>
  431.                                                     </div>
  432.                                                     {# エンティティ拡張の自動出力 #}
  433.                                                     {% for f in forms[Category.id] if f.vars.eccube_form_options.auto_render %}
  434.                                                         <div class="col-auto align-items-center" style="width:90%; padding-top: 10px;">
  435.                                                             <div class="row">
  436.                                                                 <div class="col-3">
  437.                                                                     <span>{{ f.vars.label|trans }}</span>
  438.                                                                 </div>
  439.                                                                 <div class="col-9">
  440.                                                                     {{ form_widget(f) }}
  441.                                                                     {{ form_errors(f) }}
  442.                                                                 </div>
  443.                                                             </div>
  444.                                                         </div>
  445.                                                     {% endfor %}
  446.                                                 </form>
  447.                                             {% endif %}
  448.                                         </li>
  449.                                     {% endfor %}
  450.                                 {% endif %}
  451.                             </ul>
  452.                             <!-- 削除モーダル -->
  453.                             <div class="modal fade" id="DeleteModal" tabindex="-1" role="dialog"
  454.                                  aria-labelledby="DeleteModal" aria-hidden="true">
  455.                                 <div class="modal-dialog" role="document">
  456.                                     <div class="modal-content">
  457.                                         <div class="modal-header">
  458.                                             <h5 class="modal-title font-weight-bold">
  459.                                                 {{ 'admin.common.delete_modal__title'|trans }}
  460.                                             </h5>
  461.                                             <button class="close" type="button" data-bs-dismiss="modal" aria-label="Close">
  462.                                                 <span aria-hidden="true">×</span>
  463.                                             </button>
  464.                                         </div>
  465.                                         <div class="modal-body text-left">
  466.                                             <p class="text-left modal-message"><!-- jsでメッセージを挿入 --></p>
  467.                                         </div>
  468.                                         <div class="modal-footer">
  469.                                             <button class="btn btn-ec-sub" type="button" data-bs-dismiss="modal">
  470.                                                 {{ 'admin.common.cancel'|trans }}
  471.                                             </button>
  472.                                             <a class="btn btn-ec-delete" href="#" {{ csrf_token_for_anchor() }}
  473.                                                data-method="delete" data-confirm="false">
  474.                                                 {{ 'admin.common.delete'|trans }}
  475.                                             </a>
  476.                                         </div>
  477.                                     </div>
  478.                                 </div>
  479.                             </div>
  480.                         </div>
  481.                     </div>
  482.                 </div>
  483.                 <p>{{ 'admin.common.drag_and_drop_description'|trans }}</p>
  484.             </div>
  485.         </div>
  486.         {% macro tree(Category, TargetId, level, Ids) %}
  487.             {% import _self as selfMacro %}
  488.             {% set level = level + 1 %}
  489.             <li>
  490.                 <label {% if (Category.children|length > 0) and (Category.id not in Ids) %}class="collapsed"
  491.                        {% endif %}data-toggle="collapse"
  492.                        href="#directory_category{{ Category.id }}"
  493.                        aria-expanded="{% if Category.id in Ids %}true{% endif %}"
  494.                        aria-controls="directory_category{{ Category.id }}"></label>
  495.                 <span>
  496.                     <a href="{{ url('admin_product_category_show', { parent_id : Category.id }) }}"{% if (Category.id == TargetId) %} class="font-weight-bold"{% endif %}>{{ Category.name }}
  497.                         ({{ Category.children|length }})</a></span>
  498.                 {% if Category.children|length > 0 %}
  499.                     <ul class="collapse list-unstyled {% if Category.id in Ids %}show{% endif %}"
  500.                         id="directory_category{{ Category.id }}">
  501.                         {% for ChildCategory in Category.children %}
  502.                             {{ selfMacro.tree(ChildCategory, TargetId, level, Ids) }}
  503.                         {% endfor %}
  504.                     </ul>
  505.                 {% endif %}
  506.             </li>
  507.         {% endmacro %}
  508.         <div class="c-contentsArea__secondaryCol">
  509.             <div id="ex-secondaryCol" class="c-secondaryCol">
  510.                 <div class="card rounded border-0 mb-4">
  511.                     <div class="card-header">
  512.                         <span class="card-title"><a href="{{ url('admin_product_category') }}">{{ 'admin.product.category_all'|trans }}</a></span>
  513.                     </div>
  514.                     <div class="card-body">
  515.                         <div class="c-directoryTree mb-3">
  516.                             {% import _self as renderMacro %}
  517.                             {% for TopCategory in TopCategories %}
  518.                                 <ul class="list-unstyled">
  519.                                     {{ renderMacro.tree(TopCategory, TargetCategory.Parent.id | default(null), 0, Ids) }}
  520.                                 </ul>
  521.                             {% endfor %}
  522.                         </div>
  523.                     </div>
  524.                 </div>
  525.             </div>
  526.         </div>
  527.     </div>
  528. {% endblock %}