exception |
Twig\Error\RuntimeError {#103490
-lineno: 951
-name: "@admin/Product/product.twig"
-rawMessage: "Key "price" for array with keys "w, d, h, m, maker_price, sale, c, ct" does not exist."
-sourcePath: "/home/xs538259/exterior-plus.jp/public_html/app/template/admin/Product/product.twig"
-sourceCode: """
{#\n
This file is part of EC-CUBE\n
\n
Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.\n
\n
http://www.ec-cube.co.jp/\n
\n
For the full copyright and license information, please view the LICENSE\n
file that was distributed with this source code.\n
#}\n
{% extends '@admin/default_frame.twig' %}\n
\n
{% set menus = ['product', 'product_edit'] %}\n
\n
{% block title %}{{ 'admin.product.product_registration'|trans }}{% endblock %}\n
{% block sub_title %}{{ 'admin.product.product_management'|trans }}{% endblock %}\n
\n
{% form_theme form '@admin/Form/bootstrap_4_horizontal_layout.html.twig' %}\n
\n
{% block javascript %}\n
<script>\n
$(document).on('drop dragover', function(e) {\n
e.preventDefault();\n
});\n
\n
$(function() {\n
{% if has_class == false %}\n
if ($("#{{ form.class.stock_unlimited.vars.id }}").prop("checked")) {\n
$("#{{ form.class.stock.vars.id }}").attr("disabled", "disabled").val('');\n
} else {\n
$("#{{ form.class.stock.vars.id }}").removeAttr("disabled");\n
}\n
$("#{{ form.class.stock_unlimited.vars.id }}").on("click change", function() {\n
if ($(this).prop("checked")) {\n
$("#{{ form.class.stock.vars.id }}").attr("disabled", "disabled").val('');\n
} else {\n
$("#{{ form.class.stock.vars.id }}").removeAttr("disabled");\n
}\n
});\n
{% endif %}\n
\n
// ファイルアップロード\n
// see https://pqina.nl/filepond/\n
var inputFileElement = document.querySelector('input[type=file]');\n
{% if eccube_config.locale == 'ja' or eccube_config.locale == 'en' %}\n
FilePond.setOptions(FilePondLocale_{{ eccube_config.locale }});\n
{% endif %}\n
FilePond.setOptions({\n
server: {\n
process: {\n
url: '{{ path('admin_product_image_process') }}',\n
headers: {\n
'ECCUBE-CSRF-TOKEN': $('meta[name="eccube-csrf-token"]').attr('content'),\n
'X-Requested-With': 'XMLHttpRequest'\n
}\n
},\n
load: {\n
url: '{{ path('admin_product_image_load') }}?source=',\n
headers: {\n
'X-Requested-With': 'XMLHttpRequest'\n
}\n
},\n
revert: {\n
url: '{{ path('admin_product_image_revert') }}',\n
headers: {\n
'ECCUBE-CSRF-TOKEN': $('meta[name="eccube-csrf-token"]').attr('content'),\n
'X-Requested-With': 'XMLHttpRequest'\n
}\n
}\n
}\n
});\n
var pond = FilePond.create(inputFileElement, {\n
allowFileTypeValidation: true,\n
acceptedFileTypes: [\n
'image/gif',\n
'image/png',\n
'image/jpeg'\n
],\n
allowFileSizeValidation: true,\n
maxFileSize: 10000000,\n
maxFiles: 10,\n
allowBrowse: true,\n
allowDrop: true,\n
allowReorder: true,\n
labelIdle: '<i class="fa fa-cloud-upload fa-3x text-ec-lightGray mx-3 align-middle" aria-hidden="true" style="font-size: 40px"></i>{{ 'admin.common.drag_and_drop_image_description'|trans }}<span class="filepond--label-action">{{ 'admin.common.file_select'|trans }}</span>',\n
styleItemPanelAspectRatio: 0.5625,\n
// 保存されている画像のロード\n
files: [\n
{% for image in form.images %}\n
{\n
source: '{{ image.vars.value }}',\n
options: {\n
type: 'local'\n
}\n
},\n
{% endfor %}\n
// 追加してすぐの画像のロード. バリデーションエラーの場合など.\n
{% for add_image in form.add_images %}\n
{\n
source: '{{ add_image.vars.value }}',\n
options: {\n
type: 'local'\n
}\n
},\n
{% endfor %}\n
]\n
});\n
// 画像が追加されたら add_images にファイル名を追加する\n
var proto_add = '{{ form_widget(form.add_images.vars.prototype) }}';\n
pond.on('processfile', function(error, file) {\n
if (error) {\n
console.log(error);\n
} else {\n
$('#upload-zone').append(\n
$(proto_add.replace(/__name__/g, file.id))\n
.val(file.serverId)\n
.addClass('add_images')\n
);\n
}\n
});\n
// 画像が削除されたら delete_images にファイル名を追加する\n
var proto_del = '{{ form_widget(form.delete_images.vars.prototype) }}';\n
pond.on('removefile', function(error, file) {\n
if (error) {\n
console.log(error);\n
} else {\n
// file.serverId にはアップロードしたファイル名が格納される.\n
if (file.serverId) {\n
$('#upload-zone').append(\n
$(proto_del.replace(/__name__/g, file.id))\n
.val(file.serverId)\n
.addClass('del_images')\n
);\n
}\n
// 追加してすぐ削除した画像があれば削除する\n
$('#upload-zone').find('#admin_product_add_images_' + file.id).remove(); // 追加してすぐ削除した画像\n
$('#upload-zone').find('.add_images[value="' + file.filename + '"]').remove(); // 追加後, バリデーションエラーが発生した後に削除した画像\n
}\n
});\n
pond.on('initfile', function() {\n
$('#product_image_error').hide();\n
});\n
pond.on('error', function(error, file) {\n
var message = '{{ 'admin.common.upload_error'|trans }}';\n
if (error.main !== undefined) {\n
message = `${error.main}: ${error.sub}`;\n
}\n
$('#product_image_error')\n
.show()\n
.find('.form-error-message').text(message);\n
\n
// エラーメッセージが表示されてからプレビューエリアのエラーメッセージを非表示にする\n
setTimeout(function() {\n
$('.filepond--file-status').hide();\n
}, 300);\n
});\n
\n
// バリデーションエラーが出た場合に画像を保持するための hidden を追加しておく\n
var proto_image = '{{ form_widget(form.images.vars.prototype) }}';\n
{% for image in form.images %}\n
$('#upload-zone').append(\n
$(proto_image.replace(/__name__/g, '{{ loop.index0 }}'))\n
.val('{{ image.vars.value }}')\n
.addClass('images')\n
);\n
{% endfor %}\n
{% for add_image in form.add_images %}\n
$('#upload-zone').append(\n
$('{{ form_widget(add_image) }}')\n
.val('{{ add_image.vars.value }}')\n
.addClass('add_images')\n
);\n
{% endfor %}\n
{% for delete_image in form.delete_images %}\n
$('#upload-zone').append(\n
$('{{ form_widget(delete_image) }}').addClass('del_images')\n
);\n
{% endfor %}\n
\n
// タグ管理\n
var mainTags = $('#allTags');\n
var adminProductTag = $('#admin_product_Tag');\n
$('input', adminProductTag).each(function() {\n
if ($(this).is(':checked')) {\n
$('button[data-tag-id="' + $(this).val() + '"]').removeClass('btn-outline-secondary').addClass('btn-outline-primary');\n
}\n
});\n
mainTags.on('click', 'button.btn', function() {\n
var btnTag = $(this);\n
var tagId = btnTag.data('tag-id');\n
if (btnTag.hasClass('btn-outline-primary')) {\n
btnTag.removeClass('btn-outline-primary').addClass('btn-outline-secondary');\n
$('input[value="' + tagId + '"]', mainTags).prop('checked', false);\n
} else {\n
btnTag.removeClass('btn-outline-secondary').addClass('btn-outline-primary');\n
$('input[value="' + tagId + '"]', mainTags).prop('checked', true);\n
}\n
});\n
\n
var confirmFormChange = function(form, target, modal) {\n
var returnLink = form.find('input[type="hidden"][name*="return_link"]'),\n
saveBtn = modal.find('a[data-action="save"]'),\n
cancelBtn = modal.find('a[data-action="cancel"]');\n
modal.on('hidden.bs.modal', function() {\n
returnLink.val('');\n
});\n
saveBtn.on('click', function() {\n
returnLink.val($(this).data('return-link'));\n
$(this).addClass('disabled');\n
form.submit();\n
});\n
target.on('click', function() {\n
modal.find('.modal-body .screen-name').text($(this).attr('title'));\n
modal.modal('show');\n
saveBtn.data('return-link', $(this).attr('href'));\n
cancelBtn.attr('href', $(this).attr('href'));\n
return false;\n
});\n
};\n
confirmFormChange($('#form1'), $('a[data-action="confirm"]'), $('#confirmFormChangeModal'))\n
});\n
\n
// searchWordの実行\n
$('#search-category').on('input', function () {\n
searchWord($(this).val(), $('.category-li'));\n
});\n
</script>\n
{% endblock javascript %}\n
\n
{% block main %}\n
<!-- 移動確認モーダル-->\n
<div class="modal fade" id="confirmFormChangeModal" tabindex="-1" role="dialog"\n
aria-labelledby="confirmFormChangeModal" aria-hidden="true">\n
<div class="modal-dialog" role="document">\n
<div class="modal-content">\n
<div class="modal-header">\n
<h5 class="modal-title">{{ 'admin.common.move_to_confirm_title'|trans }}</h5>\n
<button class="btn-close" type="button" data-bs-dismiss="modal" aria-label="Close">\n
\n
</button>\n
</div>\n
<div class="modal-body">\n
<p class="screen-name"></p>\n
</div>\n
<div class="modal-footer">\n
<a class="btn btn-ec-conversion" data-action="save" href="javascript:void(0)">\n
{{ 'admin.common.move_to_confirm_save_and_move'|trans }}\n
</a>\n
<a class="btn btn-ec-sub" data-action="cancel" href="javascript:void(0)">\n
{{ 'admin.common.move_to_confirm_move_only'|trans }}\n
</a>\n
</div>\n
</div>\n
</div>\n
</div>\n
<form role="form" name="form1" id="form1" method="post" action="" novalidate enctype="multipart/form-data">\n
{{ form_widget(form._token) }}\n
{{ form_widget(form.return_link) }}\n
<div class="row">\n
<div class="c-contentsArea__cols" style="padding-bottom:0px">\n
<div class="c-contentsArea__primaryCol">\n
<div class="c-primaryCol">\n
<div class="card rounded border-0 mb-4">\n
<div class="card-header">\n
<div class="row">\n
<div class="col-8">\n
<div class="d-inline-block">\n
<span class="card-title">\n
{{ 'admin.product.product__card_title'|trans }}\n
</span>\n
</div>\n
</div>\n
<div class="col-4 text-end">\n
<a data-bs-toggle="collapse" href="#basicConfig" aria-expanded="false"\n
aria-controls="basicConfig">\n
<i class="fa fa-angle-up fa-lg"></i>\n
</a>\n
</div>\n
</div>\n
</div>\n
<div class="collapse show ec-cardCollapse" id="basicConfig">\n
<div class="card-body">\n
{% if Product.id %}\n
<div class="row">\n
<div class="col-3">\n
<div>\n
<span>{{ 'admin.product.product_id'|trans }}</span>\n
</div>\n
</div>\n
<div class="col">\n
<p>{{ Product.id }}</p>\n
</div>\n
</div>\n
{% endif %}\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>{{ 'admin.product.name'|trans }}</span>\n
<span class="badge bg-primary ms-1">\n
{{ 'admin.common.required'|trans }}\n
</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
{{ form_widget(form.name) }}\n
{{ form_errors(form.name) }}\n
</div>\n
</div>\n
{% if has_class == false %}\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>{{ 'admin.product.product_code'|trans }}</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
<div>\n
{{ form_widget(form.class.code) }}\n
{{ form_errors(form.class.code) }}\n
</div>\n
</div>\n
</div>\n
<div class="row">\n
<div class="col-3">\n
<div>\n
<span>{{ 'admin.product.sale_type'|trans }}</span>\n
<span class="badge bg-primary ms-1">\n
{{ 'admin.common.required'|trans }}\n
</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
{{ form_widget(form.class.sale_type) }}\n
{{ form_errors(form.class.sale_type) }}\n
</div>\n
</div>\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>販売価格(見積商品は最低価格)</span>\n
<span class="badge bg-primary ms-1">\n
{{ 'admin.common.required'|trans }}\n
</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
<div>\n
{{ form_widget(form.class.price02) }}\n
{{ form_errors(form.class.price02) }}\n
</div>\n
</div>\n
</div>\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>{{ 'admin.product.stock'|trans }}</span>\n
<span class="badge bg-primary ms-1">\n
{{ 'admin.common.required'|trans }}\n
</span>\n
</div>\n
</div>\n
<div class="col">\n
<div>\n
{{ form_widget(form.class.stock) }}\n
{{ form_errors(form.class.stock) }}\n
{# TODO: form_layoutの調整 #}\n
{#<div class="form-check mb-2">#}\n
{#<input class="form-check-input"#}\n
{#id="{{ form.class.stock_unlimited.vars.id }}"#}\n
{#name="{{ form.class.stock_unlimited.vars.full_name }}"#}\n
{#type="checkbox"#}\n
{#value="{{ form.class.stock_unlimited.vars.value }}">#}\n
{#<label class="form-check-label"#}\n
{#for="{{ form.class.stock_unlimited.vars.id }}">#}\n
{#{{ 'admin.product.product.stock_unlimited'|trans }}#}\n
{#</label>#}\n
{#</div>#}\n
{{ form_widget(form.class.stock_unlimited) }}\n
{{ form_errors(form.class.stock_unlimited) }}\n
</div>\n
</div>\n
</div>\n
{% endif %}\n
\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block" data-bs-toggle="tooltip" data-bs-placement="top" title="{{ 'tooltip.product.image'|trans }}">\n
<span>{{ 'admin.product.image'|trans }}</span>\n
<i class="fa fa-question-circle fa-lg ms-1"></i>\n
<br>{{ 'admin.product.image_size'|trans }}\n
</div>\n
</div>\n
<div class="col mb-2">\n
<p id="message"></p>\n
<div id="upload-zone" class="rounded">\n
{{ form_widget(form.product_image, { attr : { style : 'display:none;' } }) }}\n
{{ form_errors(form.product_image) }}\n
</div><!-- /#upload-zone -->\n
<span class="invalid-feedback" id="product_image_error" style="display: none">\n
<span class="d-block">\n
<span class="form-error-icon badge bg-danger text-uppercase">{{ 'Error'|trans({}, 'validators') }}</span>\n
<span class="form-error-message"></span>\n
</span>\n
</span>\n
</div>\n
</div>\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block" data-bs-toggle="tooltip" data-bs-placement="top">\n
<span>カラー</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
\t\t\t\t\t\t\t\t\t\t<table class="table table-bordered">\n
\t\t\t\t\t\t\t\t\t\t\t<tr>\n
\t\t\t\t\t\t \t\t\t<th>カラー名</th>\n
\t\t\t\t\t\t \t\t\t<th>カラーコード</th>\n
\t\t\t\t\t\t \t\t\t<th>サンプル画像</th>\n
\t\t\t\t\t\t \t\t\t<th>設定</th>\n
\t\t\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t\t\t\t\t {% set disable_color = false %}\n
\t\t {% for i in 0..10 %}\n
\t\t \t{% if color and color|length >= i+1 %}\n
\t\t\t\t\t\t\t\t\t\t\t<tr id="color_list_{{ i }}">\n
\t\t\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="color_name_{{ i }}" placeholder="カラー名" name="color[{{ i }}][name]" value="{{ color[i]['name'] }}">\n
\t\t\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="color_code_{{ i }}" placeholder="カラーコード" name="color[{{ i }}][code]" value="{{ color[i]['code'] }}">\n
\t\t\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="color_img_{{ i }}" placeholder="サンプル画像" name="color[{{ i }}][img]" value="{{ color[i]['img'] }}">\n
\t\t\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t <button type="button" class="btn btn-danger" onclick="if(confirm('削除してよろしいですか?')){ $('#color_list_{{ i }}').remove(); }">削除</button>\n
\t\t\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t\t\t\t\t\t</tr>\n
\t\t \t\t\t{% else %}\n
\t\t\t\t\t\t\t\t\t\t\t<tr id="color_list_{{ i }}" {% if disable_color %}style="display:none;"{% endif %}>\n
\t\t\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="color_name_{{ i }}" placeholder="カラー名" name="color[{{ i }}][name]" value="">\n
\t\t\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="color_code_{{ i }}" placeholder="カラーコード" name="color[{{ i }}][code]" value="">\n
\t\t\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="color_img_{{ i }}" placeholder="サンプル画像" name="color[{{ i }}][img]" value="">\n
\t\t\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" id="color_btn_{{ i }}" class="btn btn-danger" style="display:none;" onclick="if(confirm('削除してよろしいですか?')){$('#color_list_{{ i }}').remove();}">削除</button>\n
\t\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-warning" onclick="$('#color_list_{{ i + 1 }}').show();$('#color_btn_{{ i }}').show();$(this).hide();">追加</button>\n
\t\t\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t\t\t {% set disable_color = true %}\n
\t\t \t\t\t{% endif %}\n
\t\t \t\t\t{% endfor %}\n
\t\t\t\t\t\t\t\t\t\t</table>\n
\n
{{ form_errors(form.search_word) }}\n
</div>\n
</div>\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>一覧スペック</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
<div>\n
{{ form_widget(form.list_spec, { attr : { rows : "4"} }) }}\n
{{ form_errors(form.list_spec) }}\n
</div>\n
</div>\n
</div>\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>一覧説明</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
<div>\n
{{ form_widget(form.description_list, { attr : { rows : "4"} }) }}\n
{{ form_errors(form.description_list) }}\n
</div>\n
</div>\n
</div>\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block" data-bs-toggle="tooltip" data-bs-placement="top"\n
title="{{ 'tooltip.product.description_detail'|trans }}">\n
<span>{{ 'admin.product.description_detail'|trans }}</span>\n
<i class="fa fa-question-circle fa-lg ms-1"></i>\n
</div>\n
</div>\n
<div class="col mb-2">\n
{{ form_widget(form.description_detail, { attr : { rows : "4"} }) }}\n
{{ form_errors(form.description_detail) }}\n
</div>\n
</div>\n
\n
\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>おすすめポイント</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
{{ form_widget(form.recommend_point, { attr : { rows : "3"} }) }}\n
{{ form_errors(form.recommend_point) }}\n
</div>\n
</div>\n
\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>販売情報</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
{{ form_widget(form.sales_infomation, { attr : { rows : "3"} }) }}\n
{{ form_errors(form.sales_infomation) }}\n
</div>\n
</div>\n
\n
{% if has_class == false %}\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>{{ 'admin.product.sale_limit'|trans }}</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
<div>\n
{{ form_widget(form.class.sale_limit) }}\n
{{ form_errors(form.class.sale_limit) }}\n
</div>\n
</div>\n
</div>\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block" data-bs-toggle="tooltip" data-bs-placement="top"\n
title="{{ 'tooltip.product.delivery_duration'|trans }}">\n
<span>{{ 'admin.product.delivery_duration'|trans }}</span>\n
<i class="fa fa-question-circle fa-lg ms-1"></i>\n
</div>\n
</div>\n
<div class="col mb-2">\n
<div>\n
{{ form_widget(form.class.delivery_duration) }}\n
{{ form_errors(form.class.delivery_duration) }}\n
</div>\n
</div>\n
</div>\n
\n
{% if BaseInfo.option_product_delivery_fee %}\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>{{ 'admin.product.delivery_fee'|trans }}</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
<div>\n
{{ form_widget(form.class.delivery_fee) }}\n
{{ form_errors(form.class.delivery_fee) }}\n
</div>\n
</div>\n
</div>\n
{% endif %}\n
{% if BaseInfo.option_product_tax_rule %}\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>{{ 'admin.product.tax_rate'|trans }}</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
<div>\n
{{ form_widget(form.class.tax_rate) }}\n
{{ form_errors(form.class.tax_rate) }}\n
</div>\n
</div>\n
</div>\n
{% endif %}\n
{% endif %}\n
\n
{% if has_class == false %}\n
{% for f in form.class|filter(f => f.vars.eccube_form_options.auto_render) %}\n
{% if f.vars.eccube_form_options.form_theme %}\n
{% form_theme f f.vars.eccube_form_options.form_theme %}\n
{{ form_row(f) }}\n
{% else %}\n
<div class="row">\n
<div class="col-3">\n
<span>{{ f.vars.label|trans }}</span>\n
</div>\n
<div class="col mb-2">\n
<div>\n
{{ form_widget(f) }}\n
{{ form_errors(f) }}\n
</div>\n
</div>\n
</div>\n
{% endif %}\n
{% endfor %}\n
{% endif %}\n
\n
{% if has_class == false %}\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>メーカー</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
<div>\n
{{ form_widget(form.Maker) }}\n
{{ form_errors(form.Maker) }}\n
</div>\n
</div>\n
</div>\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>メーカーURL</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
<div>\n
{{ form_widget(form.makerurl) }}\n
{{ form_errors(form.makerurl) }}\n
</div>\n
</div>\n
</div>\n
<div class="row">\n
<div class="col-3">\n
<div class="d-inline-block">\n
<span>メーカー価格(見積商品は最低価格)</span>\n
</div>\n
</div>\n
<div class="col mb-2">\n
<div>\n
{{ form_widget(form.class.price01) }}\n
{{ form_errors(form.class.price01) }}\n
</div>\n
</div>\n
</div>\n
{% endif %}\n
\n
</div>\n
</div>\n
</div>\n
\n
\n
\n
\n
\n
</div>\n
</div>\n
<div class="c-contentsArea__secondaryCol">\n
<div class="c-secondaryCol">\n
{% if id is not null %}\n
<div class="card rounded border-0 mb-4">\n
<div class="collapse show ec-cardCollapse" id="preview">\n
<div class="card-body">\n
<div class="d-block text-center">\n
<a class="btn w-100 btn-ec-regular"\n
target="_blank"\n
href="{{ url('product_detail', {id:id}) }}"\n
title="{{ 'admin.product.preview'|trans }}">{{ 'admin.product.preview'|trans }}</a>\n
</div>\n
</div>\n
</div>\n
</div>\n
{% endif %}\n
<div class="card rounded border-0 mb-4">\n
<div class="card-header">\n
<div class="row">\n
<div class="col-8">\n
<div class="d-inline-block">\n
<span class="card-title">{{ 'admin.product.category__product_card_title'|trans }}</span>\n
</div>\n
</div>\n
<div class="col-4 text-end">\n
<a data-bs-toggle="collapse" href="#category" aria-expanded="false"\n
aria-controls="category">\n
<i class="fa fa-angle-up fa-lg"></i>\n
</a>\n
</div>\n
</div>\n
</div>\n
<div class="collapse show ec-cardCollapse" id="category">\n
<div class="card-body">\n
<div class="mb-3">\n
<div class="row">\n
<div class="col">\n
<div class="input-group">\n
<div class="input-group-text">\n
<span id="basic-addon1">\n
<i class="fa fa-search"></i>\n
</span>\n
</div>\n
<input id="search-category" class="form-control" type="search"\n
placeholder="{{ 'admin.product.search_category'|trans }}"\n
aria-label="Search">\n
</div>\n
</div>\n
</div>\n
</div>\n
\n
{% macro tree(ChoicedIds, Category, form) %}\n
{% import _self as selfMacro %}\n
<li class="c-directoryTree--registerItem category-li">\n
<input type="checkbox" id="admin_product_category_{{ Category.id }}" name="admin_product[Category][]" value="{{ Category.id }}" {% if Category.id in ChoicedIds %}checked{% endif %}>\n
<label for="admin_product_category_{{ Category.id }}">{{ Category.name }}</label>\n
<ul class="list-unstyled">\n
{% for child,ChildCategory in Category.children %}\n
{{ selfMacro.tree(ChoicedIds, ChildCategory, form) }}\n
{% endfor %}\n
</ul>\n
</li>\n
{% endmacro %}\n
\n
<div class="c-directoryTree--register rounded border mb-3 p-3">\n
{% import _self as renderMacro %}\n
{% for TopCategory in TopCategories %}\n
<ul class="list-unstyled">\n
{{ renderMacro.tree(ChoicedCategoryIds, TopCategory, form.Category) }}\n
</ul>\n
{% endfor %}\n
{{ form_errors(form.Category) }}\n
</div>\n
<div class="d-block text-center">\n
<a class="btn w-100 btn-ec-regular"\n
data-action="confirm"\n
href="{{ path('admin_product_category') }}"\n
title="{{ 'admin.common.move_to_confirm_message'|trans({\n
'%name%' : 'admin.product.category_management'|trans}) }}">{{ 'admin.product.move_to_category'|trans }}</a>\n
</div>\n
</div>\n
</div>\n
</div>\n
<div class="card rounded border-0 mb-4">\n
<div class="card-header">\n
<div class="row">\n
<div class="col-8">\n
<div class="d-inline-block">\n
<span class="card-title">\n
{{ 'admin.product.tag__product_card_title'|trans }}\n
</span>\n
</div>\n
</div>\n
<div class="col-4 text-end">\n
<a data-bs-toggle="collapse" href="#tag" aria-expanded="false" aria-controls="tag">\n
<i class="fa fa-angle-up fa-lg"></i>\n
</a>\n
</div>\n
</div>\n
</div>\n
\n
<div class="collapse show ec-cardCollapse" id="tag">\n
<div class="card-body">\n
{% if(Tags|length > 0) %}\n
{% for Tag in Tags %}\n
<div class="d-inline-block mb-2 me-2">\n
<button class="btn btn-outline-primary" type="button">{{ Tag.name }}</button>\n
</div>\n
{% endfor %}\n
{% endif %}\n
<div class="d-block mb-3" data-bs-toggle="collapse" href="#allTags" role="button"\n
aria-expanded="false" aria-controls="allTags">\n
<a>\n
<i class="fa fa-plus-square-o fw-bold me-1"></i>\n
<span class="fw-bold">{{ 'admin.product.save_tag'|trans }}</span>\n
</a>\n
</div>\n
<div class="collapse p-3 bg-ec-lightGray mb-3 ec-collapse show" id="allTags">\n
<div class="d-none">\n
{{ form_widget(form.Tag) }}\n
</div>\n
{% if(TagsList|length > 0) %}\n
{% for Tag in TagsList %}\n
<div class="d-inline-block mb-2 me-2">\n
<button class="btn btn-outline-secondary" type="button"\n
data-tag-id="{{ Tag.id }}">{{ Tag.name }}</button>\n
</div>\n
{% endfor %}\n
{% endif %}\n
\n
<div class="d-block mb-3" data-bs-toggle="collapse" href="#allTags" role="button"\n
aria-expanded="false" aria-controls="allTags"></div>\n
</div>\n
\n
<div class="d-block text-center">\n
<a href="{{ path('admin_product_tag') }}"\n
class="btn w-100 btn-ec-regular"\n
data-action="confirm"\n
title="{{ 'admin.common.move_to_confirm_message'|trans({\n
'%name%' : 'admin.product.tag_management'|trans }) }}">{{ 'admin.product.move_to_tag'|trans }}</a>\n
</div>\n
</div>\n
</div>\n
</div>\n
<div class="card rounded border-0 mb-4">\n
<div class="card-header">\n
<div class="row">\n
<div class="col-8">\n
<span class="card-title">{{ 'admin.product.create_date__card_title'|trans }}</span>\n
</div>\n
<div class="col-4 text-end">\n
<a data-bs-toggle="collapse" href="#update" aria-expanded="false"\n
aria-controls="update">\n
<i class="fa fa-angle-up fa-lg"></i>\n
</a>\n
</div>\n
</div>\n
</div>\n
<div class="collapse show ec-cardCollapse" id="update">\n
<div class="card-body">\n
<div class="row mb-2">\n
<div class="col">\n
<i class="fa fa-flag me-1"></i>\n
<span>{{ 'admin.common.create_date'|trans }}</span>\n
</div>\n
<div class="col">\n
<span>:{{ Product.create_date|date_min }}</span>\n
</div>\n
</div>\n
<div class="row mb-2">\n
<div class="col">\n
<i class="fa fa-refresh me-1"></i>\n
<span>{{ 'admin.common.update_date'|trans }}</span>\n
</div>\n
<div class="col">\n
<span>:{{ Product.update_date|date_min }}</span>\n
</div>\n
</div>\n
<div class="row mb-2">\n
<div class="col">\n
<i class="fa fa-user me-1"></i>\n
<span>{{ 'admin.common.last_updater'|trans }}</span>\n
</div>\n
<div class="col">\n
<span>:{{ Product.Creator ? Product.Creator.name }}</span>\n
</div>\n
</div>\n
</div>\n
</div>\n
</div>\n
<div class="card rounded border-0 mb-4">\n
<div class="card-header">\n
<div class="row">\n
<div class="col-8">\n
<div class="d-inline-block" data-bs-toggle="tooltip" data-bs-placement="top"\n
title="{{ 'tooltip.product.shop_memo'|trans }}">\n
<span class="card-title">\n
{{ 'admin.common.shop_memo'|trans }}\n
<i class="fa fa-question-circle fa-lg ms-1"></i>\n
</span>\n
</div>\n
</div>\n
<div class="col-4 text-end">\n
<a data-bs-toggle="collapse" href="#shopMemo" aria-expanded="false"\n
aria-controls="shopMemo">\n
<i class="fa fa-angle-up fa-lg"></i>\n
</a>\n
</div>\n
</div>\n
</div>\n
<div class="collapse show ec-cardCollapse" id="shopMemo">\n
<div class="card-body">\n
{{ form_widget(form.note, { attr : { rows : "8"} }) }}\n
{{ form_errors(form.note) }}\n
</div>\n
</div>\n
</div>\n
</div>\n
</div>\n
</div>\n
</div>\n
\n
<div id="item_option" class="row" style="padding: 0 15px">\n
\n
<div class="card rounded border-0 mb-4">\n
<div class="card-header">\n
<div class="row">\n
<div class="col-8">\n
<div class="d-inline-block">\n
<span class="card-title">商品価格設定</span>\n
</div>\n
</div>\n
<div class="col-4 text-end">\n
<a data-bs-toggle="collapse" href="#freeArea" aria-expanded="false"\n
aria-controls="freeArea">\n
<i class="fa fa-angle-up fa-lg"></i>\n
</a>\n
</div>\n
</div>\n
</div>\n
<div class="collapse show ec-cardCollapse" id="freeArea">\n
<div class="card-body" style="overflow-y: scroll;max-height: 700px;">\n
\t\t\t\t\t\t\t\t<table class="table table-bordered" id="product_option1">\n
\t\t\t\t\t\t\t\t <thead>\n
\t\t\t\t\t\t\t\t\t<tr>\n
\t\t\t\t \t\t\t<th>幅</th>\n
\t\t\t\t \t\t\t<th>奥行き</th>\n
\t\t\t\t \t\t\t<th>高さ</th>\n
\t\t\t\t \t\t\t<th>カラー</th>\n
\t\t\t\t \t\t\t<th>素材</th>\n
\t\t\t\t \t\t\t<th>メーカー価格</th>\n
\t\t\t\t \t\t\t<th>割引率</th>\n
\t\t\t\t \t\t\t<th>価格</th>\n
\t\t\t\t \t\t\t<th>基本工事費</th>\n
\t\t\t\t \t\t\t<th>設定</th>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t\t\t\t\t\t </thead>\n
\t\t\t\t\t\t\t\t <tbody>\n
\t\t\t\t\t {% set disable_pp = false %}\n
{% for i in 0..1600 %}\n
\t{% if pp and pp|length > i %}\n
\t\t\t\t\t\t\t\t\t<tr id="pp_list_{{ i }}">\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<div style="display:none">{{ pp[i]['w'] }}</div>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_w_{{ i }}" placeholder="幅" name="pp[{{ i }}][w]" value="{{ pp[i]['w'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<div style="display:none">{{ pp[i]['d'] }}</div>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_d_{{ i }}" placeholder="奥行き" name="pp[{{ i }}][d]" value="{{ pp[i]['d'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<div style="display:none">{{ pp[i]['h'] }}</div>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_h_{{ i }}" placeholder="高さ" name="pp[{{ i }}][h]" value="{{ pp[i]['h'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<div style="display:none">{{ pp[i]['c'] }}</div>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_c_{{ i }}" placeholder="カラー" name="pp[{{ i }}][c]" value="{{ pp[i]['c'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<div style="display:none">{{ pp[i]['m'] }}</div>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_m_{{ i }}" placeholder="素材" name="pp[{{ i }}][m]" value="{{ pp[i]['m'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_mp_{{ i }}" placeholder="メーカー価格" name="pp[{{ i }}][maker_price]" value="{{ pp[i]['maker_price'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_s_{{ i }}" placeholder="割引率" name="pp[{{ i }}][sale]" value="{{ pp[i]['sale'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_p_{{ i }}" placeholder="価格" name="pp[{{ i }}][price]" value="{{ pp[i]['price'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_ct_{{ i }}" placeholder="基本工事費" name="pp[{{ i }}][ct]" value="{{ pp[i]['ct'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t <button type="button" class="btn btn-danger" onclick="if(confirm('削除してよろしいですか?')){ $('#pp_list_{{ i }}').remove(); }">削除</button>\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t{% else %}\n
\t\t\t\t\t\t\t\t\t<tr id="pp_list_{{ i }}" {% if disable_pp %}style="display:none;"{% endif %}>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_w_{{ i }}" placeholder="幅" name="pp[{{ i }}][w]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_d_{{ i }}" placeholder="奥行き" name="pp[{{ i }}][d]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_h_{{ i }}" placeholder="高さ" name="pp[{{ i }}][h]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_c_{{ i }}" placeholder="カラー" name="pp[{{ i }}][c]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_m_{{ i }}" placeholder="素材" name="pp[{{ i }}][m]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_mp_{{ i }}" placeholder="メーカー価格" name="pp[{{ i }}][maker_price]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_s_{{ i }}" placeholder="割引率" name="pp[{{ i }}][sale]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_p_{{ i }}" placeholder="価格" name="pp[{{ i }}][price]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_ct_{{ i }}" placeholder="基本工事費" name="pp[{{ i }}][ct]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<button type="button" id="pp_btn_{{ i }}" class="btn btn-danger" style="display:none;" onclick="if(confirm('削除してよろしいですか?')){$('#pp_list_{{ i }}').remove();}">削除</button>\n
\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-warning" onclick="$('#pp_list_{{ i + 1 }}').show();$('#pp_btn_{{ i }}').show();$(this).hide();">追加</button>\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t {% set disable_pp = true %}\n
\t\t\t{% endif %}\n
\t\t\t{% endfor %}\n
\t\t\t\t\t\t\t\t </tbody>\n
\t\t\t\t\t\t\t\t</table>\n
</div>\n
</div>\n
</div>\n
<div class="card rounded border-0 mb-4">\n
<div class="card-header">\n
<div class="row">\n
<div class="col-8">\n
<div class="d-inline-block">\n
<span class="card-title">施工オプション設定</span>\n
</div>\n
</div>\n
<div class="col-4 text-end">\n
<a data-bs-toggle="collapse" href="#optionArea" aria-expanded="false"\n
aria-controls="optionArea">\n
<i class="fa fa-angle-up fa-lg"></i>\n
</a>\n
</div>\n
</div>\n
</div>\n
<div class="collapse show ec-cardCollapse" id="optionArea">\n
<div class="card-body" style="overflow-y: scroll;max-height: 700px;">\n
\t\t\t\t\t\t\t\t<table class="table table-bordered">\n
\t\t\t\t\t\t\t\t\t<tr>\n
\t\t\t\t \t\t\t<th>オプション名</th>\n
\t\t\t\t \t\t\t<th>依頼するテキスト</th>\n
\t\t\t\t \t\t\t<th>依頼しないテキスト</th>\n
\t\t\t\t \t\t\t<th>オプション価格</th>\n
\t\t\t\t \t\t\t<th rowspan="2">設定</th>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t\t\t\t\t\t\t<tr>\n
\t\t\t\t \t\t\t<th colspan="4">オプション説明</th>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t\t\t {% set disable_op = false %}\n
{% for i in 0..10 %}\n
\t{% if op and op|length >= i+1 %}\n
\t\t\t\t\t\t\t\t\t<tr id="op_list1_{{ i }}">\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="op_name_{{ i }}" placeholder="オプション名" name="op[{{ i }}][name]" value="{{ op[i]['name'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="op_on_text{{ i }}" placeholder="依頼するテキスト" name="op[{{ i }}][on]" value="{{ op[i]['on'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_off_text_{{ i }}" placeholder="依頼しないテキスト" name="op[{{ i }}][off]" value="{{ op[i]['off'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="op_price_{{ i }}" placeholder="オプション価格" name="op[{{ i }}][price]" value="{{ op[i]['price'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td rowspan="2">\n
\t\t\t\t\t\t\t\t <button type="button" class="btn btn-danger" onclick="if(confirm('削除してよろしいですか?')){ $('#op_list1_{{ i }}').remove(); $('#op_list2_{{ i }}').remove(); }">削除</button>\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t\t\t\t\t\t\t<tr id="op_list2_{{ i }}">\n
\t\t\t\t \t\t\t<td colspan="4">\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="op_comment_{{ i }}" placeholder="オプション説明" name="op[{{ i }}][comment]" value="{{ op[i]['comment'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t{% else %}\n
\t\t\t\t\t\t\t\t\t<tr id="op_list1_{{ i }}" {% if disable_op %}style="display:none;"{% endif %}>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="op_name_{{ i }}" placeholder="オプション名" name="op[{{ i }}][name]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="op_on_text{{ i }}" placeholder="依頼するテキスト" name="op[{{ i }}][on]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_off_text_{{ i }}" placeholder="依頼しないテキスト" name="op[{{ i }}][off]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="op_price_{{ i }}" placeholder="オプション価格" name="op[{{ i }}][price]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td rowspan="2">\n
\t\t\t\t\t\t\t\t\t\t\t<button type="button" id="op_btn_{{ i }}" class="btn btn-danger" style="display:none;" onclick="if(confirm('削除してよろしいですか?')){$('#op_list1_{{ i }}').remove();$('#op_list2_{{ i }}').remove();}">削除</button>\n
\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-warning" onclick="$('#op_list1_{{ i + 1 }}').show();$('#op_list2_{{ i + 1 }}').show();$('#op_btn_{{ i }}').show();$(this).hide();">追加</button>\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t\t\t\t\t\t\t<tr id="op_list2_{{ i }}" {% if disable_op %}style="display:none;"{% endif %}>\n
\t\t\t\t \t\t\t<td colspan="4">\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="op_comment_{{ i }}" placeholder="オプション説明" name="op[{{ i }}][comment]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t {% set disable_op = true %}\n
\t\t\t{% endif %}\n
\t\t\t{% endfor %}\n
\t\t\t\t\t\t\t\t</table>\n
</div>\n
</div>\n
</div>\n
\n
\n
<div class="card rounded border-0 mb-4">\n
<div class="card-header">\n
<div class="row">\n
<div class="col-8">\n
<div class="d-inline-block">\n
<span class="card-title">オプション商品設定</span>\n
</div>\n
</div>\n
<div class="col-4 text-end">\n
<a data-bs-toggle="collapse" href="#optionItemArea" aria-expanded="false"\n
aria-controls="optionItemArea">\n
<i class="fa fa-angle-up fa-lg"></i>\n
</a>\n
</div>\n
</div>\n
</div>\n
<div class="collapse show ec-cardCollapse" id="optionItemArea">\n
<div class="card-body" style="overflow-y: scroll;max-height: 700px;">\n
\t\t\t\t\t\t\t\t<table class="table table-bordered">\n
\t\t\t\t\t\t\t\t\t<tr>\n
\t\t\t\t \t\t\t<th rowspan="2">商品画像</th>\n
\t\t\t\t \t\t\t<th>商品名</th>\n
\t\t\t\t \t\t\t<th>素材</th>\n
\t\t\t\t \t\t\t<th>カラー</th>\n
\t\t\t\t \t\t\t<th>価格</th>\n
\t\t\t\t \t\t\t<th>工事費</th>\n
\t\t\t\t \t\t\t<th rowspan="2">設定</th>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t\t\t\t\t\t\t<tr>\n
\t\t\t\t \t\t\t<th colspan="5">説明</th>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t\t\t {% set disable_oi = false %}\n
{% for i in 0 .. 1000 %}\n
\t{% if oi and oi|length > i %}\n
\t\t\t\t\t\t\t\t\t<tr id="oi_list1_{{ i }}">\n
\t\t\t\t \t\t\t<td rowspan="2">\n
\t\t\t\t\t\t\t\t\t\t\t<input type="file" class="form-control" id="oi_image_{{ i }}" placeholder="商品画像" name="oi[{{ i }}][image]">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="oi_name_{{ i }}" placeholder="商品名" name="oi[{{ i }}][name]" value="{{ oi[i]['name'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="oi_m_{{ i }}" placeholder="素材" name="oi[{{ i }}][m]" value="{{ oi[i]['m'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="oi_c_{{ i }}" placeholder="カラー" name="oi[{{ i }}][c]" value="{{ oi[i]['c'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="oi_price1_{{ i }}" placeholder="価格" name="oi[{{ i }}][price1]" value="{{ oi[i]['price1'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="oi_price2_{{ i }}" placeholder="工事費" name="oi[{{ i }}][price2]" value="{{ oi[i]['price2'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td rowspan="2">\n
\t\t\t\t\t\t\t\t <button type="button" class="btn btn-danger" onclick="if(confirm('削除してよろしいですか?')){ $('#oi_list1_{{ i }}').remove(); $('#oi_list2_{{ i }}').remove(); }">削除</button>\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t\t\t\t\t\t\t<tr id="oi_list2_{{ i }}">\n
\t\t\t\t \t\t\t<td colspan="5">\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="oi_comment_{{ i }}" placeholder="説明" name="oi[{{ i }}][comment]" value="{{ oi[i]['comment'] }}">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t{% else %}\n
\t\t\t\t\t\t\t\t\t<tr id="oi_list1_{{ i }}" {% if disable_oi %}style="display:none;"{% endif %}>\n
\t\t\t\t \t\t\t<td rowspan="2">\n
\t\t\t\t\t\t\t\t\t\t\t<input type="file" class="form-control" id="oi_image_{{ i }}" placeholder="商品画像" name="oi[{{ i }}][image]">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="oi_name_{{ i }}" placeholder="商品名" name="oi[{{ i }}][name]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="oi_m_{{ i }}" placeholder="素材" name="oi[{{ i }}][m]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="oi_c_{{ i }}" placeholder="カラー" name="oi[{{ i }}][c]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="oi_price1_{{ i }}" placeholder="価格" name="oi[{{ i }}][price1]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td>\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="oi_price2_{{ i }}" placeholder="工事費" name="oi[{{ i }}][price2]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t \t\t\t<td rowspan="2">\n
\t\t\t\t\t\t\t\t\t\t\t<button type="button" id="oi_btn_{{ i }}" class="btn btn-danger" style="display:none;" onclick="if(confirm('削除してよろしいですか?')){$('#oi_list1_{{ i }}').remove();$('#oi_list2_{{ i }}').remove();}">削除</button>\n
\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-warning" onclick="$('#oi_list1_{{ i + 1 }}').show();$('#oi_list2_{{ i + 1 }}').show();$('#oi_btn_{{ i }}').show();$(this).hide();">追加</button>\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t\t\t\t\t\t\t<tr id="oi_list2_{{ i }}" {% if disable_oi %}style="display:none;"{% endif %}>\n
\t\t\t\t \t\t\t<td colspan="5">\n
\t\t\t\t\t\t\t\t\t\t\t<input type="text" class="form-control" id="oi_comment_{{ i }}" placeholder="説明" name="oi[{{ i }}][comment]" value="">\n
\t\t\t\t\t\t\t\t\t\t</td>\n
\t\t\t\t\t\t\t\t\t</tr>\n
\t\t\t {% set disable_oi = true %}\n
\t\t\t{% endif %}\n
\t\t\t{% endfor %}\n
\t\t\t\t\t\t\t\t</table>\n
\n
</div>\n
</div>\n
</div>\n
</div>\n
<div class="c-conversionArea">\n
<div class="c-conversionArea__container">\n
<div class="row justify-content-between align-items-center">\n
<div class="col-6">\n
<div class="c-conversionArea__leftBlockItem">\n
<a class="c-baseLink" href="{{ path('admin_product_page', { page_no : app.session.get('eccube.admin.product.search.page_no')|default('1') } ) }}"\n
data-action="confirm" title="{{ 'admin.common.move_to_confirm_message'|trans({'%name%' : 'admin.product.product_list'|trans }) }}">\n
<i class="fa fa-backward" aria-hidden="true"></i><span>{{ 'admin.product.product_list'|trans }}</span>\n
</a>\n
</div>\n
</div>\n
<div class="col-6">\n
<div id="ex-conversion-action" class="row align-items-center justify-content-end">\n
<div class="col-auto">\n
{{ form_widget(form.Status) }}\n
{{ form_errors(form.Status) }}\n
</div>\n
<div class="col-auto">\n
<button class="btn btn-ec-conversion px-5" type="submit">{{ 'admin.common.registration'|trans }}</button>\n
</div>\n
</div>\n
</div>\n
</div>\n
</div>\n
</div>\n
</form>\n
{% endblock %}\n
"""
#message: "Key "price" for array with keys "w, d, h, m, maker_price, sale, c, ct" does not exist."
#code: 0
#file: "/home/xs538259/exterior-plus.jp/public_html/app/template/admin/Product/product.twig"
#line: 951
trace: {
/home/xs538259/exterior-plus.jp/public_html/app/template/admin/Product/product.twig:951 {
twig_get_attribute(Environment $env, Source $source, $object, $item, array $arguments = [], $type = 'any', $isDefinedTest = false, $ignoreStrictCheck = false, $sandboxed = false, int $lineno = -1) …
› \t\t\t<td>
› \t\t\t\t\t\t\t<input type="text" class="form-control" id="pp_p_{{ i }}" placeholder="価格" name="pp[{{ i }}][price]" value="{{ pp[i]['price'] }}">
› \t\t\t\t\t\t</td>
}
/home/xs538259/exterior-plus.jp/public_html/var/cache/dev/twig/9a/9a6d05a1ac50f768f2ea783b24a6871b75e01989e061c515854a90cd485990f2.php:1756 {
__TwigTemplate_51e193f48c1c73bcc8869151bfd5ab9d9de23fb83cd36e08e1758449f97302a5->block_main($context, array $blocks = []) …
› echo "][price]\" value=\"";
› echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, (isset($context["pp"]) || array_key_exists("pp", $context) ? $context["pp"] : (function () { throw new RuntimeError('Variable "pp" does not exist.', 951, $this->source); })()), $context["i"], [], "array", false, false, false, 951), "price", [], "array", false, false, false, 951), "html", null, true);
› echo "\">
arguments: {
$env: Twig\Environment {#693 …}
$source: Twig\Source {#95831 …}
$object: [ …8]
$item: "price"
$arguments: []
$type: "array"
$isDefinedTest: false
$ignoreStrictCheck: false
$sandboxed: false
$lineno: 951
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/twig/twig/src/Template.php:182 {
Twig\Template->displayBlock($name, array $context, array $blocks = [], $useBlocks = true, self $templateContext = null) …
› try {
› $template->$block($context, $blocks);
› } catch (Error $e) {
arguments: {
$context: [ …27]
$blocks: [ …5]
}
}
/home/xs538259/exterior-plus.jp/public_html/app/template/admin/default_frame.twig:259 {
__TwigTemplate_5b603bb0a7d652dbafb08501b6e24a9f3572dd08ea1a34a676f426e80684fa34->doDisplay(array $context, array $blocks = []) …
› {{ include('@admin/alert.twig') }}
› {% block main %}{% endblock %}
› </div>
arguments: {
$name: "main"
$context: [ …21]
$blocks: [ …5]
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/twig/twig/src/Template.php:405 {
Twig\Template->displayWithErrorHandling(array $context, array $blocks = []) …
› try {
› $this->doDisplay($context, $blocks);
› } catch (Error $e) {
arguments: {
$context: [ …21]
$blocks: [ …4]
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/twig/twig/src/Template.php:378 {
Twig\Template->display(array $context, array $blocks = []) …
› {
› $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
› }
arguments: {
$context: [ …21]
$blocks: [ …4]
}
}
/home/xs538259/exterior-plus.jp/public_html/src/Eccube/Twig/Template.php:41 {
Eccube\Twig\Template->display(array $context, array $blocks = []) …
› } else {
› parent::display($event->getParameters(), $blocks);
› }
arguments: {
$context: [ …15]
$blocks: []
}
}
/home/xs538259/exterior-plus.jp/public_html/var/cache/dev/twig/9a/9a6d05a1ac50f768f2ea783b24a6871b75e01989e061c515854a90cd485990f2.php:56 {
__TwigTemplate_51e193f48c1c73bcc8869151bfd5ab9d9de23fb83cd36e08e1758449f97302a5->doDisplay(array $context, array $blocks = []) …
› $this->parent = $this->loadTemplate("@admin/default_frame.twig", "@admin/Product/product.twig", 11);
› $this->parent->display($context, array_merge($this->blocks, $blocks));
›
arguments: {
$context: [ …21]
$blocks: [ …4]
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/twig/twig/src/Template.php:405 {
Twig\Template->displayWithErrorHandling(array $context, array $blocks = []) …
› try {
› $this->doDisplay($context, $blocks);
› } catch (Error $e) {
arguments: {
$context: [ …21]
$blocks: [ …4]
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/twig/twig/src/Template.php:378 {
Twig\Template->display(array $context, array $blocks = []) …
› {
› $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
› }
arguments: {
$context: [ …21]
$blocks: [ …4]
}
}
/home/xs538259/exterior-plus.jp/public_html/src/Eccube/Twig/Template.php:41 {
Eccube\Twig\Template->display(array $context, array $blocks = []) …
› } else {
› parent::display($event->getParameters(), $blocks);
› }
arguments: {
$context: [ …15]
$blocks: []
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/twig/twig/src/Template.php:390 {
Twig\Template->render(array $context) …
› try {
› $this->display($context);
› } catch (\Throwable $e) {
arguments: {
$context: [ …13]
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/twig/twig/src/TemplateWrapper.php:45 {
Twig\TemplateWrapper->render(array $context = []): string …
› // as it should only be used by internal code
› return $this->template->render($context, \func_get_args()[1] ?? []);
› }
arguments: {
$context: [ …13]
...: {
[]
}
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/twig/twig/src/Environment.php:318 {
Twig\Environment->render($name, array $context = []) …
› {
› return $this->load($name)->render($context);
› }
arguments: {
$context: [ …13]
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/sensio/framework-extra-bundle/src/EventListener/TemplateListener.php:115 {
Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener->onKernelView(KernelEvent $event) …
› } else {
› $event->setResponse(new Response($this->twig->render($template->getTemplate(), $parameters)));
› }
arguments: {
$name: "@admin/Product/product.twig"
$context: [ …13]
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/symfony/event-dispatcher/Debug/WrappedListener.php:117 {
Symfony\Component\EventDispatcher\Debug\WrappedListener->__invoke(object $event, string $eventName, EventDispatcherInterface $dispatcher): void …
›
› ($this->optimizedListener ?? $this->listener)($event, $eventName, $dispatcher);
›
arguments: {
$event: Symfony\Component\HttpKernel\Event\ViewEvent {#95731 …}
...: {
"kernel.view"
Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher {#865 …}
}
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/symfony/event-dispatcher/EventDispatcher.php:230 {
Symfony\Component\EventDispatcher\EventDispatcher->callListeners(iterable $listeners, string $eventName, object $event) …
› }
› $listener($event, $eventName, $this);
› }
arguments: {
$event: Symfony\Component\HttpKernel\Event\ViewEvent {#95731 …}
$eventName: "kernel.view"
$dispatcher: Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher {#865 …}
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/symfony/event-dispatcher/EventDispatcher.php:59 {
Symfony\Component\EventDispatcher\EventDispatcher->dispatch(object $event, string $eventName = null): object …
› if ($listeners) {
› $this->callListeners($listeners, $eventName, $event);
› }
arguments: {
$listeners: [ …1]
$eventName: "kernel.view"
$event: Symfony\Component\HttpKernel\Event\ViewEvent {#95731 …}
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php:154 {
Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher->dispatch(object $event, string $eventName = null): object …
› try {
› $this->dispatcher->dispatch($event, $eventName);
› } finally {
arguments: {
$event: Symfony\Component\HttpKernel\Event\ViewEvent {#95731 …}
$eventName: "kernel.view"
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/symfony/http-kernel/HttpKernel.php:168 {
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Request $request, int $type = self::MAIN_REQUEST): Response …
› $event = new ViewEvent($this, $request, $type, $response);
› $this->dispatcher->dispatch($event, KernelEvents::VIEW);
›
arguments: {
$event: Symfony\Component\HttpKernel\Event\ViewEvent {#95731 …}
$eventName: "kernel.view"
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/symfony/http-kernel/HttpKernel.php:75 {
Symfony\Component\HttpKernel\HttpKernel->handle(Request $request, int $type = HttpKernelInterface::MAIN_REQUEST, bool $catch = true) …
› try {
› return $this->handleRaw($request, $type);
› } catch (\Exception $e) {
arguments: {
$request: Symfony\Component\HttpFoundation\Request {#14 …}
$type: 1
}
}
/home/xs538259/exterior-plus.jp/public_html/vendor/symfony/http-kernel/Kernel.php:202 {
Symfony\Component\HttpKernel\Kernel->handle(Request $request, int $type = HttpKernelInterface::MAIN_REQUEST, bool $catch = true) …
› try {
› return $this->getHttpKernel()->handle($request, $type, $catch);
› } finally {
arguments: {
$request: Symfony\Component\HttpFoundation\Request {#14 …}
$type: 1
$catch: true
}
}
/home/xs538259/exterior-plus.jp/public_html/index.php:83 {
› $kernel = new Kernel($env, $debug);
› $response = $kernel->handle($request);
› $response->send();
arguments: {
$request: Symfony\Component\HttpFoundation\Request {#14 …}
}
}
}
} |