Diff
checker
Text
Text
Images
Documents
Excel
Folders
Legal
Enterprise
Desktop
Pricing
Sign in
Download Diffchecker Desktop
Compare text
Find the difference between two text files
Tools
History
Real-time editor
Hide unchanged lines
Disable line wrap
Layout
Split
Unified
Diff precision
Smart
Word
Char
Syntax highlighting
Choose syntax
Ignore
Transform text
Go to first change
Edit input
Diffchecker Desktop
The most secure way to run Diffchecker. Get the Diffchecker Desktop app: your diffs never leave your computer!
Get Desktop
割引率の表示
Created
7 years ago
Diff never expires
Clear
Export
Share
Explain
0 removals
Lines
Total
Removed
Characters
Total
Removed
To continue using this feature, upgrade to
Diff
checker
Pro
View Pricing
381 lines
Copy
5 additions
Lines
Total
Added
Characters
Total
Added
To continue using this feature, upgrade to
Diff
checker
Pro
View Pricing
386 lines
Copy
{#
{#
This file is part of EC-CUBE
This file is part of EC-CUBE
Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
http://www.ec-cube.co.jp/
http://www.ec-cube.co.jp/
For the full copyright and license information, please view the LICENSE
For the full copyright and license information, please view the LICENSE
file that was distributed with this source code.
file that was distributed with this source code.
#}
#}
{% extends 'default_frame.twig' %}
{% extends 'default_frame.twig' %}
{% set body_class = 'product_page' %}
{% set body_class = 'product_page' %}
{% block stylesheet %}
{% block stylesheet %}
<style>
<style>
.slick-slider {
.slick-slider {
margin-bottom: 30px;
margin-bottom: 30px;
}
}
.slick-dots {
.slick-dots {
position: absolute;
position: absolute;
bottom: -45px;
bottom: -45px;
display: block;
display: block;
width: 100%;
width: 100%;
padding: 0;
padding: 0;
list-style: none;
list-style: none;
text-align: center;
text-align: center;
}
}
.slick-dots li {
.slick-dots li {
position: relative;
position: relative;
display: inline-block;
display: inline-block;
width: 20px;
width: 20px;
height: 20px;
height: 20px;
margin: 0 5px;
margin: 0 5px;
padding: 0;
padding: 0;
cursor: pointer;
cursor: pointer;
}
}
.slick-dots li button {
.slick-dots li button {
font-size: 0;
font-size: 0;
line-height: 0;
line-height: 0;
display: block;
display: block;
width: 20px;
width: 20px;
height: 20px;
height: 20px;
padding: 5px;
padding: 5px;
cursor: pointer;
cursor: pointer;
color: transparent;
color: transparent;
border: 0;
border: 0;
outline: none;
outline: none;
background: transparent;
background: transparent;
}
}
.slick-dots li button:hover,
.slick-dots li button:hover,
.slick-dots li button:focus {
.slick-dots li button:focus {
outline: none;
outline: none;
}
}
.slick-dots li button:hover:before,
.slick-dots li button:hover:before,
.slick-dots li button:focus:before {
.slick-dots li button:focus:before {
opacity: 1;
opacity: 1;
}
}
.slick-dots li button:before {
.slick-dots li button:before {
content: " ";
content: " ";
line-height: 20px;
line-height: 20px;
position: absolute;
position: absolute;
top: 0;
top: 0;
left: 0;
left: 0;
width: 12px;
width: 12px;
height: 12px;
height: 12px;
text-align: center;
text-align: center;
opacity: .25;
opacity: .25;
background-color: black;
background-color: black;
border-radius: 50%;
border-radius: 50%;
}
}
.slick-dots li.slick-active button:before {
.slick-dots li.slick-active button:before {
opacity: .75;
opacity: .75;
background-color: black;
background-color: black;
}
}
.slick-dots li button.thumbnail img {
.slick-dots li button.thumbnail img {
width: 0;
width: 0;
height: 0;
height: 0;
}
}
</style>
</style>
{% endblock %}
{% endblock %}
{% block javascript %}
{% block javascript %}
<script>
<script>
eccube.classCategories = {{ class_categories_as_json(Product)|raw }};
eccube.classCategories = {{ class_categories_as_json(Product)|raw }};
// 規格2に選択肢を割り当てる。
// 規格2に選択肢を割り当てる。
function fnSetClassCategories(form, classcat_id2_selected) {
function fnSetClassCategories(form, classcat_id2_selected) {
var $form = $(form);
var $form = $(form);
var product_id = $form.find('input[name=product_id]').val();
var product_id = $form.find('input[name=product_id]').val();
var $sele1 = $form.find('select[name=classcategory_id1]');
var $sele1 = $form.find('select[name=classcategory_id1]');
var $sele2 = $form.find('select[name=classcategory_id2]');
var $sele2 = $form.find('select[name=classcategory_id2]');
eccube.setClassCategories($form, product_id, $sele1, $sele2, classcat_id2_selected);
eccube.setClassCategories($form, product_id, $sele1, $sele2, classcat_id2_selected);
}
}
{% if form.classcategory_id2 is defined %}
{% if form.classcategory_id2 is defined %}
fnSetClassCategories(
fnSetClassCategories(
$('#form1'), {{ form.classcategory_id2.vars.value|json_encode|raw }}
$('#form1'), {{ form.classcategory_id2.vars.value|json_encode|raw }}
);
);
{% elseif form.classcategory_id1 is defined %}
{% elseif form.classcategory_id1 is defined %}
eccube.checkStock($('#form1'), {{ Product.id }}, {{ form.classcategory_id1.vars.value|json_encode|raw }}, null);
eccube.checkStock($('#form1'), {{ Product.id }}, {{ form.classcategory_id1.vars.value|json_encode|raw }}, null);
{% endif %}
{% endif %}
</script>
</script>
<script>
<script>
$(function() {
$(function() {
// bfcache無効化
// bfcache無効化
$(window).bind('pageshow', function(event) {
$(window).bind('pageshow', function(event) {
if (event.originalEvent.persisted) {
if (event.originalEvent.persisted) {
location.reload(true);
location.reload(true);
}
}
});
});
$('.item_visual').slick({
$('.item_visual').slick({
dots: false,
dots: false,
arrows: false,
arrows: false,
responsive: [{
responsive: [{
breakpoint: 768,
breakpoint: 768,
settings: {
settings: {
dots: true
dots: true
}
}
}]
}]
});
});
$('.slideThumb').on('click', function() {
$('.slideThumb').on('click', function() {
var index = $(this).attr('data-index');
var index = $(this).attr('data-index');
$('.item_visual').slick('slickGoTo', index, false);
$('.item_visual').slick('slickGoTo', index, false);
})
})
});
});
</script>
</script>
<script>
<script>
$(function() {
$(function() {
$('.add-cart').on('click', function(event) {
$('.add-cart').on('click', function(event) {
{% if form.classcategory_id1 is defined %}
{% if form.classcategory_id1 is defined %}
// 規格1フォームの必須チェック
// 規格1フォームの必須チェック
if ($('#classcategory_id1').val() == '__unselected' || $('#classcategory_id1').val() == '') {
if ($('#classcategory_id1').val() == '__unselected' || $('#classcategory_id1').val() == '') {
$('#classcategory_id1')[0].setCustomValidity('{{ 'front.product.product_class_unselected'|trans }}');
$('#classcategory_id1')[0].setCustomValidity('{{ 'front.product.product_class_unselected'|trans }}');
return true;
return true;
} else {
} else {
$('#classcategory_id1')[0].setCustomValidity('');
$('#classcategory_id1')[0].setCustomValidity('');
}
}
{% endif %}
{% endif %}
{% if form.classcategory_id2 is defined %}
{% if form.classcategory_id2 is defined %}
// 規格2フォームの必須チェック
// 規格2フォームの必須チェック
if ($('#classcategory_id2').val() == '__unselected' || $('#classcategory_id2').val() == '') {
if ($('#classcategory_id2').val() == '__unselected' || $('#classcategory_id2').val() == '') {
$('#classcategory_id2')[0].setCustomValidity('{{ 'front.product.product_class_unselected'|trans }}');
$('#classcategory_id2')[0].setCustomValidity('{{ 'front.product.product_class_unselected'|trans }}');
return true;
return true;
} else {
} else {
$('#classcategory_id2')[0].setCustomValidity('');
$('#classcategory_id2')[0].setCustomValidity('');
}
}
{% endif %}
{% endif %}
// 個数フォームのチェック
// 個数フォームのチェック
if ($('#quantity').val() < 1) {
if ($('#quantity').val() < 1) {
$('#quantity')[0].setCustomValidity('{{ 'front.product.invalid_quantity'|trans }}');
$('#quantity')[0].setCustomValidity('{{ 'front.product.invalid_quantity'|trans }}');
return true;
return true;
} else {
} else {
$('#quantity')[0].setCustomValidity('');
$('#quantity')[0].setCustomValidity('');
}
}
event.preventDefault();
event.preventDefault();
$form = $('#form1');
$form = $('#form1');
$.ajax({
$.ajax({
url: $form.attr('action'),
url: $form.attr('action'),
type: $form.attr('method'),
type: $form.attr('method'),
data: $form.serialize(),
data: $form.serialize(),
dataType: 'json',
dataType: 'json',
beforeSend: function(xhr, settings) {
beforeSend: function(xhr, settings) {
// Buttonを無効にする
// Buttonを無効にする
$('.add-cart').prop('disabled', true);
$('.add-cart').prop('disabled', true);
}
}
}).done(function(data) {
}).done(function(data) {
// レスポンス内のメッセージをalertで表示
// レスポンス内のメッセージをalertで表示
$.each(data.messages, function() {
$.each(data.messages, function() {
$('#ec-modal-header').html(this);
$('#ec-modal-header').html(this);
});
});
$('#ec-modal-checkbox').prop('checked', true);
$('#ec-modal-checkbox').prop('checked', true);
// カートブロックを更新する
// カートブロックを更新する
$.ajax({
$.ajax({
url: "{{ url('block_cart') }}",
url: "{{ url('block_cart') }}",
type: 'GET',
type: 'GET',
dataType: 'html'
dataType: 'html'
}).done(function(html) {
}).done(function(html) {
$('.ec-headerRole__cart').html(html);
$('.ec-headerRole__cart').html(html);
});
});
}).fail(function(data) {
}).fail(function(data) {
alert('{{ 'front.product.add_cart_error'|trans }}');
alert('{{ 'front.product.add_cart_error'|trans }}');
}).always(function(data) {
}).always(function(data) {
// Buttonを有効にする
// Buttonを有効にする
$('.add-cart').prop('disabled', false);
$('.add-cart').prop('disabled', false);
});
});
});
});
});
});
</script>
</script>
{% endblock %}
{% endblock %}
{% block main %}
{% block main %}
<div class="ec-productRole">
<div class="ec-productRole">
<div class="ec-grid2">
<div class="ec-grid2">
<div class="ec-grid2__cell">
<div class="ec-grid2__cell">
<div class="ec-sliderItemRole">
<div class="ec-sliderItemRole">
<div class="item_visual">
<div class="item_visual">
{% for ProductImage in Product.ProductImage %}
{% for ProductImage in Product.ProductImage %}
<div class="slide-item"><img src="{{ asset(ProductImage, 'save_image') }}"></div>
<div class="slide-item"><img src="{{ asset(ProductImage, 'save_image') }}"></div>
{% else %}
{% else %}
<div class="slide-item"><img src="{{ asset(''|no_image_product, 'save_image') }}"/></div>
<div class="slide-item"><img src="{{ asset(''|no_image_product, 'save_image') }}"/></div>
{% endfor %}
{% endfor %}
</div>
</div>
<div class="item_nav">
<div class="item_nav">
{% for ProductImage in Product.ProductImage %}
{% for ProductImage in Product.ProductImage %}
<div class="slideThumb" data-index="{{ loop.index0 }}"><img src="{{ asset(ProductImage, 'save_image') }}"></div>
<div class="slideThumb" data-index="{{ loop.index0 }}"><img src="{{ asset(ProductImage, 'save_image') }}"></div>
{% endfor %}
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
<div class="ec-grid2__cell">
<div class="ec-grid2__cell">
<div class="ec-productRole__profile">
<div class="ec-productRole__profile">
{# 商品名 #}
{# 商品名 #}
<div class="ec-productRole__title">
<div class="ec-productRole__title">
<h2 class="ec-headingTitle">{{ Product.name }}</h2>
<h2 class="ec-headingTitle">{{ Product.name }}</h2>
</div>
</div>
{# タグ #}
{# タグ #}
<ul class="ec-productRole__tags">
<ul class="ec-productRole__tags">
{% for Tag in Product.Tags %}
{% for Tag in Product.Tags %}
<li class="ec-productRole__tag tag_{{ Tag.id }}">{{ Tag }}</li>
<li class="ec-productRole__tag tag_{{ Tag.id }}">{{ Tag }}</li>
{% endfor %}
{% endfor %}
</ul>
</ul>
{# 通常価格 #}
{# 通常価格 #}
{% if Product.hasProductClass -%}
{% if Product.hasProductClass -%}
<div class="ec-productRole__priceRegular">
<div class="ec-productRole__priceRegular">
{% if Product.getPrice01Min is not null and Product.getPrice01IncTaxMin == Product.getPrice01IncTaxMax %}
{% if Product.getPrice01Min is not null and Product.getPrice01IncTaxMin == Product.getPrice01IncTaxMax %}
<span class="ec-productRole__priceRegularPrice">{{ 'front.product.normal_price'|trans }}:<span class="price01-default">{{ Product.getPrice01IncTaxMin|price }}</span></span>
<span class="ec-productRole__priceRegularPrice">{{ 'front.product.normal_price'|trans }}:<span class="price01-default">{{ Product.getPrice01IncTaxMin|price }}</span></span>
<span class="ec-productRole__priceRegularTax">{{ 'common.tax_include'|trans }}</span>
<span class="ec-productRole__priceRegularTax">{{ 'common.tax_include'|trans }}</span>
{% elseif Product.getPrice01Min is not null and Product.getPrice01Max is not null %}
{% elseif Product.getPrice01Min is not null and Product.getPrice01Max is not null %}
<span class="ec-productRole__priceRegularPrice">{{ 'front.product.normal_price'|trans }}:<span class="price01-default">{{ Product.getPrice01IncTaxMin|price }}~ {{ Product.getPrice01IncTaxMax|price }}</span></span>
<span class="ec-productRole__priceRegularPrice">{{ 'front.product.normal_price'|trans }}:<span class="price01-default">{{ Product.getPrice01IncTaxMin|price }}~ {{ Product.getPrice01IncTaxMax|price }}</span></span>
<span class="ec-productRole__priceRegularTax">{{ 'common.tax_include'|trans }}</span>
<span class="ec-productRole__priceRegularTax">{{ 'common.tax_include'|trans }}</span>
{% endif %}
{% endif %}
</div>
</div>
{% else %}
{% else %}
{% if Product.getPrice01Max is not null %}
{% if Product.getPrice01Max is not null %}
<span class="ec-productRole__priceRegularPrice">{{ 'front.product.normal_price'|trans }}:{{ Product.getPrice01IncTaxMin|price }}</span>
<span class="ec-productRole__priceRegularPrice">{{ 'front.product.normal_price'|trans }}:{{ Product.getPrice01IncTaxMin|price }}</span>
<span class="ec-productRole__priceRegularTax">{{ 'common.tax_include'|trans }}</span>
<span class="ec-productRole__priceRegularTax">{{ 'common.tax_include'|trans }}</span>
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{# 販売価格 #}
{# 販売価格 #}
<div class="ec-productRole__price">
<div class="ec-productRole__price">
{% if Product.hasProductClass -%}
{% if Product.hasProductClass -%}
{% if Product.getPrice02IncTaxMin == Product.getPrice02IncTaxMax %}
{% if Product.getPrice02IncTaxMin == Product.getPrice02IncTaxMax %}
<div class="ec-price">
<div class="ec-price">
<span class="ec-price__price price02-default">{{ Product.getPrice02IncTaxMin|price }}</span>
<span class="ec-price__price price02-default">{{ Product.getPrice02IncTaxMin|price }}</span>
<span class="ec-price__tax">{{ 'common.tax_include'|trans }}</span>
<span class="ec-price__tax">{{ 'common.tax_include'|trans }}</span>
</div>
</div>
{% else %}
{% else %}
<div class="ec-price">
<div class="ec-price">
<span class="ec-price__price price02-default">{{ Product.getPrice02IncTaxMin|price }} ~ {{ Product.getPrice02IncTaxMax|price }}</span>
<span class="ec-price__price price02-default">{{ Product.getPrice02IncTaxMin|price }} ~ {{ Product.getPrice02IncTaxMax|price }}</span>
<span class="ec-price__tax">{{ 'common.tax_include'|trans }}</span>
<span class="ec-price__tax">{{ 'common.tax_include'|trans }}</span>
</div>
</div>
{% endif %}
{% endif %}
{% else %}
{% else %}
<div class="ec-price">
<div class="ec-price">
<span class="ec-price__price">{{ Product.getPrice02IncTaxMin|price }}</span>
<span class="ec-price__price">{{ Product.getPrice02IncTaxMin|price }}</span>
<span class="ec-price__tax">{{ 'common.tax_include'|trans }}</span>
<span class="ec-price__tax">{{ 'common.tax_include'|trans }}</span>
Copy
Copied
Copy
Copied
{% if Product.Price01Max is not null %}
{% set discountRate = (1.0 - (Product.Price02Min / Product.Price01Min)) * 100 %}
<div class="ec-color-red ec-font-size-3">(通常価格より {{discountRate|round}}% 割引)</div>
{% endif %}
</div>
</div>
{% endif %}
{% endif %}
</div>
</div>
{# 商品コード #}
{# 商品コード #}
{% if Product.code_min is not empty %}
{% if Product.code_min is not empty %}
<div class="ec-productRole__code">
<div class="ec-productRole__code">
{{ 'front.product.code'|trans }}: <span class="product-code-default">{{ Product.code_min }}{% if Product.code_min != Product.code_max %} ~ {{ Product.code_max }}{% endif %}</span>
{{ 'front.product.code'|trans }}: <span class="product-code-default">{{ Product.code_min }}{% if Product.code_min != Product.code_max %} ~ {{ Product.code_max }}{% endif %}</span>
</div>
</div>
{% endif %}
{% endif %}
{# 関連カテゴリ #}
{# 関連カテゴリ #}
{% if Product.ProductCategories is not empty %}
{% if Product.ProductCategories is not empty %}
<div class="ec-productRole__category">
<div class="ec-productRole__category">
<div>{{ 'front.product.related_category'|trans }}</div>
<div>{{ 'front.product.related_category'|trans }}</div>
{% for ProductCategory in Product.ProductCategories %}
{% for ProductCategory in Product.ProductCategories %}
<ul>
<ul>
<li>
<li>
{% for Category in ProductCategory.Category.path %}
{% for Category in ProductCategory.Category.path %}
<a href="{{ url('product_list') }}?category_id={{ Category.id }}">{{ Category.name }}</a> {%- if loop.last == false %}
<a href="{{ url('product_list') }}?category_id={{ Category.id }}">{{ Category.name }}</a> {%- if loop.last == false %}
<span>></span>{% endif -%}
<span>></span>{% endif -%}
{% endfor %}
{% endfor %}
</li>
</li>
</ul>
</ul>
{% endfor %}
{% endfor %}
</div>
</div>
{% endif %}
{% endif %}
<form action="{{ url('product_add_cart', {id:Product.id}) }}" method="post" id="form1" name="form1">
<form action="{{ url('product_add_cart', {id:Product.id}) }}" method="post" id="form1" name="form1">
{% if Product.stock_find %}
{% if Product.stock_find %}
<div class="ec-productRole__actions">
<div class="ec-productRole__actions">
{% if form.classcategory_id1 is defined %}
{% if form.classcategory_id1 is defined %}
<div class="ec-select">
<div class="ec-select">
{{ form_widget(form.classcategory_id1) }}
{{ form_widget(form.classcategory_id1) }}
{{ form_errors(form.classcategory_id1) }}
{{ form_errors(form.classcategory_id1) }}
</div>
</div>
{% if form.classcategory_id2 is defined %}
{% if form.classcategory_id2 is defined %}
<div class="ec-select">
<div class="ec-select">
{{ form_widget(form.classcategory_id2) }}
{{ form_widget(form.classcategory_id2) }}
{{ form_errors(form.classcategory_id2) }}
{{ form_errors(form.classcategory_id2) }}
</div>
</div>
{% endif %}
{% endif %}
{% endif %}
{% endif %}
<div class="ec-numberInput"><span>{{ 'common.quantity'|trans }}</span>
<div class="ec-numberInput"><span>{{ 'common.quantity'|trans }}</span>
{{ form_widget(form.quantity) }}
{{ form_widget(form.quantity) }}
{{ form_errors(form.quantity) }}
{{ form_errors(form.quantity) }}
</div>
</div>
</div>
</div>
<div class="ec-productRole__btn">
<div class="ec-productRole__btn">
<button type="submit" class="ec-blockBtn--action add-cart">
<button type="submit" class="ec-blockBtn--action add-cart">
{{ 'front.product.add_cart'|trans }}
{{ 'front.product.add_cart'|trans }}
</button>
</button>
</div>
</div>
{% else %}
{% else %}
<div class="ec-productRole__btn">
<div class="ec-productRole__btn">
<button type="button" class="ec-blockBtn--action" disabled="disabled">
<button type="button" class="ec-blockBtn--action" disabled="disabled">
{{ 'front.product.out_of_stock'|trans }}
{{ 'front.product.out_of_stock'|trans }}
</button>
</button>
</div>
</div>
{% endif %}
{% endif %}
{{ form_rest(form) }}
{{ form_rest(form) }}
</form>
</form>
<div class="ec-modal">
<div class="ec-modal">
<input type="checkbox" id="ec-modal-checkbox" class="checkbox">
<input type="checkbox" id="ec-modal-checkbox" class="checkbox">
<div class="ec-modal-overlay">
<div class="ec-modal-overlay">
<label for="ec-modal-checkbox" class="ec-modal-overlay-close"></label>
<label for="ec-modal-checkbox" class="ec-modal-overlay-close"></label>
<div class="ec-modal-wrap">
<div class="ec-modal-wrap">
<label for="ec-modal-checkbox" class="ec-modal-close"><span class="ec-icon"><img src="{{ asset('assets/icon/cross-dark.svg') }}" alt=""/></span></label>
<label for="ec-modal-checkbox" class="ec-modal-close"><span class="ec-icon"><img src="{{ asset('assets/icon/cross-dark.svg') }}" alt=""/></span></label>
<div id="ec-modal-header" class="text-center">{{ 'front.product.add_cart_complete'|trans }}</div>
<div id="ec-modal-header" class="text-center">{{ 'front.product.add_cart_complete'|trans }}</div>
<div class="ec-modal-box">
<div class="ec-modal-box">
<div class="ec-role">
<div class="ec-role">
<label for="ec-modal-checkbox" class="ec-inlineBtn--cancel">{{ 'front.product.continue'|trans }}</label>
<label for="ec-modal-checkbox" class="ec-inlineBtn--cancel">{{ 'front.product.continue'|trans }}</label>
<a href="{{ url('cart') }}" class="ec-inlineBtn--action">{{ 'common.go_to_cart'|trans }}</a>
<a href="{{ url('cart') }}" class="ec-inlineBtn--action">{{ 'common.go_to_cart'|trans }}</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% if BaseInfo.option_favorite_product %}
{% if BaseInfo.option_favorite_product %}
<form action="{{ url('product_add_favorite', {id:Product.id}) }}" method="post">
<form action="{{ url('product_add_favorite', {id:Product.id}) }}" method="post">
<div class="ec-productRole__btn">
<div class="ec-productRole__btn">
{% if is_favorite == false %}
{% if is_favorite == false %}
<button type="submit" id="favorite" class="ec-blockBtn--cancel">
<button type="submit" id="favorite" class="ec-blockBtn--cancel">
{{ 'front.product.add_favorite'|trans }}
{{ 'front.product.add_favorite'|trans }}
</button>
</button>
{% else %}
{% else %}
<button type="submit" id="favorite" class="ec-blockBtn--cancel"
<button type="submit" id="favorite" class="ec-blockBtn--cancel"
disabled="disabled">{{ 'front.product.add_favorite_alrady'|trans }}
disabled="disabled">{{ 'front.product.add_favorite_alrady'|trans }}
</button>
</button>
{% endif %}
{% endif %}
</div>
</div>
</form>
</form>
{% endif %}
{% endif %}
<div class="ec-productRole__description">{{ Product.description_detail|raw|nl2br }}
<div class="ec-productRole__description">{{ Product.description_detail|raw|nl2br }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% if Product.freearea %}
{% if Product.freearea %}
<div class="ec-productRole__description">
<div class="ec-productRole__description">
{{ include(template_from_string(Product.freearea)) }}
{{ include(template_from_string(Product.freearea)) }}
</div>
</div>
{% endif %}
{% endif %}
</div>
</div>
{% endblock %}
{% endblock %}
Saved diffs
Original text
Open file
{# This file is part of EC-CUBE Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved. http://www.ec-cube.co.jp/ For the full copyright and license information, please view the LICENSE file that was distributed with this source code. #} {% extends 'default_frame.twig' %} {% set body_class = 'product_page' %} {% block stylesheet %} <style> .slick-slider { margin-bottom: 30px; } .slick-dots { position: absolute; bottom: -45px; display: block; width: 100%; padding: 0; list-style: none; text-align: center; } .slick-dots li { position: relative; display: inline-block; width: 20px; height: 20px; margin: 0 5px; padding: 0; cursor: pointer; } .slick-dots li button { font-size: 0; line-height: 0; display: block; width: 20px; height: 20px; padding: 5px; cursor: pointer; color: transparent; border: 0; outline: none; background: transparent; } .slick-dots li button:hover, .slick-dots li button:focus { outline: none; } .slick-dots li button:hover:before, .slick-dots li button:focus:before { opacity: 1; } .slick-dots li button:before { content: " "; line-height: 20px; position: absolute; top: 0; left: 0; width: 12px; height: 12px; text-align: center; opacity: .25; background-color: black; border-radius: 50%; } .slick-dots li.slick-active button:before { opacity: .75; background-color: black; } .slick-dots li button.thumbnail img { width: 0; height: 0; } </style> {% endblock %} {% block javascript %} <script> eccube.classCategories = {{ class_categories_as_json(Product)|raw }}; // 規格2に選択肢を割り当てる。 function fnSetClassCategories(form, classcat_id2_selected) { var $form = $(form); var product_id = $form.find('input[name=product_id]').val(); var $sele1 = $form.find('select[name=classcategory_id1]'); var $sele2 = $form.find('select[name=classcategory_id2]'); eccube.setClassCategories($form, product_id, $sele1, $sele2, classcat_id2_selected); } {% if form.classcategory_id2 is defined %} fnSetClassCategories( $('#form1'), {{ form.classcategory_id2.vars.value|json_encode|raw }} ); {% elseif form.classcategory_id1 is defined %} eccube.checkStock($('#form1'), {{ Product.id }}, {{ form.classcategory_id1.vars.value|json_encode|raw }}, null); {% endif %} </script> <script> $(function() { // bfcache無効化 $(window).bind('pageshow', function(event) { if (event.originalEvent.persisted) { location.reload(true); } }); $('.item_visual').slick({ dots: false, arrows: false, responsive: [{ breakpoint: 768, settings: { dots: true } }] }); $('.slideThumb').on('click', function() { var index = $(this).attr('data-index'); $('.item_visual').slick('slickGoTo', index, false); }) }); </script> <script> $(function() { $('.add-cart').on('click', function(event) { {% if form.classcategory_id1 is defined %} // 規格1フォームの必須チェック if ($('#classcategory_id1').val() == '__unselected' || $('#classcategory_id1').val() == '') { $('#classcategory_id1')[0].setCustomValidity('{{ 'front.product.product_class_unselected'|trans }}'); return true; } else { $('#classcategory_id1')[0].setCustomValidity(''); } {% endif %} {% if form.classcategory_id2 is defined %} // 規格2フォームの必須チェック if ($('#classcategory_id2').val() == '__unselected' || $('#classcategory_id2').val() == '') { $('#classcategory_id2')[0].setCustomValidity('{{ 'front.product.product_class_unselected'|trans }}'); return true; } else { $('#classcategory_id2')[0].setCustomValidity(''); } {% endif %} // 個数フォームのチェック if ($('#quantity').val() < 1) { $('#quantity')[0].setCustomValidity('{{ 'front.product.invalid_quantity'|trans }}'); return true; } else { $('#quantity')[0].setCustomValidity(''); } event.preventDefault(); $form = $('#form1'); $.ajax({ url: $form.attr('action'), type: $form.attr('method'), data: $form.serialize(), dataType: 'json', beforeSend: function(xhr, settings) { // Buttonを無効にする $('.add-cart').prop('disabled', true); } }).done(function(data) { // レスポンス内のメッセージをalertで表示 $.each(data.messages, function() { $('#ec-modal-header').html(this); }); $('#ec-modal-checkbox').prop('checked', true); // カートブロックを更新する $.ajax({ url: "{{ url('block_cart') }}", type: 'GET', dataType: 'html' }).done(function(html) { $('.ec-headerRole__cart').html(html); }); }).fail(function(data) { alert('{{ 'front.product.add_cart_error'|trans }}'); }).always(function(data) { // Buttonを有効にする $('.add-cart').prop('disabled', false); }); }); }); </script> {% endblock %} {% block main %} <div class="ec-productRole"> <div class="ec-grid2"> <div class="ec-grid2__cell"> <div class="ec-sliderItemRole"> <div class="item_visual"> {% for ProductImage in Product.ProductImage %} <div class="slide-item"><img src="{{ asset(ProductImage, 'save_image') }}"></div> {% else %} <div class="slide-item"><img src="{{ asset(''|no_image_product, 'save_image') }}"/></div> {% endfor %} </div> <div class="item_nav"> {% for ProductImage in Product.ProductImage %} <div class="slideThumb" data-index="{{ loop.index0 }}"><img src="{{ asset(ProductImage, 'save_image') }}"></div> {% endfor %} </div> </div> </div> <div class="ec-grid2__cell"> <div class="ec-productRole__profile"> {# 商品名 #} <div class="ec-productRole__title"> <h2 class="ec-headingTitle">{{ Product.name }}</h2> </div> {# タグ #} <ul class="ec-productRole__tags"> {% for Tag in Product.Tags %} <li class="ec-productRole__tag tag_{{ Tag.id }}">{{ Tag }}</li> {% endfor %} </ul> {# 通常価格 #} {% if Product.hasProductClass -%} <div class="ec-productRole__priceRegular"> {% if Product.getPrice01Min is not null and Product.getPrice01IncTaxMin == Product.getPrice01IncTaxMax %} <span class="ec-productRole__priceRegularPrice">{{ 'front.product.normal_price'|trans }}:<span class="price01-default">{{ Product.getPrice01IncTaxMin|price }}</span></span> <span class="ec-productRole__priceRegularTax">{{ 'common.tax_include'|trans }}</span> {% elseif Product.getPrice01Min is not null and Product.getPrice01Max is not null %} <span class="ec-productRole__priceRegularPrice">{{ 'front.product.normal_price'|trans }}:<span class="price01-default">{{ Product.getPrice01IncTaxMin|price }}~ {{ Product.getPrice01IncTaxMax|price }}</span></span> <span class="ec-productRole__priceRegularTax">{{ 'common.tax_include'|trans }}</span> {% endif %} </div> {% else %} {% if Product.getPrice01Max is not null %} <span class="ec-productRole__priceRegularPrice">{{ 'front.product.normal_price'|trans }}:{{ Product.getPrice01IncTaxMin|price }}</span> <span class="ec-productRole__priceRegularTax">{{ 'common.tax_include'|trans }}</span> {% endif %} {% endif %} {# 販売価格 #} <div class="ec-productRole__price"> {% if Product.hasProductClass -%} {% if Product.getPrice02IncTaxMin == Product.getPrice02IncTaxMax %} <div class="ec-price"> <span class="ec-price__price price02-default">{{ Product.getPrice02IncTaxMin|price }}</span> <span class="ec-price__tax">{{ 'common.tax_include'|trans }}</span> </div> {% else %} <div class="ec-price"> <span class="ec-price__price price02-default">{{ Product.getPrice02IncTaxMin|price }} ~ {{ Product.getPrice02IncTaxMax|price }}</span> <span class="ec-price__tax">{{ 'common.tax_include'|trans }}</span> </div> {% endif %} {% else %} <div class="ec-price"> <span class="ec-price__price">{{ Product.getPrice02IncTaxMin|price }}</span> <span class="ec-price__tax">{{ 'common.tax_include'|trans }}</span> </div> {% endif %} </div> {# 商品コード #} {% if Product.code_min is not empty %} <div class="ec-productRole__code"> {{ 'front.product.code'|trans }}: <span class="product-code-default">{{ Product.code_min }}{% if Product.code_min != Product.code_max %} ~ {{ Product.code_max }}{% endif %}</span> </div> {% endif %} {# 関連カテゴリ #} {% if Product.ProductCategories is not empty %} <div class="ec-productRole__category"> <div>{{ 'front.product.related_category'|trans }}</div> {% for ProductCategory in Product.ProductCategories %} <ul> <li> {% for Category in ProductCategory.Category.path %} <a href="{{ url('product_list') }}?category_id={{ Category.id }}">{{ Category.name }}</a> {%- if loop.last == false %} <span>></span>{% endif -%} {% endfor %} </li> </ul> {% endfor %} </div> {% endif %} <form action="{{ url('product_add_cart', {id:Product.id}) }}" method="post" id="form1" name="form1"> {% if Product.stock_find %} <div class="ec-productRole__actions"> {% if form.classcategory_id1 is defined %} <div class="ec-select"> {{ form_widget(form.classcategory_id1) }} {{ form_errors(form.classcategory_id1) }} </div> {% if form.classcategory_id2 is defined %} <div class="ec-select"> {{ form_widget(form.classcategory_id2) }} {{ form_errors(form.classcategory_id2) }} </div> {% endif %} {% endif %} <div class="ec-numberInput"><span>{{ 'common.quantity'|trans }}</span> {{ form_widget(form.quantity) }} {{ form_errors(form.quantity) }} </div> </div> <div class="ec-productRole__btn"> <button type="submit" class="ec-blockBtn--action add-cart"> {{ 'front.product.add_cart'|trans }} </button> </div> {% else %} <div class="ec-productRole__btn"> <button type="button" class="ec-blockBtn--action" disabled="disabled"> {{ 'front.product.out_of_stock'|trans }} </button> </div> {% endif %} {{ form_rest(form) }} </form> <div class="ec-modal"> <input type="checkbox" id="ec-modal-checkbox" class="checkbox"> <div class="ec-modal-overlay"> <label for="ec-modal-checkbox" class="ec-modal-overlay-close"></label> <div class="ec-modal-wrap"> <label for="ec-modal-checkbox" class="ec-modal-close"><span class="ec-icon"><img src="{{ asset('assets/icon/cross-dark.svg') }}" alt=""/></span></label> <div id="ec-modal-header" class="text-center">{{ 'front.product.add_cart_complete'|trans }}</div> <div class="ec-modal-box"> <div class="ec-role"> <label for="ec-modal-checkbox" class="ec-inlineBtn--cancel">{{ 'front.product.continue'|trans }}</label> <a href="{{ url('cart') }}" class="ec-inlineBtn--action">{{ 'common.go_to_cart'|trans }}</a> </div> </div> </div> </div> </div> {% if BaseInfo.option_favorite_product %} <form action="{{ url('product_add_favorite', {id:Product.id}) }}" method="post"> <div class="ec-productRole__btn"> {% if is_favorite == false %} <button type="submit" id="favorite" class="ec-blockBtn--cancel"> {{ 'front.product.add_favorite'|trans }} </button> {% else %} <button type="submit" id="favorite" class="ec-blockBtn--cancel" disabled="disabled">{{ 'front.product.add_favorite_alrady'|trans }} </button> {% endif %} </div> </form> {% endif %} <div class="ec-productRole__description">{{ Product.description_detail|raw|nl2br }} </div> </div> </div> </div> {% if Product.freearea %} <div class="ec-productRole__description"> {{ include(template_from_string(Product.freearea)) }} </div> {% endif %} </div> {% endblock %}
Changed text
Open file
{# This file is part of EC-CUBE Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved. http://www.ec-cube.co.jp/ For the full copyright and license information, please view the LICENSE file that was distributed with this source code. #} {% extends 'default_frame.twig' %} {% set body_class = 'product_page' %} {% block stylesheet %} <style> .slick-slider { margin-bottom: 30px; } .slick-dots { position: absolute; bottom: -45px; display: block; width: 100%; padding: 0; list-style: none; text-align: center; } .slick-dots li { position: relative; display: inline-block; width: 20px; height: 20px; margin: 0 5px; padding: 0; cursor: pointer; } .slick-dots li button { font-size: 0; line-height: 0; display: block; width: 20px; height: 20px; padding: 5px; cursor: pointer; color: transparent; border: 0; outline: none; background: transparent; } .slick-dots li button:hover, .slick-dots li button:focus { outline: none; } .slick-dots li button:hover:before, .slick-dots li button:focus:before { opacity: 1; } .slick-dots li button:before { content: " "; line-height: 20px; position: absolute; top: 0; left: 0; width: 12px; height: 12px; text-align: center; opacity: .25; background-color: black; border-radius: 50%; } .slick-dots li.slick-active button:before { opacity: .75; background-color: black; } .slick-dots li button.thumbnail img { width: 0; height: 0; } </style> {% endblock %} {% block javascript %} <script> eccube.classCategories = {{ class_categories_as_json(Product)|raw }}; // 規格2に選択肢を割り当てる。 function fnSetClassCategories(form, classcat_id2_selected) { var $form = $(form); var product_id = $form.find('input[name=product_id]').val(); var $sele1 = $form.find('select[name=classcategory_id1]'); var $sele2 = $form.find('select[name=classcategory_id2]'); eccube.setClassCategories($form, product_id, $sele1, $sele2, classcat_id2_selected); } {% if form.classcategory_id2 is defined %} fnSetClassCategories( $('#form1'), {{ form.classcategory_id2.vars.value|json_encode|raw }} ); {% elseif form.classcategory_id1 is defined %} eccube.checkStock($('#form1'), {{ Product.id }}, {{ form.classcategory_id1.vars.value|json_encode|raw }}, null); {% endif %} </script> <script> $(function() { // bfcache無効化 $(window).bind('pageshow', function(event) { if (event.originalEvent.persisted) { location.reload(true); } }); $('.item_visual').slick({ dots: false, arrows: false, responsive: [{ breakpoint: 768, settings: { dots: true } }] }); $('.slideThumb').on('click', function() { var index = $(this).attr('data-index'); $('.item_visual').slick('slickGoTo', index, false); }) }); </script> <script> $(function() { $('.add-cart').on('click', function(event) { {% if form.classcategory_id1 is defined %} // 規格1フォームの必須チェック if ($('#classcategory_id1').val() == '__unselected' || $('#classcategory_id1').val() == '') { $('#classcategory_id1')[0].setCustomValidity('{{ 'front.product.product_class_unselected'|trans }}'); return true; } else { $('#classcategory_id1')[0].setCustomValidity(''); } {% endif %} {% if form.classcategory_id2 is defined %} // 規格2フォームの必須チェック if ($('#classcategory_id2').val() == '__unselected' || $('#classcategory_id2').val() == '') { $('#classcategory_id2')[0].setCustomValidity('{{ 'front.product.product_class_unselected'|trans }}'); return true; } else { $('#classcategory_id2')[0].setCustomValidity(''); } {% endif %} // 個数フォームのチェック if ($('#quantity').val() < 1) { $('#quantity')[0].setCustomValidity('{{ 'front.product.invalid_quantity'|trans }}'); return true; } else { $('#quantity')[0].setCustomValidity(''); } event.preventDefault(); $form = $('#form1'); $.ajax({ url: $form.attr('action'), type: $form.attr('method'), data: $form.serialize(), dataType: 'json', beforeSend: function(xhr, settings) { // Buttonを無効にする $('.add-cart').prop('disabled', true); } }).done(function(data) { // レスポンス内のメッセージをalertで表示 $.each(data.messages, function() { $('#ec-modal-header').html(this); }); $('#ec-modal-checkbox').prop('checked', true); // カートブロックを更新する $.ajax({ url: "{{ url('block_cart') }}", type: 'GET', dataType: 'html' }).done(function(html) { $('.ec-headerRole__cart').html(html); }); }).fail(function(data) { alert('{{ 'front.product.add_cart_error'|trans }}'); }).always(function(data) { // Buttonを有効にする $('.add-cart').prop('disabled', false); }); }); }); </script> {% endblock %} {% block main %} <div class="ec-productRole"> <div class="ec-grid2"> <div class="ec-grid2__cell"> <div class="ec-sliderItemRole"> <div class="item_visual"> {% for ProductImage in Product.ProductImage %} <div class="slide-item"><img src="{{ asset(ProductImage, 'save_image') }}"></div> {% else %} <div class="slide-item"><img src="{{ asset(''|no_image_product, 'save_image') }}"/></div> {% endfor %} </div> <div class="item_nav"> {% for ProductImage in Product.ProductImage %} <div class="slideThumb" data-index="{{ loop.index0 }}"><img src="{{ asset(ProductImage, 'save_image') }}"></div> {% endfor %} </div> </div> </div> <div class="ec-grid2__cell"> <div class="ec-productRole__profile"> {# 商品名 #} <div class="ec-productRole__title"> <h2 class="ec-headingTitle">{{ Product.name }}</h2> </div> {# タグ #} <ul class="ec-productRole__tags"> {% for Tag in Product.Tags %} <li class="ec-productRole__tag tag_{{ Tag.id }}">{{ Tag }}</li> {% endfor %} </ul> {# 通常価格 #} {% if Product.hasProductClass -%} <div class="ec-productRole__priceRegular"> {% if Product.getPrice01Min is not null and Product.getPrice01IncTaxMin == Product.getPrice01IncTaxMax %} <span class="ec-productRole__priceRegularPrice">{{ 'front.product.normal_price'|trans }}:<span class="price01-default">{{ Product.getPrice01IncTaxMin|price }}</span></span> <span class="ec-productRole__priceRegularTax">{{ 'common.tax_include'|trans }}</span> {% elseif Product.getPrice01Min is not null and Product.getPrice01Max is not null %} <span class="ec-productRole__priceRegularPrice">{{ 'front.product.normal_price'|trans }}:<span class="price01-default">{{ Product.getPrice01IncTaxMin|price }}~ {{ Product.getPrice01IncTaxMax|price }}</span></span> <span class="ec-productRole__priceRegularTax">{{ 'common.tax_include'|trans }}</span> {% endif %} </div> {% else %} {% if Product.getPrice01Max is not null %} <span class="ec-productRole__priceRegularPrice">{{ 'front.product.normal_price'|trans }}:{{ Product.getPrice01IncTaxMin|price }}</span> <span class="ec-productRole__priceRegularTax">{{ 'common.tax_include'|trans }}</span> {% endif %} {% endif %} {# 販売価格 #} <div class="ec-productRole__price"> {% if Product.hasProductClass -%} {% if Product.getPrice02IncTaxMin == Product.getPrice02IncTaxMax %} <div class="ec-price"> <span class="ec-price__price price02-default">{{ Product.getPrice02IncTaxMin|price }}</span> <span class="ec-price__tax">{{ 'common.tax_include'|trans }}</span> </div> {% else %} <div class="ec-price"> <span class="ec-price__price price02-default">{{ Product.getPrice02IncTaxMin|price }} ~ {{ Product.getPrice02IncTaxMax|price }}</span> <span class="ec-price__tax">{{ 'common.tax_include'|trans }}</span> </div> {% endif %} {% else %} <div class="ec-price"> <span class="ec-price__price">{{ Product.getPrice02IncTaxMin|price }}</span> <span class="ec-price__tax">{{ 'common.tax_include'|trans }}</span> {% if Product.Price01Max is not null %} {% set discountRate = (1.0 - (Product.Price02Min / Product.Price01Min)) * 100 %} <div class="ec-color-red ec-font-size-3">(通常価格より {{discountRate|round}}% 割引)</div> {% endif %} </div> {% endif %} </div> {# 商品コード #} {% if Product.code_min is not empty %} <div class="ec-productRole__code"> {{ 'front.product.code'|trans }}: <span class="product-code-default">{{ Product.code_min }}{% if Product.code_min != Product.code_max %} ~ {{ Product.code_max }}{% endif %}</span> </div> {% endif %} {# 関連カテゴリ #} {% if Product.ProductCategories is not empty %} <div class="ec-productRole__category"> <div>{{ 'front.product.related_category'|trans }}</div> {% for ProductCategory in Product.ProductCategories %} <ul> <li> {% for Category in ProductCategory.Category.path %} <a href="{{ url('product_list') }}?category_id={{ Category.id }}">{{ Category.name }}</a> {%- if loop.last == false %} <span>></span>{% endif -%} {% endfor %} </li> </ul> {% endfor %} </div> {% endif %} <form action="{{ url('product_add_cart', {id:Product.id}) }}" method="post" id="form1" name="form1"> {% if Product.stock_find %} <div class="ec-productRole__actions"> {% if form.classcategory_id1 is defined %} <div class="ec-select"> {{ form_widget(form.classcategory_id1) }} {{ form_errors(form.classcategory_id1) }} </div> {% if form.classcategory_id2 is defined %} <div class="ec-select"> {{ form_widget(form.classcategory_id2) }} {{ form_errors(form.classcategory_id2) }} </div> {% endif %} {% endif %} <div class="ec-numberInput"><span>{{ 'common.quantity'|trans }}</span> {{ form_widget(form.quantity) }} {{ form_errors(form.quantity) }} </div> </div> <div class="ec-productRole__btn"> <button type="submit" class="ec-blockBtn--action add-cart"> {{ 'front.product.add_cart'|trans }} </button> </div> {% else %} <div class="ec-productRole__btn"> <button type="button" class="ec-blockBtn--action" disabled="disabled"> {{ 'front.product.out_of_stock'|trans }} </button> </div> {% endif %} {{ form_rest(form) }} </form> <div class="ec-modal"> <input type="checkbox" id="ec-modal-checkbox" class="checkbox"> <div class="ec-modal-overlay"> <label for="ec-modal-checkbox" class="ec-modal-overlay-close"></label> <div class="ec-modal-wrap"> <label for="ec-modal-checkbox" class="ec-modal-close"><span class="ec-icon"><img src="{{ asset('assets/icon/cross-dark.svg') }}" alt=""/></span></label> <div id="ec-modal-header" class="text-center">{{ 'front.product.add_cart_complete'|trans }}</div> <div class="ec-modal-box"> <div class="ec-role"> <label for="ec-modal-checkbox" class="ec-inlineBtn--cancel">{{ 'front.product.continue'|trans }}</label> <a href="{{ url('cart') }}" class="ec-inlineBtn--action">{{ 'common.go_to_cart'|trans }}</a> </div> </div> </div> </div> </div> {% if BaseInfo.option_favorite_product %} <form action="{{ url('product_add_favorite', {id:Product.id}) }}" method="post"> <div class="ec-productRole__btn"> {% if is_favorite == false %} <button type="submit" id="favorite" class="ec-blockBtn--cancel"> {{ 'front.product.add_favorite'|trans }} </button> {% else %} <button type="submit" id="favorite" class="ec-blockBtn--cancel" disabled="disabled">{{ 'front.product.add_favorite_alrady'|trans }} </button> {% endif %} </div> </form> {% endif %} <div class="ec-productRole__description">{{ Product.description_detail|raw|nl2br }} </div> </div> </div> </div> {% if Product.freearea %} <div class="ec-productRole__description"> {{ include(template_from_string(Product.freearea)) }} </div> {% endif %} </div> {% endblock %}
Find difference