first commit
This commit is contained in:
55
catalog/view/template/account/account.twig
Normal file
55
catalog/view/template/account/account.twig
Normal file
@ -0,0 +1,55 @@
|
||||
{{ header }}
|
||||
<div id="account-account" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% if success %}
|
||||
<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> {{ success }}</div>
|
||||
{% endif %}
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h2>{{ text_my_account }}</h2>
|
||||
<ul class="list-unstyled">
|
||||
<li><a href="{{ edit }}">{{ text_edit }}</a></li>
|
||||
<li><a href="{{ password }}">{{ text_password }}</a></li>
|
||||
<li><a href="{{ address }}">{{ text_address }}</a></li>
|
||||
<li><a href="{{ wishlist }}">{{ text_wishlist }}</a></li>
|
||||
</ul>
|
||||
<h2>
|
||||
{{ text_my_orders }}
|
||||
</h2>
|
||||
<ul class="list-unstyled">
|
||||
<li><a href="{{ order }}">{{ text_order }}</a></li>
|
||||
<li><a href="{{ subscription }}">{{ text_subscription }}</a></li>
|
||||
<li><a href="{{ download }}">{{ text_download }}</a></li>
|
||||
{% if reward %}
|
||||
<li><a href="{{ reward }}">{{ text_reward }}</a></li>
|
||||
{% endif %}
|
||||
<li><a href="{{ return }}">{{ text_return }}</a></li>
|
||||
<li><a href="{{ transaction }}">{{ text_transaction }}</a></li>
|
||||
</ul>
|
||||
{% if affiliate %}
|
||||
<h2>
|
||||
{{ text_my_affiliate }}
|
||||
</h2>
|
||||
<ul class="list-unstyled">
|
||||
{% if not tracking %}
|
||||
<li><a href="{{ affiliate }}">{{ text_affiliate_add }}</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{ affiliate }}">{{ text_affiliate_edit }}</a></li>
|
||||
<li><a href="{{ tracking }}">{{ text_tracking }}</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
<h2>
|
||||
{{ text_my_newsletter }}
|
||||
</h2>
|
||||
<ul class="list-unstyled">
|
||||
<li><a href="{{ newsletter }}">{{ text_newsletter }}</a></li>
|
||||
</ul>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
62
catalog/view/template/account/address.twig
Normal file
62
catalog/view/template/account/address.twig
Normal file
@ -0,0 +1,62 @@
|
||||
{{ header }}
|
||||
<div id="account-address" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% if success %}
|
||||
<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> {{ success }}</div>
|
||||
{% endif %}
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ text_address_book }}</h1>
|
||||
<div id="address">{{ list }}</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href="{{ back }}" class="btn btn-light">{{ button_back }}</a>
|
||||
</div>
|
||||
<div class="col text-end">
|
||||
<a href="{{ add }}" class="btn btn-primary">{{ button_new_address }}</a>
|
||||
</div>
|
||||
</div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('#address').on('click', '.btn-danger', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
var element = this;
|
||||
|
||||
$.ajax({
|
||||
url: $(element).attr('href'),
|
||||
dataType: 'json',
|
||||
beforeSend: function () {
|
||||
$(element).prop('disabled', true);
|
||||
},
|
||||
complete: function () {
|
||||
$(element).prop('disabled', false);
|
||||
},
|
||||
success: function (json) {
|
||||
console.log(json);
|
||||
|
||||
$('.alert-dismissible').remove();
|
||||
|
||||
if (json['error']) {
|
||||
$('#address').before('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#address').before('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#address').load('index.php?route=account/address.list&language={{ language }}&customer_token={{ customer_token }}');
|
||||
}
|
||||
},
|
||||
error: function (xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
//--></script>
|
||||
{{ footer }}
|
275
catalog/view/template/account/address_form.twig
Normal file
275
catalog/view/template/account/address_form.twig
Normal file
@ -0,0 +1,275 @@
|
||||
{{ header }}
|
||||
<div id="account-address" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ text_address }}</h1>
|
||||
<form id="form-address" action="{{ save }}" method="post" data-oc-toggle="ajax">
|
||||
<fieldset>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-firstname" class="col-sm-2 col-form-label">{{ entry_firstname }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="firstname" value="{{ firstname }}" placeholder="{{ entry_firstname }}" id="input-firstname" class="form-control"/>
|
||||
<div id="error-firstname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-lastname" class="col-sm-2 col-form-label">{{ entry_lastname }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="lastname" value="{{ lastname }}" placeholder="{{ entry_lastname }}" id="input-lastname" class="form-control"/>
|
||||
<div id="error-lastname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="input-company" class="col-sm-2 col-form-label">{{ entry_company }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="company" value="{{ company }}" placeholder="{{ entry_company }}" id="input-company" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-address-1" class="col-sm-2 col-form-label">{{ entry_address_1 }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="address_1" value="{{ address_1 }}" placeholder="{{ entry_address_1 }}" id="input-address-1" class="form-control"/>
|
||||
<div id="error-address-1" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="input-address-2" class="col-sm-2 col-form-label">{{ entry_address_2 }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="address_2" value="{{ address_2 }}" placeholder="{{ entry_address_2 }}" id="input-address-2" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-city" class="col-sm-2 col-form-label">{{ entry_city }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="city" value="{{ city }}" placeholder="{{ entry_city }}" id="input-city" class="form-control"/>
|
||||
<div id="error-city" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-postcode" class="col-sm-2 col-form-label">{{ entry_postcode }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="postcode" value="{{ postcode }}" placeholder="{{ entry_postcode }}" id="input-postcode" class="form-control"/>
|
||||
<div id="error-postcode" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-country" class="col-sm-2 col-form-label">{{ entry_country }}</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="country_id" id="input-country" class="form-select">
|
||||
<option value="0">{{ text_select }}</option>
|
||||
{% for country in countries %}
|
||||
<option value="{{ country.country_id }}"{% if country.country_id == country_id %} selected{% endif %}>{{ country.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-country" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-zone" class="col-sm-2 col-form-label">{{ entry_zone }}</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="zone_id" id="input-zone" class="form-select"></select>
|
||||
<div id="error-zone" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% for custom_field in custom_fields %}
|
||||
|
||||
{% if custom_field.type == 'select' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="custom_field[{{ custom_field.custom_field_id }}]" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<option value="{{ custom_field_value.custom_field_value_id }}"{% if address_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == address_custom_field[custom_field.custom_field_id] %} selected{% endif %}>{{ custom_field_value.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'radio' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %}">
|
||||
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div id="input-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="radio" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if address_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == address_custom_field[custom_field.custom_field_id] %} checked{% endif %}/> <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'checkbox' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %}">
|
||||
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div id="input-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="custom_field[{{ custom_field.custom_field_id }}][]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if address_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id in address_custom_field[custom_field.custom_field_id] %} checked{% endif %}/> <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'text' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if address_custom_field[custom_field.custom_field_id] %}{{ address_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control"/>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'textarea' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea name="custom_field[{{ custom_field.custom_field_id }}]" rows="5" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control">{% if address_custom_field[custom_field.custom_field_id] %}{{ address_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}</textarea>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'file' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %}">
|
||||
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div>
|
||||
<button type="button" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size }}" data-oc-target="#input-custom-field-{{ custom_field.custom_field_id }}" class="btn btn-light"><i class="fa-solid fa-upload"></i> {{ button_upload }}</button>
|
||||
<input type="hidden" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if address_custom_field[custom_field.custom_field_id] %}{{ address_custom_field[custom_field.custom_field_id] }}{% endif %}" id="input-custom-field-{{ custom_field.custom_field_id }}"/>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'date' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if address_custom_field[custom_field.custom_field_id] %}{{ address_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control date"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'time' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if address_custom_field[custom_field.custom_field_id] %}{{ address_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control time"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'datetime' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if address_custom_field[custom_field.custom_field_id] %}{{ address_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control datetime"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
|
||||
<div class="row mb-3">
|
||||
<label class="col-sm-2 col-form-label">{{ entry_default }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="form-check-inline">
|
||||
<input type="radio" name="default" value="1" id="input-default-yes" class="form-check-input"{% if default %} checked{% endif %}/> <label for="input-default-yes" class="form-check-label">{{ text_yes }}</label>
|
||||
</div>
|
||||
<div class="form-check-inline">
|
||||
<input type="radio" name="default" value="0" id="input-default-no" class="form-check-input"{% if not default %} checked{% endif %}/> <label for="input-default-no" class="form-check-label">{{ text_no }}</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href="{{ back }}" class="btn btn-light">{{ button_back }}</a>
|
||||
</div>
|
||||
<div class="col text-end">
|
||||
<button type="submit" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('#input-country').on('change', function () {
|
||||
var element = this;
|
||||
|
||||
$.ajax({
|
||||
url: 'index.php?route=localisation/country&country_id=' + this.value + '&language={{ language }}',
|
||||
dataType: 'json',
|
||||
beforeSend: function () {
|
||||
$(element).prop('disabled', true);
|
||||
$('#input-zone').prop('disabled', true);
|
||||
},
|
||||
complete: function () {
|
||||
$(element).prop('disabled', false);
|
||||
$('#input-zone').prop('disabled', false);
|
||||
},
|
||||
success: function (json) {
|
||||
if (json['postcode_required'] == '1') {
|
||||
$('#input-postcode').parent().parent().addClass('required');
|
||||
} else {
|
||||
$('#input-postcode').parent().parent().removeClass('required');
|
||||
}
|
||||
|
||||
html = '<option value="">{{ text_select|escape('js') }}</option>';
|
||||
|
||||
if (json['zone'] && json['zone'] != '') {
|
||||
for (i = 0; i < json['zone'].length; i++) {
|
||||
html += '<option value="' + json['zone'][i]['zone_id'] + '"';
|
||||
|
||||
if (json['zone'][i]['zone_id'] == '{{ zone_id }}') {
|
||||
html += ' selected';
|
||||
}
|
||||
|
||||
html += '>' + json['zone'][i]['name'] + '</option>';
|
||||
}
|
||||
} else {
|
||||
html += '<option value="0" selected>{{ text_none|escape('js') }}</option>';
|
||||
}
|
||||
|
||||
$('#input-zone').html(html);
|
||||
},
|
||||
error: function (xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#input-country').trigger('change');
|
||||
//--></script>
|
||||
{{ footer }}
|
14
catalog/view/template/account/address_list.twig
Normal file
14
catalog/view/template/account/address_list.twig
Normal file
@ -0,0 +1,14 @@
|
||||
{% if addresses %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
{% for address in addresses %}
|
||||
<tr>
|
||||
<td class="text-start">{{ address.address }}</td>
|
||||
<td class="text-end"><a href="{{ address.edit }}" data-bs-toggle="tooltip" title="{{ button_edit }}" class="btn btn-primary"><i class="fa-regular fa-solid fa-pencil"></i></a> <a href="{{ address.delete }}" data-bs-toggle="tooltip" title="{{ button_delete }}" class="btn btn-danger"><i class="fa-regular fa-trash-can"></i></a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
{% endif %}
|
248
catalog/view/template/account/affiliate.twig
Normal file
248
catalog/view/template/account/affiliate.twig
Normal file
@ -0,0 +1,248 @@
|
||||
{{ header }}
|
||||
<div id="account-affiliate" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<form id="form-affiliate" action="{{ save }}" method="post" data-oc-toggle="ajax">
|
||||
|
||||
<fieldset>
|
||||
<legend>{{ text_my_affiliate }}</legend>
|
||||
<div class="row mb-3">
|
||||
<label for="input-company" class="col-sm-2 col-form-label">{{ entry_company }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="company" value="{{ company }}" placeholder="{{ entry_company }}" id="input-company" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="input-website" class="col-sm-2 col-form-label">{{ entry_website }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="website" value="{{ website }}" placeholder="{{ entry_website }}" id="input-website" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{{ text_payment }}</legend>
|
||||
<div class="row mb-3">
|
||||
<label for="input-tax" class="col-sm-2 col-form-label">{{ entry_tax }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="tax" value="{{ tax }}" placeholder="{{ entry_tax }}" id="input-tax" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label class="col-sm-2 col-form-label">{{ entry_payment_method }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="form-check">
|
||||
<input type="radio" name="payment_method" value="cheque" id="input-payment-cheque" class="form-check-input"{% if payment_method == 'cheque' %} checked{% endif %}/>
|
||||
<label for="input-payment-cheque" class="form-check-label">{{ text_cheque }}</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input type="radio" name="payment_method" value="paypal" id="input-payment-paypal" class="form-check-input"{% if payment_method == 'paypal' %} checked{% endif %}/>
|
||||
<label for="input-payment-paypal" class="form-check-label">{{ text_paypal }}</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input type="radio" name="payment_method" value="bank" id="input-payment-bank" class="form-check-input"{% if payment_method == 'bank' %} checked{% endif %}/>
|
||||
<label for="input-payment-bank" class="form-check-label">{{ text_bank }}</label>
|
||||
</div>
|
||||
<div id="error-payment-method" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required payment" id="payment-cheque">
|
||||
<label for="input-cheque" class="col-sm-2 col-form-label">{{ entry_cheque }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="cheque" value="{{ cheque }}" placeholder="{{ entry_cheque }}" id="input-cheque" class="form-control"/>
|
||||
<div id="error-cheque" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required payment" id="payment-paypal">
|
||||
<label for="input-paypal" class="col-sm-2 col-form-label">{{ entry_paypal }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="paypal" value="{{ paypal }}" placeholder="{{ entry_paypal }}" id="input-paypal" class="form-control"/>
|
||||
<div id="error-paypal" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="payment-bank" class="payment">
|
||||
<div class="row mb-3">
|
||||
<label for="input-bank-name" class="col-sm-2 col-form-label">{{ entry_bank_name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="bank_name" value="{{ bank_name }}" placeholder="{{ entry_bank_name }}" id="input-bank-name" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="input-bank-branch-number" class="col-sm-2 col-form-label">{{ entry_bank_branch_number }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="bank_branch_number" value="{{ bank_branch_number }}" placeholder="{{ entry_bank_branch_number }}" id="input-bank-branch-number" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="input-bank-swift-code" class="col-sm-2 col-form-label">{{ entry_bank_swift_code }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="bank_swift_code" value="{{ bank_swift_code }}" placeholder="{{ entry_bank_swift_code }}" id="input-bank-swift-code" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required row">
|
||||
<label for="input-bank-account-name" class="col-sm-2 col-form-label">{{ entry_bank_account_name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="bank_account_name" value="{{ bank_account_name }}" placeholder="{{ entry_bank_account_name }}" id="input-bank-account-name" class="form-control"/>
|
||||
<div id="error-bank-account-name" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required row">
|
||||
<label for="input-bank-account-number" class="col-sm-2 col-form-label">{{ entry_bank_account_number }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="bank_account_number" value="{{ bank_account_number }}" placeholder="{{ entry_bank_account_number }}" id="input-bank-account-number" class="form-control"/>
|
||||
<div id="error-bank-account-number" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% for custom_field in custom_fields %}
|
||||
{% if custom_field.location == 'affiliate' %}
|
||||
|
||||
{% if custom_field.type == 'select' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="custom_field[{{ custom_field.custom_field_id }}]" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<option value="{{ custom_field_value.custom_field_value_id }}"{% if affiliate_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == affiliate_custom_field[custom_field.custom_field_id] %} selected{% endif %}>{{ custom_field_value.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'radio' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div id="input-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="radio" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if affiliate_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == affiliate_custom_field[custom_field.custom_field_id] %} checked{% endif %}/> <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'checkbox' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div id="input-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if affiliate_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id in affiliate_custom_field[custom_field.custom_field_id] %} checked{% endif %}/> <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'text' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if affiliate_custom_field[custom_field.custom_field_id] %}{{ affiliate_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control"/>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'textarea' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea name="custom_field[{{ custom_field.custom_field_id }}]" rows="5" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control">{% if affiliate_custom_field[custom_field.custom_field_id] %}{{ affiliate_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}</textarea>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'file' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div>
|
||||
<button type="button" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size }}" data-oc-target="#input-custom-field-{{ custom_field.custom_field_id }}" class="btn btn-light"><i class="fa-solid fa-upload"></i> {{ button_upload }}</button>
|
||||
<input type="hidden" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if affiliate_custom_field[custom_field.custom_field_id] %}{{ affiliate_custom_field[custom_field.custom_field_id] }}{% endif %}" id="input-custom-field-{{ custom_field.custom_field_id }}"/>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'date' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if affiliate_custom_field[custom_field.custom_field_id] %}{{ affiliate_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control date"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'time' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if affiliate_custom_field[custom_field.custom_field_id] %}{{ affiliate_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control time"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'datetime' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if affiliate_custom_field[custom_field.custom_field_id] %}{{ affiliate_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control datetime"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</fieldset>
|
||||
<div class="text-end">
|
||||
{% if text_agree %}
|
||||
<div class="form-check form-switch form-switch-lg form-check-reverse form-check-inline">
|
||||
<label class="form-check-label">{{ text_agree }}</label> <input type="hidden" name="agree" value="0"/> <input type="checkbox" name="agree" value="1" id="input-agree" class="form-check-input"/>
|
||||
</div>
|
||||
{% endif %}
|
||||
<button type="submit" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</form>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('input[name=\'payment_method\']').on('change', function() {
|
||||
$('.payment').hide();
|
||||
|
||||
$('#payment-' + this.value).show();
|
||||
});
|
||||
|
||||
$('input[name=\'payment_method\']:checked').trigger('change');
|
||||
//--></script>
|
||||
{{ footer }}
|
49
catalog/view/template/account/download.twig
Normal file
49
catalog/view/template/account/download.twig
Normal file
@ -0,0 +1,49 @@
|
||||
{{ header }}
|
||||
<div id="account-download" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
{% if downloads %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-end"><strong>{{ column_order_id }}</strong></td>
|
||||
<td class="text-start"><strong>{{ column_name }}</strong></td>
|
||||
<td class="text-start"><strong>{{ column_size }}</strong></td>
|
||||
<td class="text-start"><strong>{{ column_date_added }}</strong></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for download in downloads %}
|
||||
<tr>
|
||||
<td class="text-end">{{ download.order_id }}</td>
|
||||
<td class="text-start">{{ download.name }}</td>
|
||||
<td class="text-start">{{ download.size }}</td>
|
||||
<td class="text-start">{{ download.date_added }}</td>
|
||||
<td><a href="{{ download.href }}" data-bs-toggle="tooltip" title="{{ button_download }}" class="btn btn-primary"><i class="fa-solid fa-cloud-arrow-down"></i></a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
{% endif %}
|
||||
<div class="text-end">
|
||||
<a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a>
|
||||
</div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
181
catalog/view/template/account/edit.twig
Normal file
181
catalog/view/template/account/edit.twig
Normal file
@ -0,0 +1,181 @@
|
||||
{{ header }}
|
||||
<div id="account-edit" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<form id="form-customer" action="{{ save }}" method="post" data-oc-toggle="ajax">
|
||||
<fieldset>
|
||||
<legend>{{ text_your_details }}</legend>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-firstname" class="col-sm-2 col-form-label">{{ entry_firstname }} </label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="firstname" value="{{ firstname }}" placeholder="{{ entry_firstname }}" id="input-firstname" class="form-control"/>
|
||||
<div id="error-firstname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-lastname" class="col-sm-2 col-form-label">{{ entry_lastname }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="lastname" value="{{ lastname }}" placeholder="{{ entry_lastname }}" id="input-lastname" class="form-control"/>
|
||||
<div id="error-lastname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-email" class="col-sm-2 col-form-label">{{ entry_email }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="email" name="email" value="{{ email }}" placeholder="{{ entry_email }}" id="input-email" class="form-control"/>
|
||||
<div id="error-email" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if config_telephone_display %}
|
||||
<div class="row mb-3{% if config_telephone_required %} required{% endif %}">
|
||||
<label for="input-telephone" class="col-sm-2 col-form-label">{{ entry_telephone }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="tel" name="telephone" value="{{ telephone }}" placeholder="{{ entry_telephone }}" id="input-telephone" class="form-control"/>
|
||||
<div id="error-telephone" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% for custom_field in custom_fields %}
|
||||
|
||||
{% if custom_field.type == 'select' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="custom_field[{{ custom_field.custom_field_id }}]" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<option value="{{ custom_field_value.custom_field_value_id }}"{% if account_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == account_custom_field[custom_field.custom_field_id] %} selected{% endif %}>{{ custom_field_value.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'radio' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div id="input-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="radio" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if account_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == account_custom_field[custom_field.custom_field_id] %} checked{% endif %}/> <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'checkbox' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div id="input-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="custom_field[{{ custom_field.custom_field_id }}][]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if account_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id in account_custom_field[custom_field.custom_field_id] %} checked{% endif %}/> <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'text' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if account_custom_field[custom_field.custom_field_id] %}{{ account_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control"/>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'textarea' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea name="custom_field[{{ custom_field.custom_field_id }}]" rows="5" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control">{% if account_custom_field[custom_field.custom_field_id] %}{{ account_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}</textarea>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'file' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div>
|
||||
<button type="button" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size }}" data-oc-target="#input-custom-field-{{ custom_field.custom_field_id }}" class="btn btn-light"><i class="fa-solid fa-upload"></i> {{ button_upload }}</button>
|
||||
<input type="hidden" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if account_custom_field[custom_field.custom_field_id] %}{{ account_custom_field[custom_field.custom_field_id] }}{% endif %}" id="input-custom-field-{{ custom_field.custom_field_id }}"/>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'date' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if account_custom_field[custom_field.custom_field_id] %}{{ account_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control date"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'time' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if account_custom_field[custom_field.custom_field_id] %}{{ account_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control time"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'datetime' %}
|
||||
<div class="row mb-3{% if custom_field.required %} required{% endif %} custom-field">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{% if account_custom_field[custom_field.custom_field_id] %}{{ account_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control datetime"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
</fieldset>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href="{{ back }}" class="btn btn-light">{{ button_back }}</a>
|
||||
</div>
|
||||
<div class="col text-end">
|
||||
<button type="submit" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
35
catalog/view/template/account/forgotten.twig
Normal file
35
catalog/view/template/account/forgotten.twig
Normal file
@ -0,0 +1,35 @@
|
||||
{{ header }}
|
||||
<div id="account-forgotten" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<p>{{ text_email }}</p>
|
||||
<form id="form-forgotten" action="{{ confirm }}" method="post" data-oc-toggle="ajax">
|
||||
<fieldset>
|
||||
<legend>{{ text_your_email }}</legend>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-email" class="col-sm-2 col-form-label">{{ entry_email }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="email" value="" placeholder="{{ entry_email }}" id="input-email" class="form-control"/>
|
||||
<div id="error-email" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href="{{ back }}" class="btn btn-light">{{ button_back }}</a>
|
||||
</div>
|
||||
<div class="col text-end">
|
||||
<button type="submit" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
41
catalog/view/template/account/forgotten_reset.twig
Normal file
41
catalog/view/template/account/forgotten_reset.twig
Normal file
@ -0,0 +1,41 @@
|
||||
{{ header }}
|
||||
<div id="account-reset" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<form id="form-reset" action="{{ save }}" method="post" data-oc-toggle="ajax">
|
||||
<fieldset>
|
||||
<legend>{{ text_password }}</legend>
|
||||
<div class="row mb-3">
|
||||
<label for="input-password" class="col-sm-2 col-form-label">{{ entry_password }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" name="password" value="" id="input-password" class="form-control"/>
|
||||
<div id="error-password" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="input-confirm" class="col-sm-2 col-form-label">{{ entry_confirm }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" name="confirm" value="" id="input-confirm" class="form-control"/>
|
||||
<div id="error-confirm" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href="{{ back }}" class="btn btn-light">{{ button_back }}</a>
|
||||
</div>
|
||||
<div class="col text-end">
|
||||
<button type="submit" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
54
catalog/view/template/account/login.twig
Normal file
54
catalog/view/template/account/login.twig
Normal file
@ -0,0 +1,54 @@
|
||||
{{ header }}
|
||||
<div id="account-login" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% if success %}
|
||||
<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> {{ success }} <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>
|
||||
{% endif %}
|
||||
{% if error_warning %}
|
||||
<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> {{ error_warning }} <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>
|
||||
{% endif %}
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<div class="row">
|
||||
<div class="col mb-3">
|
||||
<div class="border rounded p-3 d-flex flex-column h-100">
|
||||
<h2>{{ text_new_customer }}</h2>
|
||||
<p><strong>{{ text_register }}</strong></p>
|
||||
<p>{{ text_register_account }}</p>
|
||||
<div class="text-end">
|
||||
<a href="{{ register }}" class="btn btn-primary">{{ button_continue }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col mb-3">
|
||||
<div class="border rounded p-3 d-flex flex-column h-100">
|
||||
<form id="form-login" action="{{ login }}" method="post" data-oc-toggle="ajax">
|
||||
<h2>{{ text_returning_customer }}</h2>
|
||||
<p><strong>{{ text_i_am_returning_customer }}</strong></p>
|
||||
<div class="mb-3">
|
||||
<label for="input-email" class="col-form-label">{{ entry_email }}</label>
|
||||
<input type="text" name="email" value="{{ email }}" placeholder="{{ entry_email }}" id="input-email" class="form-control"/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="input-password" class="col-form-label">{{ entry_password }}</label>
|
||||
<input type="password" name="password" value="{{ password }}" placeholder="{{ entry_password }}" id="input-password" class="form-control mb-1"/>
|
||||
<a href="{{ forgotten }}">{{ text_forgotten }}</a>
|
||||
</div>
|
||||
<div class="text-end">
|
||||
<button type="submit" class="btn btn-primary">{{ button_login }}</button>
|
||||
</div>
|
||||
{% if redirect %}
|
||||
<input type="hidden" name="redirect" value="{{ redirect }}"/>
|
||||
{% endif %}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
36
catalog/view/template/account/newsletter.twig
Normal file
36
catalog/view/template/account/newsletter.twig
Normal file
@ -0,0 +1,36 @@
|
||||
{{ header }}
|
||||
<div id="account-newsletter" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<form id="form-newsletter" action="{{ save }}" method="post" data-oc-toggle="ajax">
|
||||
<fieldset>
|
||||
<div class="row mb-3 mb-0">
|
||||
<label class="col-md-3 col-form-label">{{ entry_newsletter }}</label>
|
||||
<div class="col-md-9">
|
||||
<div class="form-check form-switch form-switch-lg">
|
||||
<input type="hidden" name="newsletter" value="0"/>
|
||||
<input type="checkbox" name="newsletter" value="1" id="input-newsletter" class="form-check-input"{% if newsletter %} checked{% endif %}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href="{{ back }}" class="btn btn-light">{{ button_back }}</a>
|
||||
</div>
|
||||
<div class="col text-end">
|
||||
<button type="submit" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{ content_bottom }}
|
||||
</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
30
catalog/view/template/account/order_history.twig
Normal file
30
catalog/view/template/account/order_history.twig
Normal file
@ -0,0 +1,30 @@
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-start"><strong>{{ column_date_added }}</strong></td>
|
||||
<td class="text-start"><strong>{{ column_comment }}</strong></td>
|
||||
<td class="text-start"><strong>{{ column_status }}</strong></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if histories %}
|
||||
{% for history in histories %}
|
||||
<tr>
|
||||
<td class="text-start">{{ history.date_added }}</td>
|
||||
<td class="text-start">{{ history.comment }}</td>
|
||||
<td class="text-start">{{ history.status }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<tr>
|
||||
<td class="text-center" colspan="3">{{ text_no_results }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
166
catalog/view/template/account/order_info.twig
Normal file
166
catalog/view/template/account/order_info.twig
Normal file
@ -0,0 +1,166 @@
|
||||
{{ header }}
|
||||
<div id="account-order" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<div class="row row-cols-md-2">
|
||||
<div class="col">
|
||||
<table class="table table-bordered table-hover">
|
||||
{% if invoice_no %}
|
||||
<tr>
|
||||
<td><strong>{{ text_invoice_no }}</strong></td>
|
||||
<td>{{ invoice_no }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td><strong>{{ text_order_id }}</strong></td>
|
||||
<td>#{{ order_id }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>{{ text_order_status }}</strong></td>
|
||||
<td>{{ order_status }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col">
|
||||
<table class="table table-bordered table-hover">
|
||||
{% if shipping_method %}
|
||||
<tr>
|
||||
<td><strong>{{ text_shipping_method }}</strong></td>
|
||||
<td>{{ shipping_method }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td><strong>{{ text_payment_method }}</strong></td>
|
||||
<td>{{ payment_method }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>{{ text_date_added }}</strong></td>
|
||||
<td>{{ date_added }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% if payment_address or shipping_address %}
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
{% if payment_address %}
|
||||
<td class="text-start align-top"><strong>{{ text_payment_address }}</strong></td>
|
||||
{% endif %}
|
||||
{% if shipping_address %}
|
||||
<td class="text-start align-top"><strong>{{ text_shipping_address }}</strong></td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
{% if payment_address %}
|
||||
<td class="text-start align-top">{{ payment_address }}</td>
|
||||
{% endif %}
|
||||
{% if shipping_address %}
|
||||
<td class="text-start align-top">{{ shipping_address }}</td>
|
||||
{% endif %}</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-start"><strong>{{ column_name }}</strong></td>
|
||||
<td class="text-start"><strong>{{ column_model }}</strong></td>
|
||||
<td class="text-end"><strong>{{ column_quantity }}</strong></td>
|
||||
<td class="text-end"><strong>{{ column_price }}</strong></td>
|
||||
<td class="text-end"><strong>{{ column_total }}</strong></td>
|
||||
{% if products %}
|
||||
<td class="text-end"><strong>{{ column_action }}</strong></td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for product in products %}
|
||||
<tr>
|
||||
<td class="text-start"><a href="{{ product.href }}">{{ product.name }}</a>
|
||||
{% for option in product.option %}
|
||||
<br/>
|
||||
<small> - {{ option.name }}: {{ option.value }}</small>
|
||||
{% endfor %}
|
||||
{% if product.reward %}
|
||||
<br/>
|
||||
<small> - {{ text_points }}: {{ product.reward }}</small>
|
||||
{% endif %}
|
||||
{% if product.subscription %}
|
||||
<br/>
|
||||
<small> - {{ text_subscription }}: <a href="{{ product.subscription }}" target="_blank">{{ product.subscription_description }}</a></small>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-start">{{ product.model }}</td>
|
||||
<td class="text-end">{{ product.quantity }}</td>
|
||||
<td class="text-end">{{ product.price }}</td>
|
||||
<td class="text-end">{{ product.total }}</td>
|
||||
<td class="text-end text-nowrap">{% if product.reorder %}<a href="{{ product.reorder }}" data-bs-toggle="tooltip" title="{{ button_reorder }}" class="btn btn-primary"><i class="fa-solid fa-cart-shopping"></i></a>{% endif %}
|
||||
<a href="{{ product.return }}" data-bs-toggle="tooltip" title="{{ button_return }}" class="btn btn-danger"><i class="fa-solid fa-reply"></i></a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
{% for voucher in vouchers %}
|
||||
<tr>
|
||||
<td class="text-start">{{ voucher.description }}</td>
|
||||
<td class="text-start"></td>
|
||||
<td class="text-end">1</td>
|
||||
<td class="text-end">{{ voucher.amount }}</td>
|
||||
<td class="text-end">{{ voucher.amount }}</td>
|
||||
{% if products %}
|
||||
<td></td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
{% for total in totals %}
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
<td class="text-end"><b>{{ total.title }}</b></td>
|
||||
<td class="text-end">{{ total.text }}</td>
|
||||
{% if products %}
|
||||
<td></td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
{% if comment %}
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-start"><strong>{{ text_comment }}</strong></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-start">{{ comment }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
<h2>{{ text_history }}</h2>
|
||||
<div id="history">{{ history }}</div>
|
||||
<div class="text-end mt-3"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('#history').on('click', '.pagination a', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
$('#history').load(this.href);
|
||||
});
|
||||
//--></script>
|
||||
{{ footer }}
|
51
catalog/view/template/account/order_list.twig
Normal file
51
catalog/view/template/account/order_list.twig
Normal file
@ -0,0 +1,51 @@
|
||||
{{ header }}
|
||||
<div id="account-order" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
{% if orders %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-end">{{ column_order_id }}</td>
|
||||
<td class="text-start">{{ column_customer }}</td>
|
||||
<td class="text-end">{{ column_product }}</td>
|
||||
<td class="text-start">{{ column_status }}</td>
|
||||
<td class="text-end">{{ column_total }}</td>
|
||||
<td class="text-start">{{ column_date_added }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for order in orders %}
|
||||
<tr>
|
||||
<td class="text-end">#{{ order.order_id }}</td>
|
||||
<td class="text-start">{{ order.name }}</td>
|
||||
<td class="text-end">{{ order.products }}</td>
|
||||
<td class="text-start">{{ order.status }}</td>
|
||||
<td class="text-end">{{ order.total }}</td>
|
||||
<td class="text-start">{{ order.date_added }}</td>
|
||||
<td class="text-end"><a href="{{ order.view }}" data-bs-toggle="tooltip" title="{{ button_view }}" class="btn btn-info"><i class="fa-solid fa-eye"></i></a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
{% endif %}
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
41
catalog/view/template/account/password.twig
Normal file
41
catalog/view/template/account/password.twig
Normal file
@ -0,0 +1,41 @@
|
||||
{{ header }}
|
||||
<div id="account-password" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<form id="form-password" action="{{ save }}" method="post" data-oc-toggle="ajax">
|
||||
<fieldset>
|
||||
<legend>{{ text_password }}</legend>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-password" class="col-md-3 col-form-label">{{ entry_password }}</label>
|
||||
<div class="col-md-9">
|
||||
<input type="password" name="password" value="{{ password }}" placeholder="{{ entry_password }}" id="input-password" class="form-control" autocomplete="new-password"/>
|
||||
<div id="error-password" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-confirm" class="col-md-3 col-form-label">{{ entry_confirm }}</label>
|
||||
<div class="col-md-9">
|
||||
<input type="password" name="confirm" value="{{ confirm }}" placeholder="{{ entry_confirm }}" id="input-confirm" class="form-control"/>
|
||||
<div id="error-confirm" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href="{{ back }}" class="btn btn-light">{{ button_back }}</a>
|
||||
</div>
|
||||
<div class="col text-end">
|
||||
<button type="submit" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
50
catalog/view/template/account/payment_method.twig
Normal file
50
catalog/view/template/account/payment_method.twig
Normal file
@ -0,0 +1,50 @@
|
||||
{{ header }}
|
||||
<div id="account-payment-method" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<div id="payment-method">{{ list }}</div>
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('#payment-method').on('click', '.btn-danger', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
var element = this;
|
||||
|
||||
$.ajax({
|
||||
url: $(element).attr('href'),
|
||||
dataType: 'json',
|
||||
beforeSend: function () {
|
||||
$(element).prop('disabled', true);
|
||||
},
|
||||
complete: function () {
|
||||
$(element).prop('disabled', false);
|
||||
},
|
||||
success: function (json) {
|
||||
$('.alert-dismissible').remove();
|
||||
|
||||
if (json['error']) {
|
||||
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#payment-method').load('index.php?route=account/payment_method.list&customer_token={{ customer_token }}');
|
||||
}
|
||||
},
|
||||
error: function (xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
//--></script>
|
||||
{{ footer }}
|
29
catalog/view/template/account/payment_method_list.twig
Normal file
29
catalog/view/template/account/payment_method_list.twig
Normal file
@ -0,0 +1,29 @@
|
||||
{% if payment_methods %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-start">{{ column_payment_method }}</th>
|
||||
<th></th>
|
||||
<th class="text-start">{{ column_type }}</th>
|
||||
<th class="text-start">{{ column_date_expire }}</th>
|
||||
<th class="text-end">{{ column_action }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tbody>
|
||||
{% for payment_method in payment_methods %}
|
||||
<tr>
|
||||
<td class="text-start">{{ payment_method.name }}</td>
|
||||
<td class="text-start">{{ payment_method.image }}</td>
|
||||
<td class="text-start">{{ payment_method.type }}</td>
|
||||
<td class="text-start">{{ payment_method.date_expire }}</td>
|
||||
<td class="text-end"><a href="{{ payment_method.delete }}" class="btn btn-danger">{{ button_delete }}</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
{% endif %}
|
248
catalog/view/template/account/register.twig
Normal file
248
catalog/view/template/account/register.twig
Normal file
@ -0,0 +1,248 @@
|
||||
{{ header }}
|
||||
<div id="account-register" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">
|
||||
{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<p>{{ text_account_already }}</p>
|
||||
<form id="form-register" action="{{ register }}" method="post" data-oc-toggle="ajax">
|
||||
<fieldset id="account">
|
||||
<legend>{{ text_your_details }}</legend>
|
||||
{% if customer_groups|length > 1 %}
|
||||
<div class="row mb-3 required">
|
||||
<label class="col-sm-2 col-form-label">{{ entry_customer_group }}</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="customer_group_id" id="input-customer-group" class="form-select">
|
||||
{% for customer_group in customer_groups %}
|
||||
<option value="{{ customer_group.customer_group_id }}"{% if customer_group.customer_group_id == customer_group_id %} selected{% endif %}>{{ customer_group.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-firstname" class="col-sm-2 col-form-label">{{ entry_firstname }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="firstname" value="" placeholder="{{ entry_firstname }}" id="input-firstname" class="form-control"/>
|
||||
<div id="error-firstname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-lastname" class="col-sm-2 col-form-label">{{ entry_lastname }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="lastname" value="" placeholder="{{ entry_lastname }}" id="input-lastname" class="form-control"/>
|
||||
<div id="error-lastname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-email" class="col-sm-2 col-form-label">{{ entry_email }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="email" name="email" value="" placeholder="{{ entry_email }}" id="input-email" class="form-control"/>
|
||||
<div id="error-email" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if config_telephone_display %}
|
||||
<div class="row mb-3{% if config_telephone_required %} required{% endif %}">
|
||||
<label for="input-telephone" class="col-sm-2 col-form-label">{{ entry_telephone }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="tel" name="telephone" value="" placeholder="{{ entry_telephone }}" id="input-telephone" class="form-control"/>
|
||||
<div id="error-telephone" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% for custom_field in custom_fields %}
|
||||
|
||||
{% if custom_field.type == 'select' %}
|
||||
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="custom_field[{{ custom_field.custom_field_id }}]" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<option value="{{ custom_field_value.custom_field_value_id }}">{{ custom_field_value.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'radio' %}
|
||||
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div id="input-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="radio" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"/> <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'checkbox' %}
|
||||
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div id="input-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="custom_field[{{ custom_field.custom_field_id }}][]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"/> <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'text' %}
|
||||
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control"/>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'textarea' %}
|
||||
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea name="custom_field[{{ custom_field.custom_field_id }}]" rows="5" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control">{{ custom_field.value }}</textarea>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'file' %}
|
||||
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div>
|
||||
<button type="button" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size }}" data-oc-target="#input-custom-field-{{ custom_field.custom_field_id }}" class="btn btn-light"><i class="fa-solid fa-upload"></i> {{ button_upload }}</button>
|
||||
<input type="hidden" name="custom_field[{{ custom_field.custom_field_id }}]" value="" id="input-custom-field-{{ custom_field.custom_field_id }}"/>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'date' %}
|
||||
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control date"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'time' %}
|
||||
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control time"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'datetime' %}
|
||||
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control datetime"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{ text_your_password }}</legend>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-password" class="col-sm-2 col-form-label">{{ entry_password }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" name="password" value="" placeholder="{{ entry_password }}" id="input-password" class="form-control"/>
|
||||
<div id="error-password" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{ text_newsletter }}</legend>
|
||||
<div class="row mb-3">
|
||||
<label class="col-sm-2 col-form-label">{{ entry_newsletter }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="form-check form-switch form-switch-lg">
|
||||
<input type="hidden" name="newsletter" value="0"/> <input type="checkbox" name="newsletter" value="1" id="input-newsletter" class="form-check-input"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
{{ captcha }}
|
||||
<div class="text-end">
|
||||
{% if text_agree %}
|
||||
<div class="form-check form-switch form-switch-lg form-check-reverse form-check-inline">
|
||||
<label class="form-check-label">{{ text_agree }}</label> <input type="checkbox" name="agree" value="1" class="form-check-input"/>
|
||||
</div>
|
||||
{% endif %}
|
||||
<button type="submit" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</form>
|
||||
{{ content_bottom }}
|
||||
</div>
|
||||
{{ column_right }}
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('#input-customer-group').on('change', function() {
|
||||
$.ajax({
|
||||
url: 'index.php?route=account/custom_field&customer_group_id=' + this.value + '&language={{ language }}',
|
||||
dataType: 'json',
|
||||
success: function(json) {
|
||||
$('.custom-field').hide();
|
||||
$('.custom-field').removeClass('required');
|
||||
|
||||
for (i = 0; i < json.length; i++) {
|
||||
custom_field = json[i];
|
||||
|
||||
$('.custom-field-' + custom_field['custom_field_id']).show();
|
||||
|
||||
if (custom_field['required']) {
|
||||
$('.custom-field-' + custom_field['custom_field_id']).addClass('required');
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#input-customer-group').trigger('change');
|
||||
//--></script>
|
||||
{{ footer }}
|
133
catalog/view/template/account/returns_form.twig
Normal file
133
catalog/view/template/account/returns_form.twig
Normal file
@ -0,0 +1,133 @@
|
||||
{{ header }}
|
||||
<div id="account-return" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}"> {{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<p>{{ text_description }}</p>
|
||||
<form id="form-return" action="{{ save }}" method="post" data-oc-toggle="ajax">
|
||||
<fieldset>
|
||||
<legend>{{ text_order }}</legend>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-firstname" class="col-sm-2 col-form-label">{{ entry_firstname }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="firstname" value="{{ firstname }}" placeholder="{{ entry_firstname }}" id="input-firstname" class="form-control"/>
|
||||
<div id="error-firstname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-lastname" class="col-sm-2 col-form-label">{{ entry_lastname }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="lastname" value="{{ lastname }}" placeholder="{{ entry_lastname }}" id="input-lastname" class="form-control"/>
|
||||
<div id="error-lastname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-email" class="col-sm-2 col-form-label">{{ entry_email }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="email" value="{{ email }}" placeholder="{{ entry_email }}" id="input-email" class="form-control"/>
|
||||
<div id="error-email" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-telephone" class="col-sm-2 col-form-label">{{ entry_telephone }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="telephone" value="{{ telephone }}" placeholder="{{ entry_telephone }}" id="input-telephone" class="form-control"/>
|
||||
<div id="error-telephone" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-order-id" class="col-sm-2 col-form-label">{{ entry_order_id }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="order_id" value="{{ order_id }}" placeholder="{{ entry_order_id }}" id="input-order-id" class="form-control"/>
|
||||
<div id="error-order-id" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="input-date-ordered" class="col-sm-2 col-form-label">{{ entry_date_ordered }}</label>
|
||||
<div class="col-sm-10 col-md-4">
|
||||
<div class="input-group">
|
||||
<input type="text" name="date_ordered" value="{{ date_ordered }}" placeholder="{{ entry_date_ordered }}" id="input-date-ordered" class="form-control date"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{{ text_product }}</legend>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-product" class="col-sm-2 col-form-label">{{ entry_product }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="product" value="{{ product }}" placeholder="{{ entry_product }}" id="input-product" class="form-control"/> <input type="hidden" name="product_id" value="{{ product_id }}"/>
|
||||
<div id="error-product" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-model" class="col-sm-2 col-form-label">{{ entry_model }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="model" value="{{ model }}" placeholder="{{ entry_model }}" id="input-model" class="form-control"/>
|
||||
<div id="error-model" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="input-quantity" class="col-sm-2 col-form-label">{{ entry_quantity }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="quantity" value="1" placeholder="{{ entry_quantity }}" id="input-quantity" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label class="col-sm-2 col-form-label">{{ entry_reason }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div id="input-reason">
|
||||
{% for return_reason in return_reasons %}
|
||||
<div class="form-check">
|
||||
<input type="radio" name="return_reason_id" value="{{ return_reason.return_reason_id }}" id="input-return-reason-{{ return_reason.return_reason_id }}" class="form-check-input"/> <label for="input-return-reason-{{ return_reason.return_reason_id }}" class="form-check-label">{{ return_reason.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-reason" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label class="col-sm-2 col-form-label">{{ entry_opened }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="form-check form-check-inline">
|
||||
<input type="radio" name="opened" value="1" id="input-opened-yes" class="form-check-input" checked/>
|
||||
<label for="input-opened-yes" class="form-check-label">{{ text_yes }}</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input type="radio" name="opened" value="0" id="input-opened-no" class="form-check-input"/>
|
||||
<label for="input-opened-no" class="form-check-label">{{ text_no }}</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="input-comment" class="col-sm-2 col-form-label">{{ entry_fault_detail }}</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea name="comment" rows="5" placeholder="{{ entry_fault_detail }}" id="input-comment" class="form-control"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
{{ captcha }}
|
||||
</fieldset>
|
||||
<div class="row">
|
||||
<div class="col-3"><a href="{{ back }}" class="btn btn-light">{{ button_back }}</a></div>
|
||||
<div class="col text-end">
|
||||
{% if text_agree %}
|
||||
<div class="form-check form-switch form-switch-lg form-check-reverse form-check-inline">
|
||||
<label class="form-check-label">{{ text_agree }}</label>
|
||||
<input type="hidden" name="agree" value="0"/>
|
||||
<input type="checkbox" name="agree" value="1" id="input-agree" class="form-check-input"/>
|
||||
</div>
|
||||
{% endif %}
|
||||
<button type="submit" class="btn btn-primary">{{ button_submit }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
113
catalog/view/template/account/returns_info.twig
Normal file
113
catalog/view/template/account/returns_info.twig
Normal file
@ -0,0 +1,113 @@
|
||||
{{ header }}
|
||||
<div id="account-return" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-start" colspan="2">{{ text_return_detail }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-start" style="width: 50%;"><b>{{ text_return_id }}</b> #{{ return_id }}
|
||||
<br/>
|
||||
<b>{{ text_date_added }}</b> {{ date_added }}</td>
|
||||
<td class="text-start" style="width: 50%;"><b>{{ text_orders_id }}</b> #{{ order_id }}
|
||||
<br/>
|
||||
<b>{{ text_date_ordered }}</b> {{ date_ordered }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>{{ text_product }}</h3>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-start" style="width: 33.3%;">{{ column_product }}</td>
|
||||
<td class="text-start" style="width: 33.3%;">{{ column_model }}</td>
|
||||
<td class="text-end" style="width: 33.3%;">{{ column_quantity }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-start">{{ product }}</td>
|
||||
<td class="text-start">{{ model }}</td>
|
||||
<td class="text-end">{{ quantity }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<h3>{{ text_reason }}</h3>
|
||||
<div class="table-responsive">
|
||||
<table class="list table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-start" style="width: 33.3%;">{{ column_reason }}</td>
|
||||
<td class="text-start" style="width: 33.3%;">{{ column_opened }}</td>
|
||||
<td class="text-start" style="width: 33.3%;">{{ column_action }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-start">{{ reason }}</td>
|
||||
<td class="text-start">{{ opened }}</td>
|
||||
<td class="text-start">{{ action }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% if comment %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-start">{{ text_comment }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-start">{{ comment }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endif %}
|
||||
<h3>{{ text_history }}</h3>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-start" style="width: 33.3%;">{{ column_date_added }}</td>
|
||||
<td class="text-start" style="width: 33.3%;">{{ column_status }}</td>
|
||||
<td class="text-start" style="width: 33.3%;">{{ column_comment }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if histories %}
|
||||
{% for history in histories %}
|
||||
<tr>
|
||||
<td class="text-start">{{ history.date_added }}</td>
|
||||
<td class="text-start">{{ history.status }}</td>
|
||||
<td class="text-start">{{ history.comment }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="3" class="text-center">{{ text_no_results }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
49
catalog/view/template/account/returns_list.twig
Normal file
49
catalog/view/template/account/returns_list.twig
Normal file
@ -0,0 +1,49 @@
|
||||
{{ header }}
|
||||
<div id="account-return" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
{% if returns %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-end">{{ column_return_id }}</td>
|
||||
<td class="text-start">{{ column_status }}</td>
|
||||
<td class="text-start">{{ column_date_added }}</td>
|
||||
<td class="text-end">{{ column_order_id }}</td>
|
||||
<td class="text-start">{{ column_customer }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for return in returns %}
|
||||
<tr>
|
||||
<td class="text-end">#{{ return.return_id }}</td>
|
||||
<td class="text-start">{{ return.status }}</td>
|
||||
<td class="text-start">{{ return.date_added }}</td>
|
||||
<td class="text-end">{{ return.order_id }}</td>
|
||||
<td class="text-start">{{ return.name }}</td>
|
||||
<td class="text-end"><a href="{{ return.href }}" data-bs-toggle="tooltip" title="{{ button_view }}" class="btn btn-info"><i class="fa-solid fa-eye"></i></a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
{% endif %}
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
48
catalog/view/template/account/reward.twig
Normal file
48
catalog/view/template/account/reward.twig
Normal file
@ -0,0 +1,48 @@
|
||||
{{ header }}
|
||||
<div id="account-reward" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<p>{{ text_total }} <b>{{ total }}</b>.</p>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-start">{{ column_date_added }}</th>
|
||||
<th class="text-start">{{ column_description }}</th>
|
||||
<th class="text-end">{{ column_points }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if rewards %}
|
||||
{% for reward in rewards %}
|
||||
<tr>
|
||||
<td class="text-start">{{ reward.date_added }}</td>
|
||||
<td class="text-start">{% if reward.order_id %} <a href="{{ reward.href }}">{{ reward.description }}</a> {% else %}
|
||||
{{ reward.description }}
|
||||
{% endif %}</td>
|
||||
<td class="text-end">{{ reward.points }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<tr>
|
||||
<td class="text-center" colspan="3">{{ text_no_results }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
30
catalog/view/template/account/subscription_history.twig
Normal file
30
catalog/view/template/account/subscription_history.twig
Normal file
@ -0,0 +1,30 @@
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-start">{{ column_date_added }}</td>
|
||||
<td class="text-start">{{ column_comment }}</td>
|
||||
<td class="text-start">{{ column_status }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if histories %}
|
||||
{% for history in histories %}
|
||||
<tr>
|
||||
<td class="text-start">{{ history.date_added }}</td>
|
||||
<td class="text-start">{{ history.comment }}</td>
|
||||
<td class="text-start">{{ history.status }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<tr>
|
||||
<td class="text-center" colspan="3">{{ text_no_results }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
108
catalog/view/template/account/subscription_info.twig
Normal file
108
catalog/view/template/account/subscription_info.twig
Normal file
@ -0,0 +1,108 @@
|
||||
{{ header }}
|
||||
<div id="account-subscription" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<div class="row row-cols-md-2">
|
||||
<div class="col">
|
||||
<table class="table table-bordered table-hover">
|
||||
<tr>
|
||||
<td><b>{{ text_subscription_id }}</b></td>
|
||||
<td>#{{ subscription_id }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>{{ text_status }}</b></td>
|
||||
<td>{{ subscription_status }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>{{ text_order_id }}</b></td>
|
||||
<td>#{{ order_id }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col">
|
||||
<table class="table table-bordered table-hover">
|
||||
{% if shipping_method %}
|
||||
<tr>
|
||||
<td><strong>{{ text_shipping_method }}</strong></td>
|
||||
<td>{{ shipping_method }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td><strong>{{ text_payment_method }}</strong></td>
|
||||
<td>{{ payment_method }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>{{ text_date_added }}</b></td>
|
||||
<td>{{ date_added }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% if payment_address or shipping_address %}
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
{% if payment_address %}
|
||||
<td class="text-start align-top">{{ text_payment_address }}</td>
|
||||
{% endif %}
|
||||
|
||||
{% if shipping_address %}
|
||||
<td class="text-start align-top">{{ text_shipping_address }}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
{% if payment_address %}
|
||||
<td class="text-start align-top">{{ payment_address }}</td>
|
||||
{% endif %}
|
||||
|
||||
{% if shipping_address %}
|
||||
<td class="text-start align-top">{{ shipping_address }}</td>
|
||||
{% endif %}</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-start w-50">{{ text_description }}</td>
|
||||
<td class="text-start w-50">{{ text_quantity }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-start"><a href="{{ product }}">{{ name }}</a>
|
||||
<br/>{{ description }}</td>
|
||||
<td class="text-start">{{ product_quantity }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>{{ text_history }}</h2>
|
||||
<div id="history">{{ history }}</div>
|
||||
<h2>{{ text_order }}</h2>
|
||||
<div id="order">{{ order }}</div>
|
||||
<div class="text-end mt-3"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('#history').on('click', '.pagination a', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
$('#history').load(this.href);
|
||||
});
|
||||
|
||||
$('#order').on('click', '.pagination a', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
$('#order').load(this.href);
|
||||
});
|
||||
//--></script>
|
||||
{{ footer }}
|
50
catalog/view/template/account/subscription_list.twig
Normal file
50
catalog/view/template/account/subscription_list.twig
Normal file
@ -0,0 +1,50 @@
|
||||
{{ header }}
|
||||
<div id="account-subscription" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
{% if subscriptions %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-end">{{ column_subscription_id }}</td>
|
||||
<td class="text-start">{{ column_product }}</td>
|
||||
<td class="text-start">{{ column_status }}</td>
|
||||
<td class="text-start">{{ column_date_added }}</td>
|
||||
<td class="text-end"></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for subscription in subscriptions %}
|
||||
<tr>
|
||||
<td class="text-end">#{{ subscription.subscription_id }}</td>
|
||||
<td class="text-start"><a href="{{ subscription.product }}">{{ subscription.product_name }}</a>
|
||||
<br/>
|
||||
{{ subscription.description }}
|
||||
</td>
|
||||
<td class="text-start">{{ subscription.status }}</td>
|
||||
<td class="text-start">{{ subscription.date_added }}</td>
|
||||
<td class="text-end"><a href="{{ subscription.view }}" data-bs-toggle="tooltip" title="{{ button_view }}" class="btn btn-info"><i class="fa-solid fa-eye"></i></a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
{% endif %}
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
32
catalog/view/template/account/subscription_order.twig
Normal file
32
catalog/view/template/account/subscription_order.twig
Normal file
@ -0,0 +1,32 @@
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-end">{{ column_order_id }}</td>
|
||||
<td class="text-start">{{ column_status }}</td>
|
||||
<td class="text-end">{{ column_total }}</td>
|
||||
<td class="text-start">{{ column_date_added }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if orders %}
|
||||
{% for order in orders %}
|
||||
<tr>
|
||||
<td class="text-end"><a href="{{ order.view }}" target="_blank">{{ order.order_id }}</a></td>
|
||||
<td class="text-start">{{ order.status }}</td>
|
||||
<td class="text-end">{{ order.total }}</td>
|
||||
<td class="text-start">{{ order.date_added }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<tr>
|
||||
<td class="text-center" colspan="4">{{ text_no_results }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
59
catalog/view/template/account/tracking.twig
Normal file
59
catalog/view/template/account/tracking.twig
Normal file
@ -0,0 +1,59 @@
|
||||
{{ header }}
|
||||
<div id="account-tracking" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<p>{{ text_description }}</p>
|
||||
<form>
|
||||
<div class="row mb-3">
|
||||
<label for="input-code" class="col-md-2 col-form-label">{{ entry_code }}</label>
|
||||
<div class="col-md-10">
|
||||
<textarea cols="40" rows="5" placeholder="{{ entry_code }}" id="input-code" class="form-control">{{ code }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="input-generator" class="col-md-2 col-form-label">{{ entry_generator }}</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" name="product" value="" placeholder="{{ entry_generator }}" id="input-generator" data-oc-target="autocomplete-generator" class="form-control" autocomplete="off"/>
|
||||
<ul id="autocomplete-generator" class="dropdown-menu"></ul>
|
||||
<div class="text-muted">{{ help_generator }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="input-link" class="col-md-2 col-form-label">{{ entry_link }}</label>
|
||||
<div class="col-md-10">
|
||||
<textarea name="link" cols="40" rows="5" placeholder="{{ entry_link }}" id="input-link" class="form-control"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('#input-generator').autocomplete({
|
||||
'source': function(request, response) {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=account/tracking.autocomplete&customer_token={{ customer_token }}&search=' + encodeURIComponent(request) + '&tracking=' + encodeURIComponent($('#input-code').val()) + '&language={{ language }}',
|
||||
dataType: 'json',
|
||||
success: function(json) {
|
||||
response($.map(json, function(item) {
|
||||
return {
|
||||
label: item['name'],
|
||||
value: item['link']
|
||||
}
|
||||
}));
|
||||
}
|
||||
});
|
||||
},
|
||||
'select': function(item) {
|
||||
$('#input-link').val(item['value']);
|
||||
}
|
||||
});
|
||||
//--></script>
|
||||
{{ footer }}
|
44
catalog/view/template/account/transaction.twig
Normal file
44
catalog/view/template/account/transaction.twig
Normal file
@ -0,0 +1,44 @@
|
||||
{{ header }}
|
||||
<div id="account-transaction" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<p>{{ text_total }} <b>{{ total }}</b>.</p>
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-start">{{ column_date_added }}</td>
|
||||
<td class="text-start">{{ column_description }}</td>
|
||||
<td class="text-end">{{ column_amount }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if transactions %}
|
||||
{% for transaction in transactions %}
|
||||
<tr>
|
||||
<td class="text-start">{{ transaction.date_added }}</td>
|
||||
<td class="text-start">{{ transaction.description }}</td>
|
||||
<td class="text-end">{{ transaction.amount }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<tr>
|
||||
<td class="text-center" colspan="5">{{ text_no_results }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
16
catalog/view/template/account/wishlist.twig
Normal file
16
catalog/view/template/account/wishlist.twig
Normal file
@ -0,0 +1,16 @@
|
||||
{{ header }}
|
||||
<div id="account-wishlist" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<div id="wishlist">{{ list }}</div>
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
46
catalog/view/template/account/wishlist_list.twig
Normal file
46
catalog/view/template/account/wishlist_list.twig
Normal file
@ -0,0 +1,46 @@
|
||||
{% if products %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-center"><strong>{{ column_image }}</strong></td>
|
||||
<td class="text-start"><strong>{{ column_name }}</strong></td>
|
||||
<td class="text-start"><strong>{{ column_model }}</strong></td>
|
||||
<td class="text-end"><strong>{{ column_stock }}</strong></td>
|
||||
<td class="text-end"><strong>{{ column_price }}</strong></td>
|
||||
<td class="text-end"><strong>{{ column_action }}</strong></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for product in products %}
|
||||
<tr>
|
||||
<td class="text-center">{% if product.thumb %}<a href="{{ product.href }}"><img src="{{ product.thumb }}" alt="{{ product.name }}" title="{{ product.name }}"/></a>{% endif %}</td>
|
||||
<td class="text-start"><a href="{{ product.href }}">{{ product.name }}</a></td>
|
||||
<td class="text-start">{{ product.model }}</td>
|
||||
<td class="text-end">{{ product.stock }}</td>
|
||||
<td class="text-end">
|
||||
{% if product.price %}
|
||||
<div class="price">
|
||||
{% if not product.special %}
|
||||
{{ product.price }}
|
||||
{% else %}
|
||||
<b>{{ product.special }}</b> <s>{{ product.price }}</s>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<form method="post" data-oc-toggle="ajax" data-oc-load="{{ wishlist }}" data-oc-target="#wishlist">
|
||||
<input type="hidden" name="product_id" value="{{ product.product_id }}"/> <input type="hidden" name="quantity" value="{{ product.minimum }}"/>
|
||||
<button type="submit" formaction="{{ add_to_cart }}" data-bs-toggle="tooltip" title="{{ button_cart }}" class="btn btn-primary"><i class="fa-solid fa-cart-shopping fa-fw"></i></button>
|
||||
<button type="submit" formaction="{{ remove }}" data-bs-toggle="tooltip" title="{{ button_remove }}" class="btn btn-danger"><i class="fa-solid fa-circle-xmark fa-fw"></i></button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
{% endif %}
|
86
catalog/view/template/checkout/cart.twig
Normal file
86
catalog/view/template/checkout/cart.twig
Normal file
@ -0,0 +1,86 @@
|
||||
{{ header }}
|
||||
<div id="checkout-cart" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% if attention %}
|
||||
<div class="alert alert-info"><i class="fa-solid fa-circle-info"></i> {{ attention }} <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>
|
||||
{% endif %}
|
||||
{% if success %}
|
||||
<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> {{ success }} <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>
|
||||
{% endif %}
|
||||
{% if error_warning %}
|
||||
<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> {{ error_warning }} <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>
|
||||
{% endif %}
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}{% if weight %} ({{ weight }}){% endif %}</h1>
|
||||
<div id="shopping-cart">{{ list }}</div>
|
||||
{% if modules %}
|
||||
<h2>{{ text_next }}</h2>
|
||||
<p>{{ text_next_choice }}</p>
|
||||
<div id="accordion" class="accordion">
|
||||
{% for module in modules %}
|
||||
{{ module }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<br/>
|
||||
<div class="row">
|
||||
<div class="col"><a href="{{ continue }}" class="btn btn-light">{{ button_shopping }}</a></div>
|
||||
<div class="col text-end"><a href="{{ checkout }}" class="btn btn-primary">{{ button_checkout }}</a></div>
|
||||
</div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('#shopping-cart').on('submit', 'form', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
var element = this;
|
||||
|
||||
if (e.originalEvent !== undefined && e.originalEvent.submitter !== undefined) {
|
||||
var button = e.originalEvent.submitter;
|
||||
} else {
|
||||
var button = '';
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: $(button).attr('formaction'),
|
||||
type: 'post',
|
||||
data: $(element).serialize(),
|
||||
dataType: 'json',
|
||||
beforeSend: function () {
|
||||
$(button).button('loading');
|
||||
},
|
||||
complete: function () {
|
||||
$(button).button('reset');
|
||||
},
|
||||
success: function (json) {
|
||||
console.log(json);
|
||||
|
||||
if (json['redirect']) {
|
||||
location = json['redirect'];
|
||||
}
|
||||
|
||||
if (json['error']) {
|
||||
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
}
|
||||
|
||||
$('#shopping-cart').load('index.php?route=checkout/cart.list&language={{ language }}', {}, function () {
|
||||
$('#header-cart').load('index.php?route=common/cart.info&language={{ language }}');
|
||||
});
|
||||
},
|
||||
error: function (xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
//--></script>
|
||||
{{ footer }}
|
73
catalog/view/template/checkout/cart_list.twig
Normal file
73
catalog/view/template/checkout/cart_list.twig
Normal file
@ -0,0 +1,73 @@
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-center">{{ column_image }}</td>
|
||||
<td class="text-start">{{ column_name }}</td>
|
||||
<td class="text-start">{{ column_model }}</td>
|
||||
<td class="text-start">{{ column_quantity }}</td>
|
||||
<td class="text-end">{{ column_price }}</td>
|
||||
<td class="text-end">{{ column_total }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for product in products %}
|
||||
<tr>
|
||||
<td class="text-center">{% if product.thumb %} <a href="{{ product.href }}"><img src="{{ product.thumb }}" alt="{{ product.name }}" title="{{ product.name }}" class="img-thumbnail"/></a> {% endif %}</td>
|
||||
<td class="text-start text-wrap"><a href="{{ product.href }}">{{ product.name }}</a>{% if not product.stock %} <span class="text-danger">***</span>{% endif %}
|
||||
{% for option in product.option %}
|
||||
<br/>
|
||||
<small> - {{ option.name }}: {{ option.value }}</small>
|
||||
{% endfor %}
|
||||
{% if product.reward %}
|
||||
<br/>
|
||||
<small> - {{ text_points }}: {{ product.reward }}</small>
|
||||
{% endif %}
|
||||
{% if product.subscription %}
|
||||
<br/>
|
||||
<small> - {{ text_subscription }}: {{ product.subscription }}</small>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-start">{{ product.model }}</td>
|
||||
<td class="text-start">
|
||||
<form method="post" data-oc-target="#shopping-cart">
|
||||
<div class="input-group">
|
||||
<input type="text" name="quantity" value="{{ product.quantity }}" size="1" class="form-control"> <input type="hidden" name="key" value="{{ product.cart_id }}">
|
||||
<button type="submit" formaction="{{ product_edit }}" data-bs-toggle="tooltip" title="{{ button_update }}" class="btn btn-primary"><i class="fa-solid fa-rotate"></i></button>
|
||||
<button type="submit" formaction="{{ product_remove }}" data-bs-toggle="tooltip" title="{{ button_remove }}" class="btn btn-danger"><i class="fa-solid fa-circle-xmark"></i></button>
|
||||
</div>
|
||||
</form>
|
||||
</td>
|
||||
<td class="text-end">{{ product.price }}</td>
|
||||
<td class="text-end">{{ product.total }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% for voucher in vouchers %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="text-start text-wrap">{{ voucher.description }}</td>
|
||||
<td class="text-start"></td>
|
||||
<td class="text-start">
|
||||
<form method="post" data-oc-target="#shopping-cart">
|
||||
<div class="input-group">
|
||||
<input type="text" name="quantity" value="1" size="1" class="form-control" disabled/>
|
||||
<button type="submit" formaction="{{ voucher_remove }}" data-bs-toggle="tooltip" title="{{ button_remove }}" class="btn btn-danger"><i class="fa-solid fa-circle-xmark"></i></button>
|
||||
</div>
|
||||
<input type="hidden" name="key" value="{{ voucher.key }}"/>
|
||||
</form>
|
||||
</td>
|
||||
<td class="text-end">{{ voucher.amount }}</td>
|
||||
<td class="text-end">{{ voucher.amount }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
<tfoot id="checkout-total">
|
||||
{% for total in totals %}
|
||||
<tr>
|
||||
<td colspan="5" class="text-end"><strong>{{ total.title }}</strong></td>
|
||||
<td class="text-end">{{ total.text }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
38
catalog/view/template/checkout/checkout.twig
Normal file
38
catalog/view/template/checkout/checkout.twig
Normal file
@ -0,0 +1,38 @@
|
||||
{{ header }}
|
||||
<div id="checkout-checkout" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<div class="row">
|
||||
{% if register or payment_address or shipping_address %}
|
||||
<div class="col-md-7 mb-3">
|
||||
{% if register %}
|
||||
<div id="checkout-register">{{ register }}</div>
|
||||
{% endif %}
|
||||
{% if payment_address %}
|
||||
<div id="checkout-payment-address">{{ payment_address }}</div>
|
||||
{% endif %}
|
||||
{% if shipping_address %}
|
||||
<div id="checkout-shipping-address">{{ shipping_address }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="col">
|
||||
{% if shipping_method %}
|
||||
<div id="checkout-shipping-method" class="mb-3">{{ shipping_method }}</div>
|
||||
{% endif %}
|
||||
<div id="checkout-payment-method" class="mb-4">{{ payment_method }}</div>
|
||||
<div id="checkout-confirm">{{ confirm }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ content_bottom }}
|
||||
</div>
|
||||
{{ column_right }}
|
||||
</div>
|
||||
{{ footer }}
|
51
catalog/view/template/checkout/confirm.twig
Normal file
51
catalog/view/template/checkout/confirm.twig
Normal file
@ -0,0 +1,51 @@
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="text-start">{{ column_name }}</td>
|
||||
<td class="text-end">{{ column_total }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for product in products %}
|
||||
<tr>
|
||||
<td class="text-start">{{ product.quantity }}x <a href="{{ product.href }}">{{ product.name }}</a>
|
||||
{% for option in product.option %}
|
||||
<br/>
|
||||
<small> - {{ option.name }}: {{ option.value }}</small>
|
||||
{% endfor %}
|
||||
{% if product.reward %}
|
||||
<br/>
|
||||
<small> - {{ text_points }}: {{ product.reward }}</small>
|
||||
{% endif %}
|
||||
{% if product.subscription %}
|
||||
<br/>
|
||||
<small> - {{ text_subscription }} {{ product.subscription }}</small>
|
||||
{% endif %}</td>
|
||||
<td class="text-end">{{ product.total }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% for voucher in vouchers %}
|
||||
<tr>
|
||||
<td class="text-start">1x {{ voucher.description }}</td>
|
||||
<td class="text-end">{{ voucher.amount }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
{% for total in totals %}
|
||||
<tr>
|
||||
<td class="text-end"><strong>{{ total.title }}</strong></td>
|
||||
<td class="text-end">{{ total.text }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
<div id="checkout-payment">
|
||||
{% if payment %}
|
||||
{{ payment }}
|
||||
{% else %}
|
||||
<div class="text-end"><button type="button" class="btn btn-primary" disabled>{{ button_confirm }}</button></div>
|
||||
{% endif %}
|
||||
</div>
|
372
catalog/view/template/checkout/payment_address.twig
Normal file
372
catalog/view/template/checkout/payment_address.twig
Normal file
@ -0,0 +1,372 @@
|
||||
<fieldset>
|
||||
<legend>{{ heading_title }}</legend>
|
||||
<div id="payment-addresses" style="display: {% if addresses %}block{% else %}none{% endif %};">
|
||||
<div class="form-check">
|
||||
<input type="radio" name="payment_existing" value="1" id="input-payment-existing" class="form-check-input"{% if addresses %} checked{% endif %}/>
|
||||
<label for="input-payment-existing" class="form-check-label">{{ text_address_existing }}</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input type="radio" name="payment_existing" value="0" id="input-payment-new" class="form-check-input"{% if not addresses %} checked{% endif %}>
|
||||
<label for="input-payment-new" class="form-check-label">{{ text_address_new }}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="payment-existing" style="display: {% if addresses %}block{% else %}none{% endif %};">
|
||||
<select name="address_id" id="input-payment-address" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for address in addresses %}
|
||||
<option value="{{ address.address_id }}"{% if address.address_id == address_id %} selected{% endif %}>{{ address.firstname }} {{ address.lastname }},{% if address.company %} {{ address.company }},{% endif %} {{ address.address_1 }}, {{ address.city }}, {{ address.zone }}, {{ address.country }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-payment-address" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<br/>
|
||||
<div id="payment-new" style="display: {% if not addresses %}block{% else %}none{% endif %};">
|
||||
<form id="form-payment-address">
|
||||
<div class="row row-cols-1 row-cols-md-2">
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-payment-firstname" class="form-label">{{ entry_firstname }}</label>
|
||||
<input type="text" name="firstname" value="" placeholder="{{ entry_firstname }}" id="input-payment-firstname" class="form-control"/>
|
||||
<div id="error-payment-firstname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-payment-lastname" class="form-label">{{ entry_lastname }}</label>
|
||||
<input type="text" name="lastname" value="" placeholder="{{ entry_lastname }}" id="input-payment-lastname" class="form-control"/>
|
||||
<div id="error-payment-lastname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3">
|
||||
<label for="input-payment-company" class="form-label">{{ entry_company }}</label>
|
||||
<input type="text" name="company" value="" placeholder="{{ entry_company }}" id="input-payment-company" class="form-control"/>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-payment-address-1" class="form-label">{{ entry_address_1 }}</label>
|
||||
<input type="text" name="address_1" value="" placeholder="{{ entry_address_1 }}" id="input-payment-address-1" class="form-control"/>
|
||||
<div id="error-payment-address-1" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3">
|
||||
<label for="input-payment-address-2" class="form-label">{{ entry_address_2 }}</label>
|
||||
<input type="text" name="address_2" value="" placeholder="{{ entry_address_2 }}" id="input-payment-address-2" class="form-control"/>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-payment-city" class="form-label">{{ entry_city }}</label>
|
||||
<input type="text" name="city" value="" placeholder="{{ entry_city }}" id="input-payment-city" class="form-control"/>
|
||||
<div id="error-payment-city" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-payment-postcode" class="form-label">{{ entry_postcode }}</label>
|
||||
<input type="text" name="postcode" value="" placeholder="{{ entry_postcode }}" id="input-payment-postcode" class="form-control"/>
|
||||
<div id="error-payment-postcode" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-payment-country" class="form-label">{{ entry_country }}</label>
|
||||
<select name="country_id" id="input-payment-country" class="form-select">
|
||||
<option value="0">{{ text_select }}</option>
|
||||
{% for country in countries %}
|
||||
<option value="{{ country.country_id }}">{{ country.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-payment-country" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-payment-zone" class="form-label">{{ entry_zone }}</label>
|
||||
<select name="zone_id" id="input-payment-zone" class="form-select"></select>
|
||||
<div id="error-payment-zone" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% for custom_field in custom_fields %}
|
||||
|
||||
{% if custom_field.type == 'select' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<select name="custom_field[{{ custom_field.custom_field_id }}]" id="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<option value="{{ custom_field_value.custom_field_value_id }}">{{ custom_field_value.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'radio' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div id="input-payment-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="radio" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-payment-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"/>
|
||||
<label for="input-payment-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'checkbox' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div id="input-payment-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="custom_field[{{ custom_field.custom_field_id }}][]" value="{{ custom_field_value.custom_field_value_id }}" id="input-payment-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"/>
|
||||
<label for="input-payment-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'text' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-control"/>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'textarea' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<textarea name="custom_field[{{ custom_field.custom_field_id }}]" rows="5" placeholder="{{ custom_field.name }}" id="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-control">{{ custom_field.value }}</textarea>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'file' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div>
|
||||
<button type="button" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size }}" data-oc-target="#input-payment-custom-field-{{ custom_field.custom_field_id }}" class="btn btn-light"><i class="fa-solid fa-upload"></i> {{ button_upload }}</button>
|
||||
<input type="hidden" name="custom_field[{{ custom_field.custom_field_id }}]" value="" id="input-payment-custom-field-{{ custom_field.custom_field_id }}"/>
|
||||
</div>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'date' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-control date"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'time' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">-
|
||||
<label for="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-control time"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'datetime' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-control datetime"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="text-end mb-3">
|
||||
<button type="submit" id="button-payment-address" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</fieldset>
|
||||
<script type="text/javascript"><!--
|
||||
$('input[name=\'payment_existing\']').on('change', function() {
|
||||
if ($(this).val() == 1) {
|
||||
$('#payment-existing').show();
|
||||
$('#payment-new').hide();
|
||||
} else {
|
||||
$('#payment-existing').hide();
|
||||
$('#payment-new').show();
|
||||
}
|
||||
});
|
||||
|
||||
// Existing Payment Address
|
||||
$('#input-payment-address').on('change', function() {
|
||||
var element = this;
|
||||
|
||||
chain.attach(function() {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=checkout/payment_address.address&language={{ language }}&address_id=' + $(element).val(),
|
||||
dataType: 'json',
|
||||
beforeSend: function() {
|
||||
$(element).prop('disabled', true);
|
||||
},
|
||||
complete: function() {
|
||||
$(element).prop('disabled', false);
|
||||
},
|
||||
success: function(json) {
|
||||
console.log(json);
|
||||
|
||||
$('#input-payment-address').removeClass('is-invalid');
|
||||
$('#error-payment-address').removeClass('d-block');
|
||||
|
||||
if (json['redirect']) {
|
||||
location = json['redirect'];
|
||||
}
|
||||
|
||||
if (json['error']) {
|
||||
$('#input-payment-address').addClass('is-invalid');
|
||||
$('#error-payment-address').html(json['error']).addClass('d-block');
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#input-shipping-method').val('');
|
||||
$('#input-payment-method').val('');
|
||||
|
||||
$('#checkout-confirm').load('index.php?route=checkout/confirm.confirm&language={{ language }}');
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// New Payment Address
|
||||
$('#form-payment-address').on('submit', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
chain.attach(function() {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=checkout/payment_address.save&language={{ language }}',
|
||||
type: 'post',
|
||||
data: $('#form-payment-address').serialize(),
|
||||
dataType: 'json',
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
beforeSend: function() {
|
||||
$('#button-payment-address').button('loading');
|
||||
},
|
||||
complete: function() {
|
||||
$('#button-payment-address').button('reset');
|
||||
},
|
||||
success: function(json) {
|
||||
console.log(json);
|
||||
|
||||
$('#form-payment-address').find('.is-invalid').removeClass('is-invalid');
|
||||
$('#form-payment-address').find('.invalid-feedback').removeClass('d-block');
|
||||
|
||||
if (json['redirect']) {
|
||||
location = json['redirect'];
|
||||
}
|
||||
|
||||
if (json['error']) {
|
||||
if (json['error']['warning']) {
|
||||
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error']['warning'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
}
|
||||
|
||||
for (i in json['error']) {
|
||||
for (key in json['error']) {
|
||||
$('#input-payment-' + key.replaceAll('_', '-')).addClass('is-invalid').find('.form-control, .form-select, .form-check-input, .form-check-label').addClass('is-invalid');
|
||||
$('#error-payment-' + key.replaceAll('_', '-')).html(json['error'][key]).addClass('d-block');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#form-payment-address')[0].reset();
|
||||
|
||||
var html = '<option value="">{{ text_select|escape('js') }}</option>';
|
||||
|
||||
if (json['addresses']) {
|
||||
for (i in json['addresses']) {
|
||||
html += '<option value="' + json['addresses'][i]['address_id'] + '">' + json['addresses'][i]['firstname'] + ' ' + json['addresses'][i]['lastname'] + ', ' + (json['addresses'][i]['company'] ? json['addresses'][i]['company'] + ', ' : '') + json['addresses'][i]['address_1'] + ', ' + json['addresses'][i]['city'] + ', ' + json['addresses'][i]['zone'] + ', ' + json['addresses'][i]['country'] + '</option>';
|
||||
}
|
||||
}
|
||||
|
||||
// Payment Address
|
||||
$('#input-payment-address').html(html);
|
||||
|
||||
$('#input-payment-address').val(json['address_id']);
|
||||
|
||||
$('#payment-addresses').css({display: 'block'});
|
||||
|
||||
$('#input-payment-existing').trigger('click');
|
||||
|
||||
// Shipping Address
|
||||
var shipping_address_id = $('#input-shipping-address').val();
|
||||
|
||||
$('#input-shipping-address').html(html);
|
||||
|
||||
if (shipping_address_id) {
|
||||
$('#input-shipping-address').val(shipping_address_id);
|
||||
}
|
||||
|
||||
$('#shipping-address').css({display: 'block'});
|
||||
$('#shipping-addresses').css({display: 'block'});
|
||||
|
||||
$('#input-shipping-existing').trigger('click');
|
||||
|
||||
$('#input-shipping-method').val('');
|
||||
$('#input-payment-method').val('');
|
||||
|
||||
$('#checkout-confirm').load('index.php?route=checkout/confirm.confirm&language={{ language }}');
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('#input-payment-country').on('change', function() {
|
||||
var element = this;
|
||||
|
||||
chain.attach(function() {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=localisation/country&language={{ language }}&country_id=' + $('#input-payment-country').val(),
|
||||
dataType: 'json',
|
||||
beforeSend: function() {
|
||||
$(element).prop('disabled', true);
|
||||
$('#input-payment-zone').prop('disabled', true);
|
||||
},
|
||||
complete: function() {
|
||||
$(element).prop('disabled', false);
|
||||
$('#input-payment-zone').prop('disabled', false);
|
||||
},
|
||||
success: function(json) {
|
||||
if (json['postcode_required'] == '1') {
|
||||
$('#input-payment-postcode').parent().addClass('required');
|
||||
} else {
|
||||
$('#input-payment-postcode').parent().removeClass('required');
|
||||
}
|
||||
|
||||
html = '<option value="">{{ text_select|escape('js') }}</option>';
|
||||
|
||||
if (json['zone'] && json['zone'] != '') {
|
||||
for (i = 0; i < json['zone'].length; i++) {
|
||||
html += '<option value="' + json['zone'][i]['zone_id'] + '">' + json['zone'][i]['name'] + '</option>';
|
||||
}
|
||||
} else {
|
||||
html += '<option value="0" selected>{{ text_none|escape('js') }}</option>';
|
||||
}
|
||||
|
||||
$('#input-payment-zone').html(html);
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
//--></script>
|
230
catalog/view/template/checkout/payment_method.twig
Normal file
230
catalog/view/template/checkout/payment_method.twig
Normal file
@ -0,0 +1,230 @@
|
||||
<fieldset>
|
||||
<legend>{{ heading_title }}</legend>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fa fa-credit-card"></i></span><input type="text" name="payment_method" value="{{ payment_method }}" placeholder="{{ entry_payment_method }}" id="input-payment-method" class="form-control" readonly/>
|
||||
<button type="button" id="button-payment-methods" class="btn btn-primary">{{ button_choose }}</button>
|
||||
</div>
|
||||
<input type="hidden" name="code" value="{{ code }}" id="input-payment-code"/>
|
||||
<div id="error-payment-method" class="invalid-feedback"></div>
|
||||
</fieldset>
|
||||
<br/>
|
||||
<div class="mb-2">
|
||||
<label for="input-comment" class="form-label"><strong>{{ text_comments }}</strong></label> <textarea name="comment" rows="4" id="input-comment" class="form-control">{{ comment }}</textarea>
|
||||
</div>
|
||||
{% if text_agree %}
|
||||
<div class="form-check form-switch form-switch-lg form-check-reverse mt-3">
|
||||
<label class="form-check-label">{{ text_agree }}</label> <input type="checkbox" name="agree" value="1" id="input-checkout-agree" class="form-check-input"/>
|
||||
</div>
|
||||
{% endif %}
|
||||
<script type="text/javascript"><!--
|
||||
$('#button-payment-methods').on('click', function() {
|
||||
var element = this;
|
||||
|
||||
chain.attach(function() {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=checkout/payment_method.getMethods&language={{ language }}',
|
||||
dataType: 'json',
|
||||
beforeSend: function() {
|
||||
$(element).button('loading');
|
||||
},
|
||||
complete: function() {
|
||||
$(element).button('reset');
|
||||
},
|
||||
success: function(json) {
|
||||
console.log(json);
|
||||
|
||||
$('#input-payment-method').removeClass('is-invalid');
|
||||
$('#error-payment-method').removeClass('d-block');
|
||||
|
||||
if (json['error']) {
|
||||
$('#input-payment-method').addClass('is-invalid');
|
||||
$('#error-payment-method').html(json['error']).addClass('d-block');
|
||||
}
|
||||
|
||||
if (json['payment_methods']) {
|
||||
$('#modal-payment').remove();
|
||||
|
||||
html = '<div id="modal-payment" class="modal">';
|
||||
html += ' <div class="modal-dialog modal-dialog-centered">';
|
||||
html += ' <div class="modal-content">';
|
||||
html += ' <div class="modal-header">';
|
||||
html += ' <h5 class="modal-title"><i class="fa fa-credit-card"></i> {{ text_payment_method|escape('js') }}</h5>';
|
||||
html += ' <button type="button" class="btn-close" data-bs-dismiss="modal"></button>';
|
||||
html += ' </div>';
|
||||
html += ' <div class="modal-body">';
|
||||
html += ' <form id="form-payment-method">';
|
||||
html += ' <p>{{ text_payment|escape('js') }}</p>';
|
||||
|
||||
for (i in json['payment_methods']) {
|
||||
html += '<p><strong>' + json['payment_methods'][i]['name'] + '</strong></p>';
|
||||
|
||||
if (!json['payment_methods'][i]['error']) {
|
||||
for (j in json['payment_methods'][i]['option']) {
|
||||
html += '<div class="form-check">';
|
||||
|
||||
var code = i + '-' + j.replaceAll('_', '-');
|
||||
|
||||
html += '<input type="radio" name="payment_method" value="' + json['payment_methods'][i]['option'][j]['code'] + '" id="input-payment-method-' + code + '"';
|
||||
|
||||
if (json['payment_methods'][i]['option'][j]['code'] == $('#input-payment-code').val()) {
|
||||
html += ' checked';
|
||||
}
|
||||
|
||||
html += '/>';
|
||||
html += ' <label for="input-payment-method-' + code + '">' + json['payment_methods'][i]['option'][j]['name'] + '</label>';
|
||||
html += '</div>';
|
||||
}
|
||||
} else {
|
||||
html += '<div class="alert alert-danger">' + json['payment_methods'][i]['error'] + '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
html += ' <div class="text-end">';
|
||||
html += ' <button type="submit" id="button-payment-method" class="btn btn-primary">{{ button_continue|escape('js') }}</button>';
|
||||
html += ' </div>';
|
||||
html += ' </form>';
|
||||
html += ' </div>';
|
||||
html += ' </div>';
|
||||
html += ' </div>';
|
||||
html += '</div>';
|
||||
|
||||
$('body').append(html);
|
||||
|
||||
$('#modal-payment').modal('show');
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$(document).on('submit', '#form-payment-method', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var element = this;
|
||||
|
||||
chain.attach(function() {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=checkout/payment_method.save&language={{ language }}',
|
||||
type: 'post',
|
||||
data: $('#form-payment-method').serialize(),
|
||||
dataType: 'json',
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
beforeSend: function() {
|
||||
$('#button-payment-method').button('loading');
|
||||
},
|
||||
complete: function() {
|
||||
$('#button-payment-method').button('reset');
|
||||
},
|
||||
success: function(json) {
|
||||
console.log(json);
|
||||
|
||||
if (json['redirect']) {
|
||||
location = json['redirect'];
|
||||
}
|
||||
|
||||
if (json['error']) {
|
||||
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#modal-payment').modal('hide');
|
||||
|
||||
$('#input-payment-method').val($('input[name=\'payment_method\']:checked').parent().find('label').text());
|
||||
$('#input-payment-code').val($('input[name=\'payment_method\']:checked').val());
|
||||
|
||||
$('#checkout-confirm').load('index.php?route=checkout/confirm.confirm&language={{ language }}');
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Comment
|
||||
var timer = '';
|
||||
|
||||
$('#input-comment').on('keydown', function() {
|
||||
$('#button-confirm').prop('disabled', true);
|
||||
|
||||
// Request
|
||||
clearTimeout(timer);
|
||||
|
||||
timer = setTimeout(function(object) {
|
||||
chain.attach(function() {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=checkout/payment_method.comment&language={{ language }}',
|
||||
type: 'post',
|
||||
data: $('#input-comment').serialize(),
|
||||
dataType: 'json',
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
success: function(json) {
|
||||
console.log(json);
|
||||
|
||||
$('.alert-dismissible').remove();
|
||||
|
||||
if (json['redirect']) {
|
||||
location = json['redirect'];
|
||||
}
|
||||
|
||||
if (json['error']) {
|
||||
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#button-confirm').prop('disabled', false);
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#button-confirm').prop('disabled', false);
|
||||
}
|
||||
|
||||
window.setTimeout(function() {
|
||||
$('.alert-dismissible').fadeTo(1000, 0, function() {
|
||||
$(this).remove();
|
||||
});
|
||||
}, 3000);
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
$('#button-confirm').prop('disabled', false);
|
||||
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
}, 1000, this);
|
||||
});
|
||||
|
||||
/* Agree to terms */
|
||||
$('#input-checkout-agree').on('change', function() {
|
||||
var element = this;
|
||||
|
||||
chain.attach(function() {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=checkout/payment_method.agree&language={{ language }}',
|
||||
type: 'post',
|
||||
data: $('#input-checkout-agree').serialize(),
|
||||
dataType: 'json',
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
beforeSend: function() {
|
||||
$('#button-confirm').button('loading');
|
||||
},
|
||||
complete: function() {
|
||||
$('#button-confirm').button('reset');
|
||||
},
|
||||
success: function(json) {
|
||||
$('#checkout-confirm').load('index.php?route=checkout/confirm.confirm&language={{ language }}');
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
//--></script>
|
671
catalog/view/template/checkout/register.twig
Normal file
671
catalog/view/template/checkout/register.twig
Normal file
@ -0,0 +1,671 @@
|
||||
<form id="form-register">
|
||||
<p>{{ text_login }}</p>
|
||||
<fieldset>
|
||||
<legend>{{ heading_title }}</legend>
|
||||
<div class="row">
|
||||
{% if config_checkout_guest %}
|
||||
<div class="col mb-3 required">
|
||||
<div class="form-check form-check-inline">
|
||||
<input type="radio" name="account" value="1" id="input-register" class="form-check-input"{% if account %} checked{% endif %}/> <label for="input-register" class="form-check-label">{{ text_register }}</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input type="radio" name="account" value="0" id="input-guest" class="form-check-input"{% if not account %} checked{% endif %}/> <label for="input-guest" class="form-check-label">{{ text_guest }}</label>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="col mb-3{% if customer_groups|length <= 1 %} d-none{% endif %}">
|
||||
<label class="form-label">{{ entry_customer_group }}</label>
|
||||
<select name="customer_group_id" id="input-customer-group" class="form-select">
|
||||
{% for customer_group in customer_groups %}
|
||||
<option value="{{ customer_group.customer_group_id }}"{% if customer_group.customer_group_id == customer_group_id %} selected{% endif %}>{{ customer_group.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row row-cols-1 row-cols-md-2">
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-firstname" class="form-label">{{ entry_firstname }}</label>
|
||||
<input type="text" name="firstname" value="{{ firstname }}" placeholder="{{ entry_firstname }}" id="input-firstname" class="form-control"/>
|
||||
<div id="error-firstname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-lastname" class="form-label">{{ entry_lastname }}</label>
|
||||
<input type="text" name="lastname" value="{{ lastname }}" placeholder="{{ entry_lastname }}" id="input-lastname" class="form-control"/>
|
||||
<div id="error-lastname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-email" class="form-label">{{ entry_email }}</label>
|
||||
<input type="text" name="email" value="{{ email }}" placeholder="{{ entry_email }}" id="input-email" class="form-control"/>
|
||||
<div id="error-email" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% if config_telephone_display %}
|
||||
<div class="col mb-3{% if config_telephone_required %} required{% endif %}">
|
||||
<label for="input-telephone" class="form-label">{{ entry_telephone }}</label>
|
||||
<input type="text" name="telephone" value="{{ telephone }}" placeholder="{{ entry_telephone }}" id="input-telephone" class="form-control"/>
|
||||
<div id="error-telephone" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% for custom_field in custom_fields %}
|
||||
|
||||
{% if custom_field.location == 'account' %}
|
||||
|
||||
{% if custom_field.type == 'select' %}
|
||||
<div class="col mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label> <select name="custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" id="input-customer-custom-field-{{ custom_field.custom_field_id }}" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<option value="{{ custom_field_value.custom_field_value_id }}"{% if account_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == account_custom_field[custom_field.custom_field_id] %} selected{% endif %}>{{ custom_field_value.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'radio' %}
|
||||
<div class="col mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div id="input-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="radio" name="custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if account_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == account_custom_field[custom_field.custom_field_id] %} checked{% endif %}/>
|
||||
<label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'checkbox' %}
|
||||
<div class="col mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div id="input-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}][]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if account_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id in account_custom_field[custom_field.custom_field_id] %} checked{% endif %}/>
|
||||
<label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'text' %}
|
||||
<div class="col mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<input type="text" name="custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if account_custom_field[custom_field.custom_field_id] %}{{ account_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control"/>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'textarea' %}
|
||||
<div class="col mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label> <textarea name="custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" rows="5" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control">{% if account_custom_field[custom_field.custom_field_id] %}{{ account_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}</textarea>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'file' %}
|
||||
<div class="col mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div>
|
||||
<button type="button" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size }}" data-oc-target="#input-custom-field-{{ custom_field.custom_field_id }}" class="btn btn-light"><i class="fa-solid fa-upload"></i> {{ button_upload }}</button>
|
||||
<input type="hidden" name="custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if account_custom_field[custom_field.custom_field_id] %}{{ account_custom_field[custom_field.custom_field_id] }}{% endif %}" id="input-custom-field-{{ custom_field.custom_field_id }}"/>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'date' %}
|
||||
<div class="col mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if account_custom_field[custom_field.custom_field_id] %}{{ account_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control date"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'time' %}
|
||||
<div class="col mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if account_custom_field[custom_field.custom_field_id] %}{{ account_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control time"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'datetime' %}
|
||||
<div class="col mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if account_custom_field[custom_field.custom_field_id] %}{{ account_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control datetime"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</fieldset>
|
||||
{% if config_checkout_payment_address %}
|
||||
<fieldset>
|
||||
<legend>{{ text_payment_address }}</legend>
|
||||
<div class="row row-cols-1 row-cols-md-2">
|
||||
<div class="col mb-3">
|
||||
<label for="input-payment-company" class="form-label">{{ entry_company }}</label> <input type="text" name="payment_company" value="{{ payment_company }}" placeholder="{{ entry_company }}" id="input-payment-company" class="form-control"/>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-payment-address-1" class="form-label">{{ entry_address_1 }}</label> <input type="text" name="payment_address_1" value="{{ payment_address_1 }}" placeholder="{{ entry_address_1 }}" id="input-payment-address-1" class="form-control"/>
|
||||
<div id="error-payment-address-1" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3">
|
||||
<label for="input-payment-address-2" class="form-label">{{ entry_address_2 }}</label> <input type="text" name="payment_address_2" value="{{ payment_address_2 }}" placeholder="{{ entry_address_2 }}" id="input-payment-address-2" class="form-control"/>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-payment-city" class="form-label">{{ entry_city }}</label> <input type="text" name="payment_city" value="{{ payment_city }}" placeholder="{{ entry_city }}" id="input-payment-city" class="form-control"/>
|
||||
<div id="error-payment-city" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-payment-postcode" class="form-label">{{ entry_postcode }}</label> <input type="text" name="payment_postcode" value="{{ payment_postcode }}" placeholder="{{ entry_postcode }}" id="input-payment-postcode" class="form-control"/>
|
||||
<div id="error-payment-postcode" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-payment-country" class="form-label">{{ entry_country }}</label> <select name="payment_country_id" id="input-payment-country" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for country in countries %}
|
||||
<option value="{{ country.country_id }}"{% if country.country_id == payment_country_id %} selected{% endif %}>{{ country.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-payment-country" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-payment-zone" class="form-label">{{ entry_zone }}</label>
|
||||
<select name="payment_zone_id" id="input-payment-zone" class="form-select" data-oc-value="{{ payment_zone_id }}"></select>
|
||||
<div id="error-payment-zone" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% for custom_field in custom_fields %}
|
||||
{% if custom_field.location == 'address' %}
|
||||
|
||||
{% if custom_field.type == 'select' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label> <select name="payment_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" id="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<option value="{{ custom_field_value.custom_field_value_id }}"{% if payment_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == payment_custom_field[custom_field.custom_field_id] %} selected{% endif %}>{{ custom_field_value.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'radio' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div id="input-payment-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="radio" name="payment_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-payment-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if payment_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == payment_custom_field[custom_field.custom_field_id] %} checked{% endif %}/> <label for="input-payment-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if custom_field.type == 'checkbox' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div id="input-payment-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="payment_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}][]" value="{{ custom_field_value.custom_field_value_id }}" id="input-payment-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if address_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id in address_custom_field[custom_field.custom_field_id] %} checked{% endif %}/> <label for="input-payment-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if custom_field.type == 'text' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<input type="text" name="payment_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if address_custom_field[custom_field.custom_field_id] %}{{ address_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-control"/>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if custom_field.type == 'textarea' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label> <textarea name="payment_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" rows="5" placeholder="{{ custom_field.name }}" id="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-control">{% if address_custom_field[custom_field.custom_field_id] %}{{ address_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}</textarea>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if custom_field.type == 'file' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div>
|
||||
<button type="button" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size }}" data-oc-target="#input-payment-custom-field-{{ custom_field.custom_field_id }}" class="btn btn-light"><i class="fa-solid fa-upload"></i> {{ button_upload }}</button>
|
||||
<input type="hidden" name="payment_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if payment_custom_field[custom_field.custom_field_id] %}{{ payment_custom_field[custom_field.custom_field_id] }}{% endif %}" id="input-payment-custom-field-{{ custom_field.custom_field_id }}"/>
|
||||
</div>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if custom_field.type == 'date' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="payment_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if payment_custom_field[custom_field.custom_field_id] %}{{ payment_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-control date"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if custom_field.type == 'time' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="payment_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if payment_custom_field[custom_field.custom_field_id] %}{{ payment_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-control time"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'datetime' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="payment_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if payment_custom_field[custom_field.custom_field_id] %}{{ payment_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-payment-custom-field-{{ custom_field.custom_field_id }}" class="form-control datetime"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-payment-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% if shipping_required %}
|
||||
<div class="col mb-3">
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="address_match" value="1" id="input-address-match" class="form-check-input" checked/> <label for="input-address-match" class="form-check-label">{{ entry_match }}</label>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
{% endif %}
|
||||
<fieldset id="shipping-address" style="display: {% if not config_checkout_payment_address %}block{% else %}none{% endif %};">
|
||||
<legend>{{ text_shipping_address }}</legend>
|
||||
<div class="row row-cols-1 row-cols-md-2">
|
||||
{% if config_checkout_payment_address %}
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-firstname" class="form-label">{{ entry_firstname }}</label>
|
||||
<input type="text" name="shipping_firstname" value="{{ shipping_firstname }}" placeholder="{{ entry_firstname }}" id="input-shipping-firstname" class="form-control"/>
|
||||
<div id="error-shipping-firstname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-lastname" class="form-label">{{ entry_lastname }}</label>
|
||||
<input type="text" name="shipping_lastname" value="{{ shipping_lastname }}" placeholder="{{ entry_lastname }}" id="input-shipping-lastname" class="form-control"/>
|
||||
<div id="error-shipping-lastname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="col mb-3">
|
||||
<label for="input-shipping-company" class="form-label">{{ entry_company }}</label>
|
||||
<input type="text" name="shipping_company" value="{{ shipping_company }}" placeholder="{{ entry_company }}" id="input-shipping-company" class="form-control"/>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-address-1" class="form-label">{{ entry_address_1 }}</label>
|
||||
<input type="text" name="shipping_address_1" value="{{ shipping_address_1 }}" placeholder="{{ entry_address_1 }}" id="input-shipping-address-1" class="form-control"/>
|
||||
<div id="error-shipping-address-1" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3">
|
||||
<label for="input-shipping-address-2" class="form-label">{{ entry_address_2 }}</label>
|
||||
<input type="text" name="shipping_address_2" value="{{ shipping_address_2 }}" placeholder="{{ entry_address_2 }}" id="input-shipping-address-2" class="form-control"/>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-city" class="form-label">{{ entry_city }}</label>
|
||||
<input type="text" name="shipping_city" value="{{ shipping_city }}" placeholder="{{ entry_city }}" id="input-shipping-city" class="form-control"/>
|
||||
<div id="error-shipping-city" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-postcode" class="form-label">{{ entry_postcode }}</label>
|
||||
<input type="text" name="shipping_postcode" value="{{ shipping_postcode }}" placeholder="{{ entry_postcode }}" id="input-shipping-postcode" class="form-control"/>
|
||||
<div id="error-shipping-postcode" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-country" class="form-label">{{ entry_country }}</label>
|
||||
<select name="shipping_country_id" id="input-shipping-country" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for country in countries %}
|
||||
<option value="{{ country.country_id }}"{% if country.country_id == shipping_country_id %} selected{% endif %}>{{ country.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-shipping-country" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-zone" class="form-label">{{ entry_zone }}</label>
|
||||
<select name="shipping_zone_id" id="input-shipping-zone" class="form-select" data-oc-value="{{ shipping_zone_id }}"></select>
|
||||
<div id="error-shipping-zone" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% for custom_field in custom_fields %}
|
||||
{% if custom_field.location == 'address' %}
|
||||
|
||||
{% if custom_field.type == 'select' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<select name="shipping_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<option value="{{ custom_field_value.custom_field_value_id }}"{% if shipping_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == shipping_custom_field[custom_field.custom_field_id] %} selected{% endif %}>{{ custom_field_value.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'radio' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div id="input-shipping-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="radio" name="shipping_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-shipping-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if shipping_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id in shipping_custom_field[custom_field.custom_field_id] %} checked{% endif %}/>
|
||||
<label for="input-shipping-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'checkbox' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div id="input-shipping-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="shipping_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}][]" value="{{ custom_field_value.custom_field_value_id }}" id="input-shipping-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if shipping_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id in shipping_custom_field[custom_field.custom_field_id] %} checked{% endif %}/>
|
||||
<label for="input-shipping-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'text' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<input type="text" name="shipping_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if shipping_custom_field[custom_field.custom_field_id] %}{{ shipping_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-control"/>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'textarea' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<textarea name="shipping_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" rows="5" placeholder="{% if shipping_custom_field[custom_field.custom_field_id] %}{{ shipping_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-control">{{ custom_field.value }}</textarea>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if custom_field.type == 'file' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div>
|
||||
<button type="button" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size }}" data-oc-target="#input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="btn btn-light"><i class="fa-solid fa-upload"></i> {{ button_upload }}</button>
|
||||
<input type="hidden" name="shipping_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if shipping_custom_field[custom_field.custom_field_id] %}{{ shipping_custom_field[custom_field.custom_field_id] }}{% endif %}" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}"/>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'date' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="shipping_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if shipping_custom_field[custom_field.custom_field_id] %}{{ shipping_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-control date"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'time' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="shipping_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if shipping_custom_field[custom_field.custom_field_id] %}{{ shipping_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-control time"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'datetime' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="shipping_custom_field[{{ custom_field.location }}][{{ custom_field.custom_field_id }}]" value="{% if shipping_custom_field[custom_field.custom_field_id] %}{{ shipping_custom_field[custom_field.custom_field_id] }}{% else %}{{ custom_field.value }}{% endif %}" placeholder="{{ custom_field.name }}" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-control datetime"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</fieldset>
|
||||
<div id class="row row-cols-1 row-cols-md-2">
|
||||
<div id="password" class="col mb-3 required">
|
||||
<fieldset>
|
||||
<legend>{{ text_your_password }}</legend>
|
||||
<div class="row">
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-password" class="form-label">{{ entry_password }}</label> <input type="password" name="password" value="" placeholder="{{ entry_password }}" id="input-password" class="form-control"/>
|
||||
<div id="error-password" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="col mb-3 required">{{ captcha }}</div>
|
||||
</div>
|
||||
<div id class="row">
|
||||
<div class="col">
|
||||
<div class="form-check form-switch form-switch-lg">
|
||||
<label for="input-newsletter" class="form-check-label">{{ entry_newsletter }}</label>
|
||||
<input type="checkbox" name="newsletter" value="1" id="input-newsletter" class="form-check-input"/>
|
||||
</div>
|
||||
{% if text_agree %}
|
||||
<div id="register-agree" class="form-check form-switch form-switch-lg">
|
||||
<label class="form-check-label">{{ text_agree }}</label>
|
||||
<input type="checkbox" name="agree" value="1" id="input-register-agree" class="form-check-input"{% if agree %} checked{% endif %}/>
|
||||
</div>
|
||||
{% endif %}
|
||||
<button type="submit" id="button-register" class="btn btn-primary mt-2">{{ button_continue }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript"><!--
|
||||
// Account
|
||||
$('input[name=\'account\']').on('click', function() {
|
||||
if ($(this).val() == 1) {
|
||||
$('#password').removeClass('d-none');
|
||||
} else {
|
||||
// If guest hide password field
|
||||
$('#password').addClass('d-none');
|
||||
}
|
||||
|
||||
if ($(this).val() == 1) {
|
||||
$('#register-agree').removeClass('d-none');
|
||||
} else {
|
||||
// If guest hide register agree field
|
||||
$('#register-agree').addClass('d-none');
|
||||
}
|
||||
});
|
||||
|
||||
$('input[name=\'account\']:checked').trigger('click');
|
||||
|
||||
// Customer Group
|
||||
$('#input-customer-group').on('change', function() {
|
||||
var element = this;
|
||||
|
||||
chain.attach(function() {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=account/custom_field&language={{ language }}&customer_group_id=' + $(element).val(),
|
||||
dataType: 'json',
|
||||
beforeSend: function() {
|
||||
$(element).prop('disabled', true);
|
||||
},
|
||||
complete: function() {
|
||||
$(element).prop('disabled', false);
|
||||
},
|
||||
success: function(json) {
|
||||
$('.custom-field').addClass('d-none');
|
||||
$('.custom-field').removeClass('required');
|
||||
|
||||
for (i = 0; i < json.length; i++) {
|
||||
custom_field = json[i];
|
||||
|
||||
$('.custom-field-' + custom_field['custom_field_id']).removeClass('d-none');
|
||||
|
||||
if (custom_field['required']) {
|
||||
$('.custom-field-' + custom_field['custom_field_id']).addClass('required');
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('#input-customer-group').trigger('change');
|
||||
|
||||
$('#input-address-match').on('change', function() {
|
||||
if ($(this).prop('checked')) {
|
||||
$('#shipping-address').hide();
|
||||
} else {
|
||||
$('#shipping-address').show();
|
||||
}
|
||||
});
|
||||
|
||||
$('#form-register').on('submit', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var element = this;
|
||||
|
||||
chain.attach(function() {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=checkout/register.save&language={{ language }}',
|
||||
type: 'post',
|
||||
dataType: 'json',
|
||||
data: $('#form-register').serialize(),
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
beforeSend: function() {
|
||||
$('#button-register').button('loading');
|
||||
},
|
||||
complete: function() {
|
||||
$('#button-register').button('reset');
|
||||
},
|
||||
success: function(json) {
|
||||
console.log(json);
|
||||
|
||||
$('#form-register').find('.is-invalid').removeClass('is-invalid');
|
||||
$('#form-register').find('.invalid-feedback').removeClass('d-block');
|
||||
|
||||
if (json['redirect']) {
|
||||
location = json['redirect'];
|
||||
}
|
||||
|
||||
if (json['error']) {
|
||||
if (json['error']['warning']) {
|
||||
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error']['warning'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
}
|
||||
|
||||
for (key in json['error']) {
|
||||
$('#input-' + key.replaceAll('_', '-')).addClass('is-invalid').find('.form-control, .form-select, .form-check-input, .form-check-label').addClass('is-invalid');
|
||||
$('#error-' + key.replaceAll('_', '-')).html(json['error'][key]).addClass('d-block');
|
||||
}
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
if ($('#input-register').prop('checked')) {
|
||||
$('input[name=\'account\']').prop('disabled', true);
|
||||
$('#input-customer-group').prop('disabled', true);
|
||||
$('#input-password').prop('disabled', true);
|
||||
$('#input-captcha').prop('disabled', true);
|
||||
$('#input-register-agree').prop('disabled', true);
|
||||
}
|
||||
|
||||
$('#input-shipping-method').val('');
|
||||
$('#input-payment-method').val('');
|
||||
|
||||
$('#checkout-confirm').load('index.php?route=checkout/confirm.confirm&language={{ language }}');
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('select[name$=\'_country_id\']').on('change', function() {
|
||||
var element = this;
|
||||
var type = $(this).attr('name').slice(0, -11);
|
||||
|
||||
chain.attach(function() {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=localisation/country&language={{ language }}&country_id=' + $('#input-' + type + '-country').val(),
|
||||
dataType: 'json',
|
||||
beforeSend: function() {
|
||||
$(element).prop('disabled', true);
|
||||
$('#input-' + type + '-zone').prop('disabled', true);
|
||||
},
|
||||
complete: function() {
|
||||
$(element).prop('disabled', false);
|
||||
$('#input-' + type + '-zone').prop('disabled', false);
|
||||
},
|
||||
success: function(json) {
|
||||
if (json['postcode_required'] == '1') {
|
||||
$('#input-' + type + '-postcode').parent().addClass('required');
|
||||
} else {
|
||||
$('#input-' + type + '-postcode').parent().removeClass('required');
|
||||
}
|
||||
|
||||
html = '<option value="">{{ text_select|escape('js') }}</option>';
|
||||
|
||||
if (json['zone'] && json['zone'] != '') {
|
||||
for (i = 0; i < json['zone'].length; i++) {
|
||||
html += '<option value="' + json['zone'][i]['zone_id'] + '"';
|
||||
|
||||
if (json['zone'][i]['zone_id'] == $('#input-' + type + '-zone').attr('data-oc-value')) {
|
||||
html += ' selected';
|
||||
}
|
||||
|
||||
html += '>' + json['zone'][i]['name'] + '</option>';
|
||||
}
|
||||
} else {
|
||||
html += '<option value="0" selected>{{ text_none|escape('js') }}</option>';
|
||||
}
|
||||
|
||||
$('#input-' + type + '-zone').html(html);
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('select[name$=\'_country_id\']').trigger('change');
|
||||
//--></script>
|
382
catalog/view/template/checkout/shipping_address.twig
Normal file
382
catalog/view/template/checkout/shipping_address.twig
Normal file
@ -0,0 +1,382 @@
|
||||
<fieldset id="shipping-address" style="display: {% if payment_address_required and not addresses %}none{% else %}block{% endif %};">
|
||||
<legend>{{ heading_title }}</legend>
|
||||
<div id="shipping-addresses" style="display: {% if addresses %}block{% else %}none{% endif %};">
|
||||
<div class="form-check">
|
||||
<input type="radio" name="shipping_existing" value="1" id="input-shipping-existing" class="form-check-input"{% if addresses %} checked{% endif %}/>
|
||||
<label for="input-shipping-existing" class="form-check-label">{{ text_address_existing }}</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input type="radio" name="shipping_existing" value="0" id="input-shipping-new" class="form-check-input"{% if not addresses %} checked{% endif %}/>
|
||||
<label for="input-shipping-new" class="form-check-label">{{ text_address_new }}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="shipping-existing" style="display: {% if addresses %}block{% else %}none{% endif %};">
|
||||
<select name="address_id" id="input-shipping-address" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for address in addresses %}
|
||||
<option value="{{ address.address_id }}"{% if address.address_id == address_id %} selected{% endif %}>{{ address.firstname }} {{ address.lastname }},{% if address.company %} {{ address.company }},{% endif %} {{ address.address_1 }}, {{ address.city }}, {{ address.zone }}, {{ address.country }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-shipping-address" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<br/>
|
||||
<div id="shipping-new" style="display: {% if not addresses %}block{% else %}none{% endif %};">
|
||||
<form id="form-shipping-address">
|
||||
<div class="row row-cols-1 row-cols-md-2">
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-firstname" class="form-label">{{ entry_firstname }}</label >
|
||||
<input type="text" name="firstname" value="" placeholder="{{ entry_firstname }}" id="input-shipping-firstname" class="form-control"/>
|
||||
<div id="error-shipping-firstname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-lastname" class="form-label">{{ entry_lastname }}</label>
|
||||
<input type="text" name="lastname" value="" placeholder="{{ entry_lastname }}" id="input-shipping-lastname" class="form-control"/>
|
||||
<div id="error-shipping-lastname" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3">
|
||||
<label for="input-shipping-company" class="form-label">{{ entry_company }}</label>
|
||||
<input type="text" name="company" value="" placeholder="{{ entry_company }}" id="input-shipping-company" class="form-control"/>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-address-1" class="form-label">{{ entry_address_1 }}</label>
|
||||
<input type="text" name="address_1" value="" placeholder="{{ entry_address_1 }}" id="input-shipping-address-1" class="form-control"/>
|
||||
<div id="error-shipping-address-1" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3">
|
||||
<label for="input-shipping-address-2" class="form-label">{{ entry_address_2 }}</label>
|
||||
<input type="text" name="address_2" value="" placeholder="{{ entry_address_2 }}" id="input-shipping-address-2" class="form-control"/>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-city" class="form-label">{{ entry_city }}</label>
|
||||
<input type="text" name="city" value="" placeholder="{{ entry_city }}" id="input-shipping-city" class="form-control"/>
|
||||
<div id="error-shipping-city" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-postcode" class="form-label">{{ entry_postcode }}</label>
|
||||
<input type="text" name="postcode" value="{{ postcode }}" placeholder="{{ entry_postcode }}" id="input-shipping-postcode" class="form-control"/>
|
||||
<div id="error-shipping-postcode" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-country" class="form-label">{{ entry_country }}</label>
|
||||
<select name="country_id" id="input-shipping-country" class="form-select">
|
||||
<option value="0">{{ text_select }}</option>
|
||||
{% for country in countries %}
|
||||
<option value="{{ country.country_id }}"{% if country.country_id == country_id %} selected{% endif %}>{{ country.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-shipping-country" class="invalid-feedback"></div>
|
||||
</div>
|
||||
|
||||
<div class="col mb-3 required">
|
||||
<label for="input-shipping-zone" class="form-label">{{ entry_zone }}</label>
|
||||
<select name="zone_id" id="input-shipping-zone" class="form-select"></select>
|
||||
<div id="error-shipping-zone" class="invalid-feedback"></div>
|
||||
</div>
|
||||
|
||||
{% for custom_field in custom_fields %}
|
||||
|
||||
{% if custom_field.type == 'select' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<select name="custom_field[{{ custom_field.custom_field_id }}]" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<option value="{{ custom_field_value.custom_field_value_id }}">{{ custom_field_value.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'radio' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div id="input-shipping-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="radio" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-shipping-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"/>
|
||||
<label for="input-shipping-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'checkbox' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div id="input-shipping-custom-field-{{ custom_field.custom_field_id }}">
|
||||
{% for custom_field_value in custom_field.custom_field_value %}
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="custom_field[{{ custom_field.custom_field_id }}][]" value="{{ custom_field_value.custom_field_value_id }}" id="input-shipping-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"/>
|
||||
<label for="input-shipping-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'text' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-control"/>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'textarea' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<textarea name="custom_field[{{ custom_field.custom_field_id }}]" rows="5" placeholder="{{ custom_field.value }}" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-control">{{ custom_field.value }}</textarea>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'file' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label class="form-label">{{ custom_field.name }}</label>
|
||||
<div>
|
||||
<button type="button" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size }}" data-oc-target="#input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="btn btn-light"><i class="fa-solid fa-upload"></i> {{ button_upload }}</button>
|
||||
<input type="hidden" name="custom_field{{ custom_field.custom_field_id }}]" value="" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}"/>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'date' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-control date"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'time' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-control time"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if custom_field.type == 'datetime' %}
|
||||
<div class="col mb-3{% if custom_field.required %} required{% endif %} custom-field custom-field-{{ custom_field.custom_field_id }}">
|
||||
<label for="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-label">{{ custom_field.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-shipping-custom-field-{{ custom_field.custom_field_id }}" class="form-control datetime"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-shipping-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
<div class="text-end mb-3">
|
||||
<button type="submit" id="button-shipping-address" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</fieldset>
|
||||
<script type="text/javascript"><!--
|
||||
$('input[name=\'shipping_existing\']').on('change', function () {
|
||||
if ($(this).val() == 1) {
|
||||
$('#shipping-existing').show();
|
||||
$('#shipping-new').hide();
|
||||
} else {
|
||||
$('#shipping-existing').hide();
|
||||
$('#shipping-new').show();
|
||||
}
|
||||
});
|
||||
|
||||
// Existing Shipping Address
|
||||
$('#input-shipping-address').on('change', function () {
|
||||
var element = this;
|
||||
|
||||
chain.attach(function () {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=checkout/shipping_address.address&language={{ language }}&address_id=' + $(element).val(),
|
||||
dataType: 'json',
|
||||
beforeSend: function () {
|
||||
$(element).prop('disabled', true);
|
||||
},
|
||||
complete: function () {
|
||||
$(element).prop('disabled', false);
|
||||
},
|
||||
success: function (json) {
|
||||
console.log(json);
|
||||
|
||||
$('#input-shipping-address').removeClass('is-invalid');
|
||||
$('#error-shipping-address').removeClass('d-block');
|
||||
|
||||
if (json['redirect']) {
|
||||
location = json['redirect'];
|
||||
}
|
||||
|
||||
if (json['error']) {
|
||||
$('#input-shipping-address').addClass('is-invalid');
|
||||
$('#error-shipping-address').html(json['error']).addClass('d-block');
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#input-shipping-method').val('');
|
||||
$('#input-payment-method').val('');
|
||||
|
||||
$('#checkout-confirm').load('index.php?route=checkout/confirm.confirm&language={{ language }}');
|
||||
}
|
||||
},
|
||||
error: function (xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// New Shipping Address
|
||||
$('#form-shipping-address').on('submit', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
chain.attach(function () {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=checkout/shipping_address.save&language={{ language }}',
|
||||
type: 'post',
|
||||
data: $('#form-shipping-address').serialize(),
|
||||
dataType: 'json',
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
beforeSend: function () {
|
||||
$('#button-shipping-address').button('loading');
|
||||
},
|
||||
complete: function () {
|
||||
$('#button-shipping-address').button('reset');
|
||||
},
|
||||
success: function (json) {
|
||||
console.log(json);
|
||||
|
||||
$('#form-shipping-address').find('.is-invalid').removeClass('is-invalid');
|
||||
$('#form-shipping-address').find('.invalid-feedback').removeClass('d-block');
|
||||
|
||||
if (json['redirect']) {
|
||||
location = json['redirect'];
|
||||
}
|
||||
|
||||
if (json['error']) {
|
||||
if (json['error']['warning']) {
|
||||
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error']['warning'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
}
|
||||
|
||||
for (i in json['error']) {
|
||||
for (key in json['error']) {
|
||||
$('#input-shipping-' + key.replaceAll('_', '-')).addClass('is-invalid').find('.form-control, .form-select, .form-check-input, .form-check-label').addClass('is-invalid');
|
||||
$('#error-shipping-' + key.replaceAll('_', '-')).html(json['error'][key]).addClass('d-block');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#form-shipping-address')[0].reset();
|
||||
|
||||
var html = '<option value="">{{ text_select|escape('js') }}</option>';
|
||||
|
||||
if (json['addresses']) {
|
||||
for (i in json['addresses']) {
|
||||
html += '<option value="' + json['addresses'][i]['address_id'] + '">' + json['addresses'][i]['firstname'] + ' ' + json['addresses'][i]['lastname'] + ', ' + (json['addresses'][i]['company'] ? json['addresses'][i]['company'] + ', ' : '') + json['addresses'][i]['address_1'] + ', ' + json['addresses'][i]['city'] + ', ' + json['addresses'][i]['zone'] + ', ' + json['addresses'][i]['country'] + '</option>';
|
||||
}
|
||||
}
|
||||
|
||||
// Shipping Address
|
||||
$('#input-shipping-address').html(html);
|
||||
|
||||
$('#input-shipping-address').val(json['address_id']);
|
||||
|
||||
$('#shipping-addresses').css({display: 'block'});
|
||||
|
||||
$('#input-shipping-existing').trigger('click');
|
||||
|
||||
// Payment Address
|
||||
var payment_address_id = $('#input-payment-address').val();
|
||||
|
||||
$('#input-payment-address').html(html);
|
||||
|
||||
if (payment_address_id) {
|
||||
$('#input-payment-address').val(payment_address_id);
|
||||
}
|
||||
|
||||
$('#payment-addresses').css({display: 'block'});
|
||||
|
||||
$('#input-payment-existing').trigger('click');
|
||||
|
||||
$('#input-shipping-method').val('');
|
||||
$('#input-payment-method').val('');
|
||||
|
||||
$('#checkout-confirm').load('index.php?route=checkout/confirm.confirm&language={{ language }}');
|
||||
}
|
||||
},
|
||||
error: function (xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('#input-shipping-country').on('change', function () {
|
||||
var element = this;
|
||||
|
||||
chain.attach(function () {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=localisation/country&language={{ language }}&country_id=' + $('#input-shipping-country').val(),
|
||||
dataType: 'json',
|
||||
beforeSend: function () {
|
||||
$(element).prop('disabled', true);
|
||||
$('#input-shipping-zone').prop('disabled', true);
|
||||
},
|
||||
complete: function () {
|
||||
$(element).prop('disabled', false);
|
||||
$('#input-shipping-zone').prop('disabled', false);
|
||||
},
|
||||
success: function (json) {
|
||||
if (json['postcode_required'] == '1') {
|
||||
$('#input-shipping-postcode').parent().addClass('required');
|
||||
} else {
|
||||
$('#input-shipping-postcode').parent().removeClass('required');
|
||||
}
|
||||
|
||||
html = '<option value="">{{ text_select|escape('js') }}</option>';
|
||||
|
||||
if (json['zone'] && json['zone'] != '') {
|
||||
for (i = 0; i < json['zone'].length; i++) {
|
||||
html += '<option value="' + json['zone'][i]['zone_id'] + '"';
|
||||
|
||||
if (json['zone'][i]['zone_id'] == '{{ zone_id }}') {
|
||||
html += ' selected';
|
||||
}
|
||||
|
||||
html += '>' + json['zone'][i]['name'] + '</option>';
|
||||
}
|
||||
} else {
|
||||
html += '<option value="0" selected>{{ text_none|escape('js') }}</option>';
|
||||
}
|
||||
|
||||
$('#input-shipping-zone').html(html);
|
||||
},
|
||||
error: function (xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('#input-shipping-country').trigger('change');
|
||||
//--></script>
|
142
catalog/view/template/checkout/shipping_method.twig
Normal file
142
catalog/view/template/checkout/shipping_method.twig
Normal file
@ -0,0 +1,142 @@
|
||||
<fieldset>
|
||||
<legend>{{ heading_title }}</legend>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fa fa-truck"></i></span><input type="text" name="shipping_method" value="{{ shipping_method }}" placeholder="{{ entry_shipping_method }}" id="input-shipping-method" class="form-control" readonly/>
|
||||
<button type="button" id="button-shipping-methods" class="btn btn-primary">{{ button_choose }}</button>
|
||||
</div>
|
||||
<input type="hidden" name="code" value="{{ code }}" id="input-shipping-code"/>
|
||||
<div id="error-shipping-method" class="invalid-feedback"></div>
|
||||
</fieldset>
|
||||
<script type="text/javascript"><!--
|
||||
$('#button-shipping-methods').on('click', function() {
|
||||
var element = this;
|
||||
|
||||
chain.attach(function() {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=checkout/shipping_method.quote&language={{ language }}',
|
||||
dataType: 'json',
|
||||
beforeSend: function() {
|
||||
$(element).button('loading');
|
||||
},
|
||||
complete: function() {
|
||||
$(element).button('reset');
|
||||
},
|
||||
success: function(json) {
|
||||
console.log(json);
|
||||
|
||||
$('#input-shipping-method').removeClass('is-invalid');
|
||||
$('#error-shipping-method').removeClass('d-block');
|
||||
|
||||
if (json['error']) {
|
||||
$('#input-shipping-method').addClass('is-invalid');
|
||||
$('#error-shipping-method').html(json['error']).addClass('d-block');
|
||||
}
|
||||
|
||||
if (json['shipping_methods']) {
|
||||
$('#modal-shipping').remove();
|
||||
|
||||
html = '<div id="modal-shipping" class="modal">';
|
||||
html += ' <div class="modal-dialog modal-dialog-centered">';
|
||||
html += ' <div class="modal-content">';
|
||||
html += ' <div class="modal-header">';
|
||||
html += ' <h5 class="modal-title"><i class="fa fa-truck"></i> {{ text_shipping_method|escape('js') }}</h5>';
|
||||
html += ' <button type="button" class="btn-close" data-bs-dismiss="modal"></button>';
|
||||
html += ' </div>';
|
||||
html += ' <div class="modal-body">';
|
||||
html += ' <form id="form-shipping-method">';
|
||||
html += ' <p>{{ text_shipping|escape('js') }}</p>';
|
||||
|
||||
for (i in json['shipping_methods']) {
|
||||
html += '<p><strong>' + json['shipping_methods'][i]['name'] + '</strong></p>';
|
||||
|
||||
if (!json['shipping_methods'][i]['error']) {
|
||||
for (j in json['shipping_methods'][i]['quote']) {
|
||||
html += '<div class="form-check">';
|
||||
|
||||
var code = i + '-' + j.replaceAll('_', '-');
|
||||
|
||||
html += '<input type="radio" name="shipping_method" value="' + json['shipping_methods'][i]['quote'][j]['code'] + '" id="input-shipping-method-' + code + '"';
|
||||
|
||||
if (json['shipping_methods'][i]['quote'][j]['code'] == $('#input-shipping-code').val()) {
|
||||
html += ' checked';
|
||||
}
|
||||
|
||||
html += '/>';
|
||||
html += ' <label for="input-shipping-method-' + code + '">' + json['shipping_methods'][i]['quote'][j]['name'] + ' - ' + json['shipping_methods'][i]['quote'][j]['text'] + '</label>';
|
||||
html += '</div>';
|
||||
}
|
||||
} else {
|
||||
html += '<div class="alert alert-danger">' + json['shipping_methods'][i]['error'] + '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
html += ' <div class="text-end">';
|
||||
html += ' <button type="submit" id="button-shipping-method" class="btn btn-primary">{{ button_continue|escape('js') }}</button>';
|
||||
html += ' </div>';
|
||||
html += ' </form>';
|
||||
html += ' </div>';
|
||||
html += ' </div>';
|
||||
html += ' </div>';
|
||||
html += '</div>';
|
||||
|
||||
$('body').append(html);
|
||||
|
||||
$('#modal-shipping').modal('show');
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$(document).on('submit', '#form-shipping-method', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var element = this;
|
||||
|
||||
chain.attach(function() {
|
||||
return $.ajax({
|
||||
url: 'index.php?route=checkout/shipping_method.save&language={{ language }}',
|
||||
type: 'post',
|
||||
data: $('#form-shipping-method').serialize(),
|
||||
dataType: 'json',
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
beforeSend: function() {
|
||||
$('#button-shipping-method').button('loading');
|
||||
},
|
||||
complete: function() {
|
||||
$('#button-shipping-method').button('reset');
|
||||
},
|
||||
success: function(json) {
|
||||
console.log(json);
|
||||
|
||||
if (json['redirect']) {
|
||||
location = json['redirect'];
|
||||
}
|
||||
|
||||
if (json['error']) {
|
||||
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#modal-shipping').modal('hide');
|
||||
|
||||
$('#input-shipping-method').val($('input[name=\'shipping_method\']:checked').parent().find('label').text());
|
||||
$('#input-shipping-code').val($('input[name=\'shipping_method\']:checked').val());
|
||||
|
||||
$('#input-payment-method').val('');
|
||||
|
||||
$('#checkout-confirm').load('index.php?route=checkout/confirm.confirm&language={{ language }}');
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
//--></script>
|
82
catalog/view/template/checkout/voucher.twig
Normal file
82
catalog/view/template/checkout/voucher.twig
Normal file
@ -0,0 +1,82 @@
|
||||
{{ header }}
|
||||
<div id="account-voucher" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% if error_warning %}
|
||||
<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> {{ error_warning }}</div>
|
||||
{% endif %}
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<p>{{ text_description }}</p>
|
||||
<form id="form-voucher" action="{{ save }}" method="post" data-oc-toggle="ajax">
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-to-name" class="col-sm-2 col-form-label">{{ entry_to_name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="to_name" value="{{ to_name }}" placeholder="{{ entry_to_name }}" id="input-to-name" class="form-control"/>
|
||||
<div id="error-to-name" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-to-email" class="col-sm-2 col-form-label">{{ entry_to_email }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="to_email" value="{{ to_email }}" placeholder="{{ entry_to_email }}" id="input-to-email" class="form-control"/>
|
||||
<div id="error-to-email" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-from-name" class="col-sm-2 col-form-label">{{ entry_from_name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="from_name" value="{{ from_name }}" placeholder="{{ entry_from_name }}" id="input-from-name" class="form-control"/>
|
||||
<div id="error-from-name" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-from-email" class="col-sm-2 col-form-label">{{ entry_from_email }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="from_email" value="{{ from_email }}" placeholder="{{ entry_from_email }}" id="input-from-email" class="form-control"/>
|
||||
<div id="error-from-email" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label class="col-sm-2 col-form-label">{{ entry_theme }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div id="input-theme">
|
||||
{% for voucher_theme in voucher_themes %}
|
||||
<div class="form-check">
|
||||
<input type="radio" name="voucher_theme_id" value="{{ voucher_theme.voucher_theme_id }}" id="input-theme-{{ voucher_theme.voucher_theme_id }}" class="form-check-input"{% if voucher_theme.voucher_theme_id == voucher_theme_id %} checked{% endif %}/> <label for="input-theme-{{ voucher_theme.voucher_theme_id }}" class="form-check-label">{{ voucher_theme.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-theme" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="input-message" class="col-sm-2 col-form-label"><span data-bs-toggle="tooltip" title="{{ help_message }}" class="col-sm-2 col-form-label">{{ entry_message }}</span></label>
|
||||
<div class="col-sm-10">
|
||||
<textarea name="message" cols="40" rows="5" placeholder="{{ entry_message }}" id="input-message" class="form-control">{{ message }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-amount" class="col-sm-2 col-form-label"><span data-bs-toggle="tooltip" title="{{ help_amount }}">{{ entry_amount }}</span></label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="amount" value="{{ amount }}" placeholder="{{ entry_amount }}" id="input-amount" class="form-control" size="5"/>
|
||||
<div id="error-amount" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-end">
|
||||
<div class="form-check form-switch form-switch-lg form-check-reverse form-check-inline">
|
||||
<label class="form-check-label">{{ text_agree }}</label> <input type="hidden" name="agree" value="0"/> <input type="checkbox" name="agree" value="1" class="form-check-input"/>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
37
catalog/view/template/cms/blog_info.twig
Normal file
37
catalog/view/template/cms/blog_info.twig
Normal file
@ -0,0 +1,37 @@
|
||||
{{ header }}
|
||||
<div id="cms-blog" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">
|
||||
{{ column_left }}
|
||||
|
||||
<div id="content" class="col">
|
||||
{{ content_top }}
|
||||
<h2>{{ heading_title }}</h2>
|
||||
|
||||
{% if thumb %}
|
||||
<img src="{{ thumb }}" alt="{{ heading_title }}" title="{{ heading_title }}" class="img-thumbnail"/>
|
||||
{% endif %}
|
||||
|
||||
<div>{{ description }}</div>
|
||||
|
||||
<hr/>
|
||||
<div id="comment">{{ comment }}</div>
|
||||
|
||||
{{ content_bottom }}
|
||||
</div>
|
||||
|
||||
{{ column_right }}
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('#comment').on('click', '.pagination a', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
$('#comment').load(this.href);
|
||||
});
|
||||
//--></script>
|
||||
{{ footer }}
|
62
catalog/view/template/cms/blog_list.twig
Normal file
62
catalog/view/template/cms/blog_list.twig
Normal file
@ -0,0 +1,62 @@
|
||||
{{ header }}
|
||||
<div id="product-category" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">
|
||||
{{ content_top }}
|
||||
|
||||
{% if topics %}
|
||||
<h3>{{ text_refine }}</h3>
|
||||
<div class="input-group dropdown mb-3">
|
||||
<input type="text" name="filter_search" value="{{ filter_search }}" placeholder="{{ text_search }}" id="input-search" class="form-control"/>
|
||||
<select name="topic_id" id="input-topic" class="form-select">
|
||||
{% for topic in topics %}
|
||||
<option value="{{ topic.topic_id }}"{% if topic.topic_id == topic_id %} selected{% endif %}>{{ topic.name }}</option>
|
||||
{% endfor %}
|
||||
</select> <a href="{{ continue }}" class="btn btn-primary">{{ button_search }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if articles %}
|
||||
|
||||
{% for article in articles %}
|
||||
|
||||
<div class="mb-3">
|
||||
|
||||
<h2><a href="{{ article.href }}">{{ article.name }}</a></h2>
|
||||
|
||||
{% if article.image %}
|
||||
<div class="article-image"><a href="{{ article.href }}"><img src="{{ article.image }}" title="{{ article.name }}" alt="{{ article.name }}" class="img-responsive"/></a></div>
|
||||
{% endif %}
|
||||
|
||||
<ul class="list-inline">
|
||||
<li class="list-inline-item">By <a href="{{ article.filter_author }}">{{ article.author }}</a></li>
|
||||
<li class="list-inline-item">{{ article.date_added }}</li>
|
||||
<li class="list-inline-item">{{ article.comment_total }} Comments</li>
|
||||
</ul>
|
||||
|
||||
<div class="mb-3">{{ article.description }}</div>
|
||||
|
||||
<a href="{{ article.href }}" class="btn btn-primary">{{ button_continue }}</a>
|
||||
|
||||
</div>
|
||||
|
||||
{% endfor %}
|
||||
<div class="row">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
{% endif %}
|
||||
|
||||
{{ content_bottom }}
|
||||
</div>
|
||||
{{ column_right }}
|
||||
</div>
|
||||
</div>
|
||||
{{ footer }}
|
82
catalog/view/template/cms/comment.twig
Normal file
82
catalog/view/template/cms/comment.twig
Normal file
@ -0,0 +1,82 @@
|
||||
<form id="form-comment">
|
||||
<div id="comment">{{ list }}</div>
|
||||
<h2>{{ text_write }}</h2>
|
||||
{% if review_guest %}
|
||||
<div class="mb-3 required">
|
||||
<label for="input-author" class="form-label">{{ entry_author }}</label>
|
||||
<input type="text" name="author" value="{{ author }}" id="input-author" class="form-control"/>
|
||||
<div id="error-author" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="mb-3 required">
|
||||
<label for="input-comment" class="form-label">{{ entry_comment }}</label>
|
||||
<textarea name="text" rows="5" id="input-comment" class="form-control"></textarea>
|
||||
<div id="error-comment" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{{ captcha }}
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href="{{ back }}" class="btn btn-light">{{ button_back }}</a>
|
||||
</div>
|
||||
<div class="col text-end">
|
||||
<button type="submit" id="button-comment" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
{{ text_login }}
|
||||
{% endif %}
|
||||
</form>
|
||||
<script type="text/javascript"><!--
|
||||
$('#comment').on('click', '.pagination a', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
$('#comment').load(this.href);
|
||||
});
|
||||
|
||||
// Forms
|
||||
$('#form-comment').on('submit', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var element = this;
|
||||
|
||||
$.ajax({
|
||||
url: 'index.php?route=cms/comment.addComment&language={{ language }}&comment_token={{ comment_token }}&article_id={{ article_id }}',
|
||||
type: 'post',
|
||||
data: $('#form-comment').serialize(),
|
||||
dataType: 'json',
|
||||
cache: false,
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
processData: false,
|
||||
beforeSend: function() {
|
||||
$('#button-comment').button('loading');
|
||||
},
|
||||
complete: function() {
|
||||
$('#button-comment').button('reset');
|
||||
},
|
||||
success: function(json) {
|
||||
$('.alert-dismissible').remove();
|
||||
$('#form-comment').find('.is-invalid').removeClass('is-invalid');
|
||||
$('#form-comment').find('.invalid-feedback').removeClass('d-block');
|
||||
|
||||
if (json['error']) {
|
||||
if (json['error']['warning']) {
|
||||
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error']['warning'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
}
|
||||
|
||||
for (key in json['error']) {
|
||||
$('#input-' + key.replaceAll('_', '-')).addClass('is-invalid').find('.form-control, .form-select, .form-check-input, .form-check-label').addClass('is-invalid');
|
||||
$('#error-' + key.replaceAll('_', '-')).html(json['error'][key]).addClass('d-block');
|
||||
}
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#input-comment').val('');
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
//--></script>
|
69
catalog/view/template/cms/comment_list.twig
Normal file
69
catalog/view/template/cms/comment_list.twig
Normal file
@ -0,0 +1,69 @@
|
||||
{% if comments %}
|
||||
{% for comment in comments %}
|
||||
<div id="comment{{ comment.blog_comment_id }}" class="media">
|
||||
<div class="media-left"><img src="{{ comment.image }}" alt="{{ comment.member }}" title="{{ comment.member }}" class="media-object"/></div>
|
||||
<div class="media-body">
|
||||
|
||||
|
||||
{% if comment.remove %}
|
||||
<div class="pull-right"><a href="{{ comment.remove }}" class="btn btn-link btn-xs comment-remove">Remove</a></div>
|
||||
{% endif %}
|
||||
|
||||
<p class="media-heading">{{ comment.member }} <span>{{ comment.date_added }}</span></p>
|
||||
<p>{{ comment.comment }}</p>
|
||||
<div class="reply">
|
||||
<div class="reply-box">
|
||||
<div>
|
||||
{% if comment.reply %}
|
||||
|
||||
{% for reply in comment.reply %}
|
||||
<div class="media">
|
||||
<div class="media-left"><img src="{{ reply.image }}" alt="{{ reply.member }}" title="{{ reply.member }}" class="media-object"/></div>
|
||||
<div class="media-body">{% if reply.remove %}
|
||||
<div class="pull-right"><a href="{{ reply.remove }}" class="btn btn-link btn-xs reply-remove">Remove</a></div>
|
||||
{% endif %}
|
||||
<p class="media-heading">{{ reply.member }} <span>{{ reply.date_added }}</span></p>
|
||||
<p>{{ reply.comment }}</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
{% if comment.next %}
|
||||
<div class="text-center"><a href="{{ comment.next }}" class="btn btn-block">see more replies...</a></div>
|
||||
{% endif %}
|
||||
|
||||
{% endif %} <a href="{{ comment.refresh }}" class="reply-refresh hide">refresh</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if logged %}
|
||||
<p class="text-right">
|
||||
<button type="button" data-toggle="tooltip" data-title="Reply" class="btn btn-link btn-sm">Reply</button>
|
||||
{% else %}
|
||||
<button type="button" class="btn btn-link btn-xs" disabled="disabled">Reply</button>
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
<div class="reply-input-box" style="display: none;">
|
||||
<div class="media">
|
||||
<div class="media-left"><img src="{{ comment_image }}" alt="{{ comment_username }}" title="{{ comment_username }}" class="media-object"/></div>
|
||||
<div class="media-body">
|
||||
<div class="form-group">
|
||||
<label for="input-comment{{ comment.blog_comment_id }}">Leave your comment</label>
|
||||
<textarea name="comment" placeholder="Write your comment here..." id="input-comment{{ comment.blog_comment_id }}" class="form-control"></textarea>
|
||||
</div>
|
||||
<div class="text-right"><a href="{{ comment.add }}" class="btn btn-primary btn-sm">Comment</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<br/>
|
||||
<div class="text-center">{{ pagination }}</div>
|
||||
{% else %}
|
||||
<div class="text-center">{{ text_no_results }}</div>
|
||||
{% endif %}
|
71
catalog/view/template/common/cart.twig
Normal file
71
catalog/view/template/common/cart.twig
Normal file
@ -0,0 +1,71 @@
|
||||
<div class="dropdown d-grid">
|
||||
<button type="button" data-bs-toggle="dropdown" class="btn btn-lg btn-inverse btn-block dropdown-toggle"><i class="fa-solid fa-cart-shopping"></i> {{ text_items }}</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end p-2">
|
||||
{% if products or vouchers %}
|
||||
<li>
|
||||
<table class="table table-striped mb-2">
|
||||
{% for product in products %}
|
||||
<tr>
|
||||
<td class="text-center">{% if product.thumb %}<a href="{{ product.href }}"><img src="{{ product.thumb }}" alt="{{ product.name }}" title="{{ product.name }}" class="img-thumbnail"/></a>{% endif %}</td>
|
||||
<td class="text-start"><a href="{{ product.href }}">{{ product.name }}</a>
|
||||
{% if product.option %}
|
||||
{% for option in product.option %}
|
||||
<br/>
|
||||
<small> - {{ option.name }}: {{ option.value }}</small>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if product.reward %}
|
||||
<br/>
|
||||
<small> - {{ text_points }}: {{ product.reward }}</small>
|
||||
{% endif %}
|
||||
{% if product.subscription %}
|
||||
<br/>
|
||||
<small> - {{ text_subscription }}: {{ product.subscription }}</small>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-end">x {{ product.quantity }}</td>
|
||||
<td class="text-end">{{ product.total }}</td>
|
||||
<td class="text-end">
|
||||
|
||||
<form action="{{ product_remove }}" method="post" data-oc-toggle="ajax" data-oc-load="{{ list }}" data-oc-target="#header-cart">
|
||||
<input type="hidden" name="key" value="{{ product.cart_id }}">
|
||||
<button type="submit" data-bs-toggle="tooltip" title="{{ button_remove }}" class="btn btn-danger"><i class="fa-solid fa-circle-xmark"></i></button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
{% for voucher in vouchers %}
|
||||
<tr>
|
||||
<td class="text-center"></td>
|
||||
<td class="text-start">{{ voucher.description }}</td>
|
||||
<td class="text-end">x 1</td>
|
||||
<td class="text-end">{{ voucher.amount }}</td>
|
||||
<td class="text-end">
|
||||
<form action="{{ voucher_remove }}" method="post" data-oc-toggle="ajax" data-oc-load="{{ list }}" data-oc-target="#header-cart">
|
||||
<input type="hidden" name="key" value="{{ voucher.key }}"/>
|
||||
<button type="submit" data-bs-toggle="tooltip" title="{{ button_remove }}" class="btn btn-danger"><i class="fa-solid fa-circle-xmark"></i></button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
</table>
|
||||
|
||||
<div>
|
||||
<table class="table table-sm table-bordered mb-2">
|
||||
{% for total in totals %}
|
||||
<tr>
|
||||
<td class="text-end"><strong>{{ total.title }}</strong></td>
|
||||
<td class="text-end">{{ total.text }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
<p class="text-end"><a href="{{ cart }}"><strong><i class="fa-solid fa-cart-shopping"></i> {{ text_cart }}</strong></a> <a href="{{ checkout }}"><strong><i class="fa-solid fa-share"></i> {{ text_checkout }}</strong></a></p>
|
||||
</div>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="text-center p-4">{{ text_no_results }}</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
7
catalog/view/template/common/column_left.twig
Normal file
7
catalog/view/template/common/column_left.twig
Normal file
@ -0,0 +1,7 @@
|
||||
{% if modules %}
|
||||
<aside id="column-left" class="col-3 d-none d-md-block">
|
||||
{% for module in modules %}
|
||||
{{ module }}
|
||||
{% endfor %}
|
||||
</aside>
|
||||
{% endif %}
|
7
catalog/view/template/common/column_right.twig
Normal file
7
catalog/view/template/common/column_right.twig
Normal file
@ -0,0 +1,7 @@
|
||||
{% if modules %}
|
||||
<aside id="column-right" class="col-3 d-none d-md-block">
|
||||
{% for module in modules %}
|
||||
{{ module }}
|
||||
{% endfor %}
|
||||
</aside>
|
||||
{% endif %}
|
3
catalog/view/template/common/content_bottom.twig
Normal file
3
catalog/view/template/common/content_bottom.twig
Normal file
@ -0,0 +1,3 @@
|
||||
{% for module in modules %}
|
||||
{{ module }}
|
||||
{% endfor %}
|
3
catalog/view/template/common/content_top.twig
Normal file
3
catalog/view/template/common/content_top.twig
Normal file
@ -0,0 +1,3 @@
|
||||
{% for module in modules %}
|
||||
{{ module }}
|
||||
{% endfor %}
|
9
catalog/view/template/common/cookie.twig
Normal file
9
catalog/view/template/common/cookie.twig
Normal file
@ -0,0 +1,9 @@
|
||||
<div id="cookie">
|
||||
<div class="container">
|
||||
<div class="row mt-2">
|
||||
<div class="col-12 p-2 text-center"><p>{{ text_cookie }}</p>
|
||||
<button type="button" value="{{ agree }}" class="btn bg-primary btn-block text-white">{{ button_agree }}</button> <button type="button" value="{{ disagree }}" class="btn btn-light btn-block">{{ button_disagree }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
17
catalog/view/template/common/currency.twig
Normal file
17
catalog/view/template/common/currency.twig
Normal file
@ -0,0 +1,17 @@
|
||||
{% if currencies|length > 1 %}
|
||||
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-currency">
|
||||
<div class="dropdown">
|
||||
<a href="#" data-bs-toggle="dropdown" class="dropdown-toggle">{% for currency in currencies %}{% if currency.symbol_left and currency.code == code %}<strong>{{ currency.symbol_left }}</strong>{% elseif currency.symbol_right and currency.code == code %}<strong>{{ currency.symbol_right }}</strong>{% endif %}{% endfor %} <span class="d-none d-md-inline">{{ text_currency }}</span> <i class="fa-solid fa-caret-down"></i></a>
|
||||
<ul class="dropdown-menu">
|
||||
{% for currency in currencies %}
|
||||
{% if currency.symbol_left %}
|
||||
<li><a href="{{ currency.code }}" class="dropdown-item">{{ currency.symbol_left }} {{ currency.title }}</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{ currency.code }}" class="dropdown-item">{{ currency.symbol_right }} {{ currency.title }}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
<input type="hidden" name="code" value=""/> <input type="hidden" name="redirect" value="{{ redirect }}"/>
|
||||
</form>
|
||||
{% endif %}
|
58
catalog/view/template/common/footer.twig
Normal file
58
catalog/view/template/common/footer.twig
Normal file
@ -0,0 +1,58 @@
|
||||
</main>
|
||||
<footer>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-3">
|
||||
<h5>{{ text_information }}</h5>
|
||||
<ul class="list-unstyled">
|
||||
{% for information in informations %}
|
||||
<li><a href="{{ information.href }}">{{ information.title }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<h5>{{ text_service }}</h5>
|
||||
<ul class="list-unstyled">
|
||||
<li><a href="{{ contact }}">{{ text_contact }}</a></li>
|
||||
<li><a href="{{ return }}">{{ text_return }}</a></li>
|
||||
{% if gdpr %}
|
||||
<li><a href="{{ gdpr }}">{{ text_gdpr }}</a></li>
|
||||
{% endif %}
|
||||
<li><a href="{{ sitemap }}">{{ text_sitemap }}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<h5>{{ text_extra }}</h5>
|
||||
<ul class="list-unstyled">
|
||||
<li><a href="{{ manufacturer }}">{{ text_manufacturer }}</a></li>
|
||||
<li><a href="{{ voucher }}">{{ text_voucher }}</a></li>
|
||||
{% if affiliate %}
|
||||
<li><a href="{{ affiliate }}">{{ text_affiliate }}</a></li>
|
||||
{% endif %}
|
||||
<li><a href="{{ special }}">{{ text_special }}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<h5>{{ text_account }}</h5>
|
||||
<ul class="list-unstyled">
|
||||
<li><a href="{{ account }}">{{ text_account }}</a></li>
|
||||
<li><a href="{{ order }}">{{ text_order }}</a></li>
|
||||
<li><a href="{{ wishlist }}">{{ text_wishlist }}</a></li>
|
||||
<li><a href="{{ newsletter }}">{{ text_newsletter }}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<p>{{ powered }}</p>
|
||||
<!--
|
||||
OpenCart is open source software and you are free to remove the powered by OpenCart if you want, but its generally accepted practise to make a small donation.
|
||||
Please donate via PayPal to donate@opencart.com
|
||||
//-->
|
||||
</div>
|
||||
</footer>
|
||||
{{ cookie }}
|
||||
<script src="{{ bootstrap }}" type="text/javascript"></script>
|
||||
{% for script in scripts %}
|
||||
<script src="{{ script.href }}" type="text/javascript"></script>
|
||||
{% endfor %}
|
||||
</body></html>
|
92
catalog/view/template/common/header.twig
Normal file
92
catalog/view/template/common/header.twig
Normal file
@ -0,0 +1,92 @@
|
||||
<!DOCTYPE html>
|
||||
<html dir="{{ direction }}" lang="{{ lang }}">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>{{ title }}</title>
|
||||
<base href="{{ base }}"/>
|
||||
{% if description %}
|
||||
<meta name="description" content="{{ description }}"/>
|
||||
{% endif %}
|
||||
{% if keywords %}
|
||||
<meta name="keywords" content="{{ keywords }}"/>
|
||||
{% endif %}
|
||||
<script src="{{ jquery }}" type="text/javascript"></script>
|
||||
<link href="{{ bootstrap }}" type="text/css" rel="stylesheet" media="screen"/>
|
||||
<link href="{{ icons }}" type="text/css" rel="stylesheet"/>
|
||||
<link href="{{ stylesheet }}" type="text/css" rel="stylesheet"/>
|
||||
<script type="text/javascript" src="catalog/view/javascript/jquery/datetimepicker/moment.min.js"></script>
|
||||
<script type="text/javascript" src="catalog/view/javascript/jquery/datetimepicker/moment-with-locales.min.js"></script>
|
||||
<script type="text/javascript" src="catalog/view/javascript/jquery/datetimepicker/daterangepicker.js"></script>
|
||||
<link href="catalog/view/javascript/jquery/datetimepicker/daterangepicker.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="catalog/view/javascript/common.js" type="text/javascript"></script>
|
||||
{% for style in styles %}
|
||||
<link href="{{ style.href }}" type="text/css" rel="{{ style.rel }}" media="{{ style.media }}"/>
|
||||
{% endfor %}
|
||||
{% for script in scripts %}
|
||||
<script src="{{ script.href }}" type="text/javascript"></script>
|
||||
{% endfor %}
|
||||
{% for link in links %}
|
||||
<link href="{{ link.href }}" rel="{{ link.rel }}"/>
|
||||
{% endfor %}
|
||||
{% for analytic in analytics %}
|
||||
{{ analytic }}
|
||||
{% endfor %}
|
||||
</head>
|
||||
<body>
|
||||
<div id="alert" class="toast-container position-fixed top-0 end-0 p-3"></div>
|
||||
<nav id="top">
|
||||
<div class="container">
|
||||
<div class="nav float-start">
|
||||
<ul class="list-inline">
|
||||
<li class="list-inline-item">{{ currency }}</li>
|
||||
<li class="list-inline-item">{{ language }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="nav float-end">
|
||||
<ul class="list-inline">
|
||||
<li class="list-inline-item"><a href="{{ contact }}"><i class="fa-solid fa-phone"></i></a> <span class="d-none d-md-inline">{{ telephone }}</span></li>
|
||||
<li class="list-inline-item">
|
||||
<div class="dropdown">
|
||||
<a href="{{ account }}" class="dropdown-toggle" data-bs-toggle="dropdown"><i class="fa-solid fa-user"></i> <span class="d-none d-md-inline">{{ text_account }}</span> <i class="fa-solid fa-caret-down"></i></a>
|
||||
<ul class="dropdown-menu dropdown-menu-right">
|
||||
{% if not logged %}
|
||||
<li><a href="{{ register }}" class="dropdown-item">{{ text_register }}</a></li>
|
||||
<li><a href="{{ login }}" class="dropdown-item">{{ text_login }}</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{ account }}" class="dropdown-item">{{ text_account }}</a></li>
|
||||
<li><a href="{{ order }}" class="dropdown-item">{{ text_order }}</a></li>
|
||||
<li><a href="{{ transaction }}" class="dropdown-item">{{ text_transaction }}</a></li>
|
||||
<li><a href="{{ download }}" class="dropdown-item">{{ text_download }}</a></li>
|
||||
<li><a href="{{ logout }}" class="dropdown-item">{{ text_logout }}</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li class="list-inline-item"><a href="{{ wishlist }}" id="wishlist-total" title="{{ text_wishlist }}"><i class="fa-solid fa-heart"></i> <span class="d-none d-md-inline">{{ text_wishlist }}</span></a></li>
|
||||
<li class="list-inline-item"><a href="{{ shopping_cart }}" title="{{ text_shopping_cart }}"><i class="fa-solid fa-cart-shopping"></i> <span class="d-none d-md-inline">{{ text_shopping_cart }}</span></a></li>
|
||||
<li class="list-inline-item"><a href="{{ checkout }}" title="{{ text_checkout }}"><i class="fa-solid fa-share"></i> <span class="d-none d-md-inline">{{ text_checkout }}</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<header>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-3 col-lg-4">
|
||||
<div id="logo">
|
||||
{% if logo %}
|
||||
<a href="{{ home }}"><img src="{{ logo }}" title="{{ name }}" alt="{{ name }}" class="img-fluid"/></a>
|
||||
{% else %}
|
||||
<h1><a href="{{ home }}">{{ name }}</a></h1>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-5">{{ search }}</div>
|
||||
<div id="header-cart" class="col-md-4 col-lg-3 mb-2">{{ cart }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<main>
|
||||
{{ menu }}
|
7
catalog/view/template/common/home.twig
Normal file
7
catalog/view/template/common/home.twig
Normal file
@ -0,0 +1,7 @@
|
||||
{{ header }}
|
||||
<div id="common-home" class="container">
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
17
catalog/view/template/common/language.twig
Normal file
17
catalog/view/template/common/language.twig
Normal file
@ -0,0 +1,17 @@
|
||||
{% if languages|length > 1 %}
|
||||
<div class="dropdown">
|
||||
<div class="dropdown-toggle" data-bs-toggle="dropdown">
|
||||
{% for language in languages %}
|
||||
{% if language.code == code %}
|
||||
<img src="{{ language.image }}" alt="{{ language.name }}" title="{{ language.name }}">
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<span class="d-none d-md-inline">{{ text_language }}</span> <i class="fa-solid fa-caret-down"></i>
|
||||
</div>
|
||||
<ul class="dropdown-menu">
|
||||
{% for language in languages %}
|
||||
<li><a href="{{ language.href }}" class="dropdown-item"><img src="{{ language.image }}" alt="{{ language.name }}" title="{{ language.name }}"/> {{ language.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
7
catalog/view/template/common/maintenance.twig
Normal file
7
catalog/view/template/common/maintenance.twig
Normal file
@ -0,0 +1,7 @@
|
||||
{{ header }}
|
||||
<div id="common-maintenance" class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">{{ message }}</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ footer }}
|
32
catalog/view/template/common/menu.twig
Normal file
32
catalog/view/template/common/menu.twig
Normal file
@ -0,0 +1,32 @@
|
||||
{% if categories %}
|
||||
<div class="container">
|
||||
<nav id="menu" class="navbar navbar-expand-lg navbar-light bg-primary">
|
||||
<div id="category" class="d-block d-sm-block d-lg-none">{{ text_category }}</div>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#narbar-menu"><i class="fa-solid fa-bars"></i></button>
|
||||
<div class="collapse navbar-collapse" id="narbar-menu">
|
||||
<ul class="nav navbar-nav">
|
||||
{% for category in categories %}
|
||||
{% if category.children %}
|
||||
<li class="nav-item dropdown"><a href="{{ category.href }}" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">{{ category.name }}</a>
|
||||
<div class="dropdown-menu">
|
||||
<div class="dropdown-inner">
|
||||
{% for children in category.children|batch(category.children|length / category.column|round(1, 'ceil')) %}
|
||||
<ul class="list-unstyled">
|
||||
{% for child in children %}
|
||||
<li><a href="{{ child.href }}" class="nav-link">{{ child.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<a href="{{ category.href }}" class="see-all">{{ text_all }} {{ category.name }}</a>
|
||||
</div>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="nav-item"><a href="{{ category.href }}" class="nav-link">{{ category.name }}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
{% endif %}
|
21
catalog/view/template/common/pagination.twig
Normal file
21
catalog/view/template/common/pagination.twig
Normal file
@ -0,0 +1,21 @@
|
||||
<ul class="pagination">
|
||||
{% if first %}
|
||||
<li class="page-item"><a href="{{ first }}" class="page-link">|<</a></li>
|
||||
{% endif %}
|
||||
{% if prev %}
|
||||
<li class="page-item"><a href="{{ prev }}" class="page-link"><</a></li>
|
||||
{% endif %}
|
||||
{% for link in links %}
|
||||
{% if link.page == page %}
|
||||
<li class="page-item active"><span class="page-link">{{ link.page }}</span></li>
|
||||
{% else %}
|
||||
<li class="page-item"><a href="{{ link.href }}" class="page-link">{{ link.page }}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if next %}
|
||||
<li class="page-item"><a href="{{ next }}" class="page-link">></a></li>
|
||||
{% endif %}
|
||||
{% if last %}
|
||||
<li class="page-item"><a href="{{ last }}" class="page-link">>|</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
4
catalog/view/template/common/search.twig
Normal file
4
catalog/view/template/common/search.twig
Normal file
@ -0,0 +1,4 @@
|
||||
<div id="search" class="input-group mb-3">
|
||||
<input type="text" name="search" value="{{ search }}" placeholder="{{ text_search }}" class="form-control form-control-lg">
|
||||
<button type="button" data-lang="{{ language }}" class="btn btn-light btn-lg"><i class="fa-solid fa-magnifying-glass"></i></button>
|
||||
</div>
|
16
catalog/view/template/common/success.twig
Normal file
16
catalog/view/template/common/success.twig
Normal file
@ -0,0 +1,16 @@
|
||||
{{ header }}
|
||||
<div id="common-success" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
{{ text_message }}
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
16
catalog/view/template/error/not_found.twig
Normal file
16
catalog/view/template/error/not_found.twig
Normal file
@ -0,0 +1,16 @@
|
||||
{{ header }}
|
||||
<div id="error-not-found" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<p>{{ text_error }}</p>
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
133
catalog/view/template/information/contact.twig
Normal file
133
catalog/view/template/information/contact.twig
Normal file
@ -0,0 +1,133 @@
|
||||
{{ header }}
|
||||
<div id="information-contact" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<h3>{{ text_location }}</h3>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
{% if image %}
|
||||
<div class="col-sm-3"><img src="{{ image }}" alt="{{ store }}" title="{{ store }}" class="img-thumbnail"/></div>
|
||||
{% endif %}
|
||||
<div class="col-sm-3"><strong>{{ store }}</strong>
|
||||
<br/>
|
||||
<address>
|
||||
{{ address }}
|
||||
</address>
|
||||
{% if geocode %}
|
||||
<a href="https://maps.google.com/maps?q={{ geocode|url_encode }}&hl={{ geocode_hl }}&t=m&z=15" target="_blank" class="btn btn-info"><i class="fa-solid fa-location-dot"></i> {{ button_map }}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-sm-3"><strong>{{ text_telephone }}</strong>
|
||||
<br/>
|
||||
{{ telephone }}
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
{% if open %}
|
||||
<strong>{{ text_open }}</strong>
|
||||
<br/>
|
||||
{{ open }}
|
||||
<br/>
|
||||
<br/>
|
||||
{% endif %}
|
||||
{% if comment %}
|
||||
<strong>{{ text_comment }}</strong>
|
||||
<br/>
|
||||
{{ comment }}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% if locations %}
|
||||
<h3>{{ text_store }}</h3>
|
||||
<div id="accordion" class="card-group">
|
||||
{% for location in locations %}
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4 class="card-title pt-2"><a href="#collapse-location-{{ location.location_id }}" class="accordion-toggle" data-bs-toggle="collapse" data-bs-parent="#accordion">{{ location.name }} <i class="fa-solid fa-caret-down"></i></a></h4>
|
||||
</div>
|
||||
<div class="card-collapse collapse" id="collapse-location-{{ location.location_id }}">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
{% if location.image %}
|
||||
<div class="col-sm-3"><img src="{{ location.image }}" alt="{{ location.name }}" title="{{ location.name }}" class="img-thumbnail"/></div>
|
||||
{% endif %}
|
||||
<div class="col-sm-3"><strong>{{ location.name }}</strong>
|
||||
<br/>
|
||||
<address>
|
||||
{{ location.address }}
|
||||
</address>
|
||||
{% if location.geocode %}
|
||||
<a href="https://maps.google.com/maps?q={{ location.geocode|url_encode }}&hl={{ geocode_hl }}&t=m&z=15" target="_blank" class="btn btn-info"><i class="fa-solid fa-location-dot"></i> {{ button_map }}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-sm-3"><strong>{{ text_telephone }}</strong>
|
||||
<br/>
|
||||
{{ location.telephone }}
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
{% if location.open %}
|
||||
<strong>{{ text_open }}</strong>
|
||||
<br/>
|
||||
{{ location.open }}
|
||||
<br/>
|
||||
<br/>
|
||||
{% endif %}
|
||||
{% if location.comment %}
|
||||
<strong>{{ text_comment }}</strong>
|
||||
<br/>
|
||||
{{ location.comment }}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<form id="form-contact" action="{{ send }}" method="post" data-oc-toggle="ajax">
|
||||
<fieldset>
|
||||
<legend>{{ text_contact }}</legend>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-name" class="col-sm-2 col-form-label">{{ entry_name }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="name" value="{{ name }}" id="input-name" class="form-control"/>
|
||||
<div id="error-name" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-email" class="col-sm-2 col-form-label">{{ entry_email }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="email" value="{{ email }}" id="input-email" class="form-control"/>
|
||||
<div id="error-email" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label for="input-enquiry" class="col-sm-2 col-form-label">{{ entry_enquiry }}</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea name="enquiry" rows="10" id="input-enquiry" class="form-control"></textarea>
|
||||
<div id="error-enquiry" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</div>
|
||||
{{ captcha }}
|
||||
</fieldset>
|
||||
<div class="text-end">
|
||||
<button type="submit" class="btn btn-primary">{{ button_submit }}</button>
|
||||
</div>
|
||||
</form>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
69
catalog/view/template/information/gdpr.twig
Normal file
69
catalog/view/template/information/gdpr.twig
Normal file
@ -0,0 +1,69 @@
|
||||
{{ header }}
|
||||
<div id="account-gdpr" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% if success %}
|
||||
<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> {{ success }} <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>
|
||||
{% endif %}
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<p>{{ text_gdpr|format(store, gdpr, title) }}</p>
|
||||
<form action="{{ action }}" method="post" data-oc-toggle="ajax">
|
||||
<fieldset>
|
||||
<legend id="account">{{ text_verification }}</legend>
|
||||
<div class="mb-3">
|
||||
<p><label for="input-email" class="form-check-label">{{ text_email }}</label></p>
|
||||
<div class="input-group">
|
||||
<input type="text" name="email" value="{{ email }}" placeholder="{{ entry_email }}" id="input-email" class="form-control"/>
|
||||
<div class="input-group-text"><i class="fa-solid fa-envelope"></i></div>
|
||||
</div>
|
||||
<div id="error-email" class="invalid-feedback"></div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend id="action">{{ text_action }}</legend>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class="form-check">
|
||||
<input type="radio" name="action" value="export" id="input-export" checked class="form-check-input"/> <label for="input-export" class="form-check-label"><strong>{{ text_export }}</strong></label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input type="radio" name="action" value="remove" id="input-remove" class="form-check-input"/> <label for="input-remove" class="form-check-label"><strong>{{ text_remove }}</strong></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="collapse-remove" class="alert alert-warning collapse">
|
||||
<p><i class="fa-solid fa-triangle-exclamation"></i> {{ text_warning }}</p>
|
||||
<ul>
|
||||
<li>{{ text_access|format(store) }}</li>
|
||||
<li>{{ text_history }}</li>
|
||||
<li>{{ text_limit|format(limit) }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href="{{ cancel }}" class="btn btn-light">{{ button_cancel }}</a>
|
||||
</div>
|
||||
<div class="col text-end">
|
||||
<button type="submit" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('input[name=\'action\']').on('change', function () {
|
||||
if (this.value == 'remove') {
|
||||
$('#collapse-remove').slideDown();
|
||||
} else {
|
||||
$('#collapse-remove').slideUp();
|
||||
}
|
||||
});
|
||||
//--></script>
|
||||
{{ footer }}
|
14
catalog/view/template/information/information.twig
Normal file
14
catalog/view/template/information/information.twig
Normal file
@ -0,0 +1,14 @@
|
||||
{{ header }}
|
||||
<div id="information-information" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
{{ description }}{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
11
catalog/view/template/information/information_info.twig
Normal file
11
catalog/view/template/information/information_info.twig
Normal file
@ -0,0 +1,11 @@
|
||||
<div id="modal-information" class="modal fade">
|
||||
<div class="modal-dialog modal-lg modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">{{ title }}</h4>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||
</div>
|
||||
<div class="modal-body">{{ description }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
64
catalog/view/template/information/sitemap.twig
Normal file
64
catalog/view/template/information/sitemap.twig
Normal file
@ -0,0 +1,64 @@
|
||||
{{ header }}
|
||||
<div id="information-sitemap" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<ul>
|
||||
{% for category_1 in categories %}
|
||||
<li><a href="{{ category_1.href }}">{{ category_1.name }}</a>
|
||||
{% if category_1.children %}
|
||||
<ul>
|
||||
{% for category_2 in category_1.children %}
|
||||
<li><a href="{{ category_2.href }}">{{ category_2.name }}</a>
|
||||
{% if category_2.children %}
|
||||
<ul>
|
||||
{% for category_3 in category_2.children %}
|
||||
<li><a href="{{ category_3.href }}">{{ category_3.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ul>
|
||||
<li><a href="{{ special }}">{{ text_special }}</a></li>
|
||||
<li><a href="{{ account }}">{{ text_account }}</a>
|
||||
<ul>
|
||||
<li><a href="{{ edit }}">{{ text_edit }}</a></li>
|
||||
<li><a href="{{ password }}">{{ text_password }}</a></li>
|
||||
<li><a href="{{ address }}">{{ text_address }}</a></li>
|
||||
<li><a href="{{ history }}">{{ text_history }}</a></li>
|
||||
<li><a href="{{ download }}">{{ text_download }}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="{{ history }}">{{ text_cart }}</a></li>
|
||||
<li><a href="{{ checkout }}">{{ text_checkout }}</a></li>
|
||||
<li><a href="{{ search }}">{{ text_search }}</a></li>
|
||||
<li>{{ text_information }}
|
||||
<ul>
|
||||
{% for information in informations %}
|
||||
<li><a href="{{ information.href }}">{{ information.title }}</a></li>
|
||||
{% endfor %}
|
||||
<li><a href="{{ contact }}">{{ text_contact }}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
20
catalog/view/template/mail/affiliate.twig
Normal file
20
catalog/view/template/mail/affiliate.twig
Normal file
@ -0,0 +1,20 @@
|
||||
{{ text_welcome }}<br/>
|
||||
<br/>
|
||||
{% if not approval %}
|
||||
{{ text_login }}<br/>
|
||||
<br/>
|
||||
{{ login }}<br/>
|
||||
<br/>
|
||||
{{ text_service }}<br/>
|
||||
<br/>
|
||||
{{ text_thanks }}<br/>
|
||||
{{ store }}
|
||||
{% else %}
|
||||
{{ text_approval }}<br/>
|
||||
<br/>
|
||||
{{ login }}<br/>
|
||||
<br/>
|
||||
{{ text_thanks }}<br/>
|
||||
{{ store }}<br/>
|
||||
{{ store_url }}
|
||||
{% endif %}
|
18
catalog/view/template/mail/affiliate_alert.twig
Normal file
18
catalog/view/template/mail/affiliate_alert.twig
Normal file
@ -0,0 +1,18 @@
|
||||
{{ text_signup }}<br/>
|
||||
<br/>
|
||||
{% if company %}
|
||||
{{ text_company }} {{ company }}<br/>
|
||||
{% endif %}
|
||||
{% if website %}
|
||||
{{ text_website }} {{ website }}<br/>
|
||||
{% endif %}
|
||||
{{ text_firstname }} {{ firstname }}<br/>
|
||||
{{ text_lastname }} {{ lastname }}<br/>
|
||||
{% if customer_group %}
|
||||
{{ text_customer_group }} {{ customer_group }}<br/>
|
||||
{% endif %}
|
||||
{{ text_email }} {{ email }}<br/>
|
||||
{{ text_telephone }} {{ telephone }}<br/>
|
||||
<br/>
|
||||
{{ store }}<br/>
|
||||
{{ store_url }}
|
12
catalog/view/template/mail/forgotten.twig
Normal file
12
catalog/view/template/mail/forgotten.twig
Normal file
@ -0,0 +1,12 @@
|
||||
{{ text_greeting }}<br/>
|
||||
<br/>
|
||||
{{ text_change }}<br/>
|
||||
<br/>
|
||||
{{ reset }}<br/>
|
||||
<br/>
|
||||
{{ text_ip }}<br/>
|
||||
<br/>
|
||||
{{ ip }}<br/>
|
||||
<br/>
|
||||
{{ store }}<br/>
|
||||
{{ store_url }}
|
32
catalog/view/template/mail/gdpr.twig
Normal file
32
catalog/view/template/mail/gdpr.twig
Normal file
@ -0,0 +1,32 @@
|
||||
<div style="width: 570px; border: 1px solid #e1e1e1; margin-left: auto; margin-right: auto; border-radius: 4px; padding-top: 5px; padding-bottom: 15px; padding-left: 25px; padding-right: 25px;">
|
||||
<table style="width: 100%; font-size: 16px; border: 0;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="text-align: center; border-bottom: 1px solid #ddd; padding-top: 15px; padding-bottom: 15px;">
|
||||
{% if logo %}
|
||||
<a href="{{ store_url }}"><img src="{{ logo }}" alt="{{ store_name }}" title="{{ store_name }}" style="margin-left: auto; margin-right: auto;"/></a>
|
||||
{% else %}
|
||||
<a href="{{ store_url }}">{{ store_name }}</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: center; border-bottom: 1px solid #ddd;"><h1>{{ text_request }}</h1></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="line-height: 25px;">
|
||||
<p style="margin-bottom: 40px;">{{ text_gdpr }}</p>
|
||||
<p style="margin-bottom: 40px; text-align: center;"><a href="{{ confirm }}" style="border-radius: 4px; color: #fff; text-decoration: none; background-color: #01b3e8; padding-left: 18px; padding-right: 18px; padding-top: 10px; padding-bottom: 10px; font-size: 18px; font-weight: bold;">{{ button_confirm }}</a></p>
|
||||
<p style="margin-bottom: 40px;">{{ text_ignore }}</p>
|
||||
<p>
|
||||
{{ text_thanks }}
|
||||
<br/>
|
||||
<strong>{{ store_name }}</strong>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
36
catalog/view/template/mail/gdpr_delete.twig
Normal file
36
catalog/view/template/mail/gdpr_delete.twig
Normal file
@ -0,0 +1,36 @@
|
||||
<div style="width:570px; border: 1px solid #e1e1e1; margin-left: auto; margin-right: auto; border-radius: 4px; padding-top: 5px; padding-bottom: 15px; padding-left: 25px; padding-right: 25px;">
|
||||
<table style="width:100%; font-size:16px; border:0;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="text-align: center; border-bottom: 1px solid #ddd; padding-top: 15px; padding-bottom: 15px;">
|
||||
{% if logo %}
|
||||
<a href="{{ store_url }}"><img src="{{ logo }}" alt="{{ store_name }}" title="{{ store_name }}" style="margin-left: auto; margin-right: auto;"/></a>
|
||||
{% else %}
|
||||
<a href="{{ store_url }}">{{ store_name }}</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: center; border-bottom: 1px solid #ddd;"><h1>{{ text_request }}</h1></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="line-height: 1.8;">
|
||||
<p>{{ text_hello }}</p>
|
||||
<p>{{ text_delete }}</p>
|
||||
<p>{{ text_contact }}</p>
|
||||
<p>
|
||||
<br/>
|
||||
</p>
|
||||
<p style="text-align: center;"><a href="{{ contact }}" style="border-radius: 4px; color: #fff; text-decoration: none; background-color: #01b3e8; padding-left: 18px; padding-right: 18px; padding-top: 10px; padding-bottom: 10px; font-size: 18px; font-weight: bold;">{{ button_contact }}</a></p>
|
||||
<p>
|
||||
{{ text_thanks }}
|
||||
<br/>
|
||||
<strong>{{ store_name }}</strong>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
143
catalog/view/template/mail/order_add.twig
Normal file
143
catalog/view/template/mail/order_add.twig
Normal file
@ -0,0 +1,143 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/strict.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>{{ title }}</title>
|
||||
</head>
|
||||
<body style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000;">
|
||||
<div style="width: 680px;">
|
||||
{% if logo %}
|
||||
<a href="{{ store_url }}" title="{{ store_name }}"><img src="{{ logo }}" alt="{{ store_name }}" style="margin-bottom: 20px; border: none;"/></a>
|
||||
{% else %}
|
||||
<h2><a href="{{ store_url }}" title="{{ store_name }}">{{ store_name }}</a></h2>
|
||||
{% endif %}
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;">{{ text_greeting }}</p>
|
||||
{% if customer_id %}
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;">{{ text_link }}</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;"><a href="{{ link }}">{{ link }}</a></p>
|
||||
{% endif %}
|
||||
{% if download %}
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;">{{ text_download }}</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;"><a href="{{ download }}">{{ download }}</a></p>
|
||||
{% endif %}
|
||||
<table style="border-collapse: collapse; width: 100%; border-top: 1px solid #DDDDDD; border-left: 1px solid #DDDDDD; margin-bottom: 20px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;" colspan="2">{{ text_order_detail }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;"><b>{{ text_order_id }}</b> {{ order_id }}
|
||||
<br/>
|
||||
<b>{{ text_date_added }}</b> {{ date_added }}
|
||||
<br/>
|
||||
<b>{{ text_payment_method }}</b> {{ payment_method }}
|
||||
<br/>
|
||||
{% if shipping_method %} <b>{{ text_shipping_method }}</b> {{ shipping_method }}{% endif %}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;"><b>{{ text_email }}</b> {{ email }}
|
||||
<br/>
|
||||
<b>{{ text_telephone }}</b> {{ telephone }}
|
||||
<br/>
|
||||
<b>{{ text_ip }}</b> {{ ip }}
|
||||
<br/>
|
||||
<b>{{ text_order_status }}</b> {{ order_status }}
|
||||
<br/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% if comment %}
|
||||
<table style="border-collapse: collapse; width: 100%; border-top: 1px solid #DDDDDD; border-left: 1px solid #DDDDDD; margin-bottom: 20px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_instruction }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ comment }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% if payment_address || shipping_address %}
|
||||
<table style="border-collapse: collapse; width: 100%; border-top: 1px solid #DDDDDD; border-left: 1px solid #DDDDDD; margin-bottom: 20px;">
|
||||
<thead>
|
||||
<tr>
|
||||
{% if payment_address %}
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_payment_address }}</td>
|
||||
{% endif %}
|
||||
{% if shipping_address %}
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_shipping_address }}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
{% if payment_address %}
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ payment_address }}</td>
|
||||
{% endif %}
|
||||
{% if shipping_address %}
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ shipping_address }}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
<table style="border-collapse: collapse; width: 100%; border-top: 1px solid #DDDDDD; border-left: 1px solid #DDDDDD; margin-bottom: 20px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_product }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_model }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: right; padding: 7px; color: #222222;">{{ text_quantity }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: right; padding: 7px; color: #222222;">{{ text_price }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: right; padding: 7px; color: #222222;">{{ text_total }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for product in products %}
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ product.name }}
|
||||
{% for option in product.option %}
|
||||
<br/>
|
||||
<small> - {{ option.name }}: {{ option.value }}</small>
|
||||
{% endfor %}
|
||||
{% if product.reward %}
|
||||
<br/>
|
||||
<small>{{ text_points }}: {{ product.reward }}</small>
|
||||
{% endif %}
|
||||
{% if product.subscription %}
|
||||
<br/>
|
||||
<small>{{ text_subscription }}: {{ product.subscription }}</small>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ product.model }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ product.quantity }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ product.price }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ product.total }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% for voucher in vouchers %}
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ voucher.description }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;"></td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">1</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ voucher.amount }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ voucher.amount }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
{% for total in totals %}
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;" colspan="4"><b>{{ total.title }}:</b></td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ total.text }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tfoot>
|
||||
</table>
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;">{{ text_footer }}</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
37
catalog/view/template/mail/order_alert.twig
Normal file
37
catalog/view/template/mail/order_alert.twig
Normal file
@ -0,0 +1,37 @@
|
||||
{{ text_received }}<br/>
|
||||
<br/>
|
||||
{{ text_order_id }} {{ order_id }}<br/>
|
||||
{{ text_date_added }} {{ date_added }}<br/>
|
||||
{{ text_order_status }} {{ order_status }}<br/>
|
||||
<br/>
|
||||
{{ text_product }}<br/>
|
||||
<br/>
|
||||
{% for product in products %}
|
||||
{{ product.quantity }}x {{ product.name }} ({{ product.model }}) {{ product.total }}<br/>
|
||||
{% if product.option %}
|
||||
{% for option in product.option %}
|
||||
- {{ option.name }} {{ option.value }}<br/>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if vouchers %}
|
||||
<br/>
|
||||
{% for voucher in vouchers %}
|
||||
1x {{ voucher.description }} {{ voucher.amount }}<br/>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<br/>
|
||||
{{ text_total }}<br/>
|
||||
<br/>
|
||||
{% for total in totals %}
|
||||
{{ total.title }}: {{ total.value }}<br/>
|
||||
{% endfor %}
|
||||
<br/>
|
||||
{% if comment %}
|
||||
{{ text_comment }}<br/>
|
||||
<br/>
|
||||
{{ comment }}<br/>
|
||||
{% endif %}
|
||||
<br/>
|
||||
{{ store }}<br/>
|
||||
{{ store_url }}
|
24
catalog/view/template/mail/order_edit.twig
Normal file
24
catalog/view/template/mail/order_edit.twig
Normal file
@ -0,0 +1,24 @@
|
||||
{{ text_order_id }} {{ order_id }}<br/>
|
||||
{{ text_date_added }} {{ date_added }}<br/>
|
||||
<br/>
|
||||
{{ text_order_status }}<br/>
|
||||
<br/>
|
||||
{{ order_status }}<br/>
|
||||
<br/>
|
||||
{% if link %}
|
||||
{{ text_link }}<br/>
|
||||
<br/>
|
||||
{{ link }}<br/>
|
||||
{% endif %}
|
||||
{% if comment %}
|
||||
<br/>
|
||||
{{ text_comment }}<br/>
|
||||
<br/>
|
||||
{{ comment }}<br/>
|
||||
{{ text_footer }}<br/>
|
||||
{% else %}
|
||||
{{ text_footer }}<br/>
|
||||
{% endif %}
|
||||
<br/>
|
||||
{{ store }}<br/>
|
||||
{{ store_url }}
|
24
catalog/view/template/mail/order_history.twig
Normal file
24
catalog/view/template/mail/order_history.twig
Normal file
@ -0,0 +1,24 @@
|
||||
{{ text_order_id }} {{ order_id }}<br/>
|
||||
{{ text_date_added }} {{ date_added }}<br/>
|
||||
<br/>
|
||||
{{ text_order_status }}<br/>
|
||||
<br/>
|
||||
{{ order_status }}<br/>
|
||||
<br/>
|
||||
{% if link %}
|
||||
{{ text_link }}<br/>
|
||||
<br/>
|
||||
{{ link }}<br/>
|
||||
{% endif %}
|
||||
{% if comment %}
|
||||
<br/>
|
||||
{{ text_comment }}<br/>
|
||||
<br/>
|
||||
{{ comment }}<br/>
|
||||
{{ text_footer }}<br/>
|
||||
{% else %}
|
||||
{{ text_footer }}<br/>
|
||||
{% endif %}
|
||||
<br/>
|
||||
{{ store }}<br/>
|
||||
{{ store_url }}
|
129
catalog/view/template/mail/order_invoice.twig
Normal file
129
catalog/view/template/mail/order_invoice.twig
Normal file
@ -0,0 +1,129 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/strict.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>{{ title }}</title>
|
||||
</head>
|
||||
<body style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000;">
|
||||
<div style="width: 680px;">
|
||||
{% if logo %}
|
||||
<a href="{{ store_url }}" title="{{ store_name }}"><img src="{{ logo }}" alt="{{ store_name }}" style="margin-bottom: 20px; border: none;"/></a>
|
||||
{% else %}
|
||||
<h2><a href="{{ store_url }}" title="{{ store_name }}">{{ store_name }}</a></h2>
|
||||
{% endif %}
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;">{{ text_greeting }}</p>
|
||||
{% if customer_id %}
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;">{{ text_link }}</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;"><a href="{{ link }}">{{ link }}</a></p>
|
||||
{% endif %}
|
||||
{% if download %}
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;">{{ text_download }}</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;"><a href="{{ download }}">{{ download }}</a></p>
|
||||
{% endif %}
|
||||
<table style="border-collapse: collapse; width: 100%; border-top: 1px solid #DDDDDD; border-left: 1px solid #DDDDDD; margin-bottom: 20px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;" colspan="2">{{ text_order_detail }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;"><b>{{ text_order_id }}</b> {{ order_id }}
|
||||
<br/>
|
||||
<b>{{ text_date_added }}</b> {{ date_added }}
|
||||
<br/>
|
||||
<b>{{ text_payment_method }}</b> {{ payment_method }}
|
||||
<br/>
|
||||
{% if shipping_method %} <b>{{ text_shipping_method }}</b> {{ shipping_method }}
|
||||
{% endif %}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;"><b>{{ text_email }}</b> {{ email }}
|
||||
<br/>
|
||||
<b>{{ text_telephone }}</b> {{ telephone }}
|
||||
<br/>
|
||||
<b>{{ text_ip }}</b> {{ ip }}
|
||||
<br/>
|
||||
<b>{{ text_order_status }}</b> {{ order_status }}
|
||||
<br/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% if comment %}
|
||||
<table style="border-collapse: collapse; width: 100%; border-top: 1px solid #DDDDDD; border-left: 1px solid #DDDDDD; margin-bottom: 20px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_instruction }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ comment }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
<table style="border-collapse: collapse; width: 100%; border-top: 1px solid #DDDDDD; border-left: 1px solid #DDDDDD; margin-bottom: 20px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_payment_address }}</td>
|
||||
{% if shipping_address %}
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_shipping_address }}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ payment_address }}</td>
|
||||
{% if shipping_address %}
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ shipping_address }}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="border-collapse: collapse; width: 100%; border-top: 1px solid #DDDDDD; border-left: 1px solid #DDDDDD; margin-bottom: 20px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_product }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_model }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: right; padding: 7px; color: #222222;">{{ text_quantity }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: right; padding: 7px; color: #222222;">{{ text_price }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: right; padding: 7px; color: #222222;">{{ text_total }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for product in products %}
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ product.name }}
|
||||
{% for option in product.option %}
|
||||
<br/>
|
||||
<small> - {{ option.name }}: {{ option.value }}</small>
|
||||
{% endfor %}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ product.model }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ product.quantity }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ product.price }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ product.total }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% for voucher in vouchers %}
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ voucher.description }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;"></td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">1</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ voucher.amount }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ voucher.amount }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
{% for total in totals %}
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;" colspan="4"><b>{{ total.title }}:</b></td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ total.text }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tfoot>
|
||||
</table>
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;">{{ text_footer }}</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
21
catalog/view/template/mail/register.twig
Normal file
21
catalog/view/template/mail/register.twig
Normal file
@ -0,0 +1,21 @@
|
||||
{{ text_welcome }}<br/>
|
||||
<br/>
|
||||
{% if not approval %}
|
||||
{{ text_login }}<br/>
|
||||
<br/>
|
||||
{{ login }}<br/>
|
||||
<br/>
|
||||
{{ text_service }}<br/>
|
||||
<br/>
|
||||
{{ text_thanks }}<br/>
|
||||
{{ store }}<br/>
|
||||
{{ store_url }}
|
||||
{% else %}
|
||||
{{ text_approval }}<br/>
|
||||
<br/>
|
||||
{{ login }}<br/>
|
||||
<br/>
|
||||
{{ text_thanks }}<br/>
|
||||
{{ store }}<br/>
|
||||
{{ store_url }}
|
||||
{% endif %}
|
14
catalog/view/template/mail/register_alert.twig
Normal file
14
catalog/view/template/mail/register_alert.twig
Normal file
@ -0,0 +1,14 @@
|
||||
{{ text_signup }}<br/>
|
||||
<br/>
|
||||
{{ text_firstname }} {{ firstname }}<br/>
|
||||
{{ text_lastname }} {{ lastname }}<br/>
|
||||
{% if customer_group %}
|
||||
{{ text_customer_group }} {{ customer_group }}<br/>
|
||||
{% endif %}
|
||||
{{ text_email }} {{ email }}<br/>
|
||||
{% if telephone %}
|
||||
{{ text_telephone }} {{ telephone }}
|
||||
{% endif %}
|
||||
<br/>
|
||||
{{ store }}<br/>
|
||||
{{ store_url }}
|
12
catalog/view/template/mail/review.twig
Normal file
12
catalog/view/template/mail/review.twig
Normal file
@ -0,0 +1,12 @@
|
||||
{{ text_waiting }}<br/>
|
||||
<br/>
|
||||
{{ text_product }} {{ product }}<br/>
|
||||
{{ text_reviewer }} {{ reviewer }}<br/>
|
||||
{{ text_rating }} {{ rating }}<br/>
|
||||
<br/>
|
||||
{{ text_review }}<br/>
|
||||
<br/>
|
||||
{{ text }}<br/>
|
||||
<br/>
|
||||
{{ store }}<br/>
|
||||
{{ store_url }}
|
99
catalog/view/template/mail/subscription.twig
Normal file
99
catalog/view/template/mail/subscription.twig
Normal file
@ -0,0 +1,99 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>{{ title }}</title>
|
||||
</head>
|
||||
<body style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000;">
|
||||
<div style="width: 680px;"><a href="{{ store_url }}" title="{{ store_name }}"><img src="{{ logo }}" alt="{{ store_name }}" style="margin-bottom: 20px; border: none;"/></a>
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;">{{ text_greeting }}</p>
|
||||
{% if customer_id %}
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;">{{ text_link }}</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;"><a href="{{ link }}">{{ link }}</a></p>
|
||||
{% endif %}
|
||||
<table style="border-collapse: collapse; width: 100%; border-top: 1px solid #DDDDDD; border-left: 1px solid #DDDDDD; margin-bottom: 20px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;" colspan="2">{{ text_subscription_detail }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;"><b>{{ text_orders_id }}</b> <a href="{{ order }}">#{{ order_id }}</a>
|
||||
<br/>
|
||||
<b>{{ text_date_added }}</b> {{ date_added }}
|
||||
<br/>
|
||||
<b>{{ text_payment_method }}</b> {{ payment_method }}
|
||||
</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;"><b>{{ text_email }}</b> {{ email }}
|
||||
<br/>
|
||||
<b>{{ text_telephone }}</b> {{ telephone }}
|
||||
<br/>
|
||||
<b>{{ text_ip }}</b> {{ ip }}
|
||||
<br/>
|
||||
<b>{{ text_order_status }}</b> {{ order_status }}
|
||||
<br/>
|
||||
<b>{{ text_description }}</b> {{ description }}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% if comment %}
|
||||
<table style="border-collapse: collapse; width: 100%; border-top: 1px solid #DDDDDD; border-left: 1px solid #DDDDDD; margin-bottom: 20px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_instruction }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ comment }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
<table style="border-collapse: collapse; width: 100%; border-top: 1px solid #DDDDDD; border-left: 1px solid #DDDDDD; margin-bottom: 20px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_payment_address }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ payment_address }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="border-collapse: collapse; width: 100%; border-top: 1px solid #DDDDDD; border-left: 1px solid #DDDDDD; margin-bottom: 20px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;"><a href="{{ product }}">{{ text_product }}</a></td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: left; padding: 7px; color: #222222;">{{ text_model }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: right; padding: 7px; color: #222222;">{{ text_quantity }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: right; padding: 7px; color: #222222;">{{ text_price }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: right; padding: 7px; color: #222222;">{{ text_total }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ name }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;">{{ model }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ quantity }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ price }}</td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ total }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
{% for total in totals %}
|
||||
<tr>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;" colspan="4"><b>{{ total.title }}:</b></td>
|
||||
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;">{{ total.text }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tfoot>
|
||||
</table>
|
||||
{% if promotion %}{{ promotion }}{% endif %}
|
||||
<p style="margin-top: 0px; margin-bottom: 20px;">{{ text_footer }}</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
12
catalog/view/template/mail/subscription_alert.twig
Normal file
12
catalog/view/template/mail/subscription_alert.twig
Normal file
@ -0,0 +1,12 @@
|
||||
{{ text_received }}
|
||||
|
||||
{{ text_orders_id }} {{ order_id }}
|
||||
{{ text_subscription_id }} {{ subscription_id }}
|
||||
{{ text_date_added }} {{ date_added }}
|
||||
{{ text_subscription_status }} {{ subscription_status }}
|
||||
|
||||
{% if comment %}
|
||||
{{ text_comment }}
|
||||
|
||||
{{ comment }}
|
||||
{% endif %}
|
12
catalog/view/template/mail/transaction.twig
Normal file
12
catalog/view/template/mail/transaction.twig
Normal file
@ -0,0 +1,12 @@
|
||||
{{ text_received }}<br/>
|
||||
<br/>
|
||||
{{ text_amount }}<br/>
|
||||
<br/>
|
||||
{{ amount }}<br/>
|
||||
<br/>
|
||||
{{ text_total }}<br/>
|
||||
<br/>
|
||||
{{ total }}<br/>
|
||||
<br/>
|
||||
{{ store }}<br/>
|
||||
{{ store_url }}
|
58
catalog/view/template/mail/voucher.twig
Normal file
58
catalog/view/template/mail/voucher.twig
Normal file
@ -0,0 +1,58 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/strict.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>{{ title }}</title>
|
||||
<style type="text/css">
|
||||
body {
|
||||
color: #000000;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
body, td, th, input, textarea, select, a {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
a, a:visited, a b {
|
||||
color: #378DC1;
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a img {
|
||||
border: none;
|
||||
}
|
||||
|
||||
#container {
|
||||
width: 680px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
{% if image %}
|
||||
<div style="float: right; margin-left: 20px;"><a href="{{ store_url }}" title="{{ store_name }}"><img src="{{ image }}" alt="{{ store_name }}"/></a></div>
|
||||
{% endif %}
|
||||
<div>
|
||||
<p>{{ text_greeting }}</p>
|
||||
<p>{{ text_from }}</p>
|
||||
{% if message %}
|
||||
<p>{{ text_message }}</p>
|
||||
<p>{{ message }}</p>
|
||||
{% endif %}
|
||||
<p>{{ text_redeem }}</p>
|
||||
<p><a href="{{ store_url }}" title="{{ store_name }}">{{ store_url }}</a></p>
|
||||
<p>{{ text_footer }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
98
catalog/view/template/product/category.twig
Normal file
98
catalog/view/template/product/category.twig
Normal file
@ -0,0 +1,98 @@
|
||||
{{ header }}
|
||||
<div id="product-category" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h2>{{ heading_title }}</h2>
|
||||
{% if thumb or description %}
|
||||
<div class="row">
|
||||
{% if thumb %}
|
||||
<div class="col-sm-2"><img src="{{ thumb }}" alt="{{ heading_title }}" title="{{ heading_title }}" class="img-thumbnail"/></div>
|
||||
{% endif %}
|
||||
{% if description %}
|
||||
<div class="col-sm-10">{{ description }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<hr/>
|
||||
{% endif %}
|
||||
{% if categories %}
|
||||
<h3>{{ text_refine }}</h3>
|
||||
{% if categories|length <= 5 %}
|
||||
<div class="row">
|
||||
<div class="col-sm-3">
|
||||
<ul>
|
||||
{% for category in categories %}
|
||||
<li><a href="{{ category.href }}">{{ category.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="row row-cols-sm-2 row-cols-lg-4">
|
||||
{% for category in categories|batch((categories|length / 4)|round(1, 'ceil')) %}
|
||||
<div class="col">
|
||||
<ul>
|
||||
{% for child in category %}
|
||||
<li><a href="{{ child.href }}">{{ child.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<br/>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if products %}
|
||||
<div id="display-control" class="row">
|
||||
<div class="col-lg-3">
|
||||
<div class="mb-3">
|
||||
<a href="{{ compare }}" id="compare-total" class="btn btn-primary d-block"><i class="fa-solid fa-arrow-right-arrow-left"></i> <span class="d-none d-xl-inline">{{ text_compare }}</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-1 d-none d-lg-block">
|
||||
<div class="btn-group">
|
||||
<button type="button" id="button-list" class="btn btn-light" data-bs-toggle="tooltip" title="{{ button_list }}"><i class="fa-solid fa-table-list"></i></button>
|
||||
<button type="button" id="button-grid" class="btn btn-light" data-bs-toggle="tooltip" title="{{ button_grid }}"><i class="fa-solid fa-table-cells"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4 offset-lg-1 col-6">
|
||||
<div class="input-group mb-3">
|
||||
<label for="input-sort" class="input-group-text">{{ text_sort }}</label> <select id="input-sort" class="form-select" onchange="location = this.value;">
|
||||
{% for sorts in sorts %}
|
||||
<option value="{{ sorts.href }}"{% if sorts.value == '%s-%s'|format(sort, order) %} selected{% endif %}>{{ sorts.text }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-6">
|
||||
<div class="input-group mb-3">
|
||||
<label for="input-limit" class="input-group-text">{{ text_limit }}</label> <select id="input-limit" class="form-select" onchange="location = this.value;">
|
||||
{% for limits in limits %}
|
||||
<option value="{{ limits.href }}"{% if limits.value == limit %} selected{% endif %}>{{ limits.text }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="product-list" class="row row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-4">
|
||||
{% for product in products %}
|
||||
<div class="col mb-3">{{ product }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if not categories and not products %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{% endif %}
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
137
catalog/view/template/product/compare.twig
Normal file
137
catalog/view/template/product/compare.twig
Normal file
@ -0,0 +1,137 @@
|
||||
{{ header }}
|
||||
<div id="product-compare" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% if success %}
|
||||
<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> {{ success }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
{% if products %}
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="{{ products|length + 1 }}"><strong>{{ text_product }}</strong></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ text_name }}</td>
|
||||
{% for product in products %}
|
||||
<td><a href="{{ product.href }}"><strong>{{ product.name }}</strong></a></td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ text_image }}</td>
|
||||
{% for product in products %}
|
||||
<td class="text-center">{% if product.thumb %} <img src="{{ product.thumb }}" alt="{{ product.name }}" title="{{ product.name }}" class="img-thumbnail"/> {% endif %}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ text_price }}</td>
|
||||
{% for product in products %}
|
||||
<td>{% if not product.special %}
|
||||
{{ product.price }}
|
||||
{% else %}
|
||||
<span class="price-new">{{ product.special }}</span> <span class="price-old">{{ product.price }}</span>
|
||||
{% endif %}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ text_model }}</td>
|
||||
{% for product in products %}
|
||||
<td>{{ product.model }}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ text_manufacturer }}</td>
|
||||
{% for product in products %}
|
||||
<td>{{ product.manufacturer }}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ text_availability }}</td>
|
||||
{% for product in products %}
|
||||
<td>{{ product.availability }}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% if review_status %}
|
||||
<tr>
|
||||
<td>{{ text_rating }}</td>
|
||||
{% for product in products %}
|
||||
<td class="rating">
|
||||
{% for i in 1..5 %}
|
||||
{% if product.rating < i %}
|
||||
<span class="fa-stack"><i class="fa-regular fa-star fa-stack-1x"></i></span>
|
||||
{% else %}
|
||||
<span class="fa-stack"><i class="fa-solid fa-star fa-stack-1x"></i><i class="fa-regular fa-star fa-stack-1x"></i></span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<br/>
|
||||
{{ product.reviews }}
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td>{{ text_summary }}</td>
|
||||
{% for product in products %}
|
||||
<td class="description">{{ product.description }}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ text_weight }}</td>
|
||||
{% for product in products %}
|
||||
<td>{{ product.weight }}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ text_dimension }}</td>
|
||||
{% for product in products %}
|
||||
<td>{{ product.length }} x {{ product.width }} x {{ product.height }}</td>
|
||||
{% endfor %} </tr>
|
||||
</tbody>
|
||||
{% for attribute_group in attribute_groups %}
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="{{ products|length + 1 }}"><strong>{{ attribute_group.name }}</strong></td>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for key, attribute in attribute_group.attribute %}
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ attribute.name }}</td>
|
||||
{% for product in products %}
|
||||
<td>{% if product.attribute[key] %}{{ product.attribute[key] }}{% endif %}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</tbody>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
{% for product in products %}
|
||||
<td class="text-center">
|
||||
<form action="{{ add_to_cart }}" method="post" data-oc-toggle="ajax" data-oc-load="{{ cart }}" data-oc-target="#header-cart">
|
||||
<button type="submit" id="button-confirm" class="btn btn-primary btn-block">{{ button_cart }}</button>
|
||||
<input type="hidden" name="product_id" value="{{ product.product_id }}"/> <input type="hidden" name="quantity" value="{{ product.minimum }}"/>
|
||||
<a href="{{ product.remove }}" class="btn btn-danger btn-block">{{ button_remove }}</a>
|
||||
</form>
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</table>
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{% endif %}
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
61
catalog/view/template/product/manufacturer_info.twig
Normal file
61
catalog/view/template/product/manufacturer_info.twig
Normal file
@ -0,0 +1,61 @@
|
||||
{{ header }}
|
||||
<div id="product-manufacturer" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h2>{{ heading_title }}</h2>
|
||||
{% if products %}
|
||||
<div id="display-control" class="row">
|
||||
<div class="col-md-3">
|
||||
<div class="mb-3">
|
||||
<a href="{{ compare }}" id="compare-total" class="btn btn-primary d-block"><i class="fa-solid fa-arrow-right-arrow-left"></i> <span class="d-inline d-md-none d-lg-inline">{{ text_compare }}</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-1 d-none d-md-block">
|
||||
<div class="btn-group">
|
||||
<button type="button" id="button-list" class="btn btn-light" data-bs-toggle="tooltip" title="{{ button_list }}"><i class="fa-solid fa-table-list"></i></button>
|
||||
<button type="button" id="button-grid" class="btn btn-light" data-bs-toggle="tooltip" title="{{ button_grid }}"><i class="fa-solid fa-table-cells"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 offset-md-1 col-6">
|
||||
<div class="input-group mb-3">
|
||||
<label for="input-sort" class="input-group-text">{{ text_sort }}</label>
|
||||
<select id="input-sort" class="form-select" onchange="location = this.value;">
|
||||
{% for sorts in sorts %}
|
||||
<option value="{{ sorts.href }}"{% if sorts.value == '%s-%s'|format(sort, order) %} selected{% endif %}>{{ sorts.text }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 col-6">
|
||||
<div class="input-group mb-3">
|
||||
<label for="input-limit" class="input-group-text">{{ text_limit }}</label>
|
||||
<select id="input-limit" class="form-select" onchange="location = this.value;">
|
||||
{% for limits in limits %}
|
||||
<option value="{{ limits.href }}"{% if limits.value == limit %} selected{% endif %}>{{ limits.text }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="product-list" class="row row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-4">
|
||||
{% for product in products %}
|
||||
<div class="col mb-3">{{ product }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{% endif %}
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
36
catalog/view/template/product/manufacturer_list.twig
Normal file
36
catalog/view/template/product/manufacturer_list.twig
Normal file
@ -0,0 +1,36 @@
|
||||
{{ header }}
|
||||
<div id="product-manufacturer" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
{% if categories %}
|
||||
<p><strong>{{ text_index }}</strong>
|
||||
{% for category in categories %}
|
||||
<a href="{{ category.href }}#{{ category.name }}">{{ category.name }}</a>
|
||||
{% endfor %}
|
||||
</p>
|
||||
{% for category in categories %}
|
||||
<h2 id="{{ category.name }}">{{ category.name }}</h2>
|
||||
{% if category.manufacturer %}
|
||||
{% for manufacturers in category.manufacturer|batch(4) %}
|
||||
<div class="row mb-3">
|
||||
{% for manufacturer in manufacturers %}
|
||||
<div class="col-sm-3"><a href="{{ manufacturer.href }}">{{ manufacturer.name }}</a></div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{% endif %}
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
393
catalog/view/template/product/product.twig
Normal file
393
catalog/view/template/product/product.twig
Normal file
@ -0,0 +1,393 @@
|
||||
{{ header }}
|
||||
<div id="product-info" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">
|
||||
{{ content_top }}
|
||||
|
||||
<div class="row mb-3">
|
||||
|
||||
{% if thumb or images %}
|
||||
<div class="col-sm">
|
||||
<div class="image magnific-popup">
|
||||
|
||||
{% if thumb %}
|
||||
<a href="{{ popup }}" title="{{ heading_title }}"><img src="{{ thumb }}" title="{{ heading_title }}" alt="{{ heading_title }}" class="img-thumbnail mb-3"/></a>
|
||||
{% endif %}
|
||||
|
||||
{% if images %}
|
||||
<div>
|
||||
{% for image in images %}
|
||||
<a href="{{ image.popup }}" title="{{ heading_title }}"><img src="{{ image.thumb }}" title="{{ heading_title }}" alt="{{ heading_title }}" class="img-thumbnail"/></a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-sm">
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<ul class="list-unstyled">
|
||||
|
||||
{% if manufacturer %}
|
||||
<li>{{ text_manufacturer }} <a href="{{ manufacturers }}">{{ manufacturer }}</a></li>
|
||||
{% endif %}
|
||||
|
||||
<li>{{ text_model }} {{ model }}</li>
|
||||
|
||||
{% if reward %}
|
||||
<li>{{ text_reward }} {{ reward }}</li>
|
||||
{% endif %}
|
||||
|
||||
<li>{{ text_stock }} {{ stock }}</li>
|
||||
</ul>
|
||||
|
||||
{% if price %}
|
||||
<ul class="list-unstyled">
|
||||
{% if not special %}
|
||||
<li>
|
||||
<h2><span class="price-new">{{ price }}</span></h2>
|
||||
</li>
|
||||
{% else %}
|
||||
<li><span class="price-old">{{ price }}</span></li>
|
||||
<li><h2><span class="price-new">{{ special }}</span></h2></li>
|
||||
{% endif %}
|
||||
|
||||
{% if tax %}
|
||||
<li>{{ text_tax }} {{ tax }}</li>
|
||||
{% endif %}
|
||||
|
||||
{% if points %}
|
||||
<li>{{ text_points }} {{ points }}</li>
|
||||
{% endif %}
|
||||
|
||||
{% if discounts %}
|
||||
<li>
|
||||
<hr>
|
||||
</li>
|
||||
{% for discount in discounts %}
|
||||
<li>{{ discount.quantity }}{{ text_discount }}{{ discount.price }}</li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
<form method="post" data-oc-toggle="ajax">
|
||||
<div class="btn-group">
|
||||
<button type="submit" formaction="{{ add_to_wishlist }}" data-bs-toggle="tooltip" class="btn btn-light" title="{{ button_wishlist }}"><i class="fa-solid fa-heart"></i></button>
|
||||
<button type="submit" formaction="{{ add_to_compare }}" data-bs-toggle="tooltip" class="btn btn-light" title="{{ button_compare }}"><i class="fa-solid fa-arrow-right-arrow-left"></i></button>
|
||||
</div>
|
||||
<input type="hidden" name="product_id" value="{{ product_id }}"/>
|
||||
</form>
|
||||
<br/>
|
||||
<div id="product">
|
||||
<form id="form-product">
|
||||
{% if options %}
|
||||
<hr>
|
||||
<h3>{{ text_option }}</h3>
|
||||
<div>
|
||||
{% for option in options %}
|
||||
|
||||
{% if option.type == 'select' %}
|
||||
<div class="mb-3{% if option.required %} required{% endif %}">
|
||||
<label for="input-option-{{ option.product_option_id }}" class="form-label">{{ option.name }}</label>
|
||||
<select name="option[{{ option.product_option_id }}]" id="input-option-{{ option.product_option_id }}" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for option_value in option.product_option_value %}
|
||||
<option value="{{ option_value.product_option_value_id }}">{{ option_value.name }}
|
||||
{% if option_value.price %}
|
||||
({{ option_value.price_prefix }}{{ option_value.price }})
|
||||
{% endif %}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div id="error-option-{{ option.product_option_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if option.type == 'radio' %}
|
||||
<div class="mb-3{% if option.required %} required{% endif %}">
|
||||
<label class="form-label">{{ option.name }}</label>
|
||||
<div id="input-option-{{ option.product_option_id }}">
|
||||
{% for option_value in option.product_option_value %}
|
||||
<div class="form-check">
|
||||
<input type="radio" name="option[{{ option.product_option_id }}]" value="{{ option_value.product_option_value_id }}" id="input-option-value-{{ option_value.product_option_value_id }}" class="form-check-input"/>
|
||||
<label for="input-option-value-{{ option_value.product_option_value_id }}" class="form-check-label">{% if option_value.image %}<img src="{{ option_value.image }}" alt="{{ option_value.name }} {% if option_value.price %}{{ option_value.price_prefix }} {{ option_value.price }}{% endif %}" class="img-thumbnail"/>{% endif %}
|
||||
{{ option_value.name }}
|
||||
{% if option_value.price %}
|
||||
({{ option_value.price_prefix }}{{ option_value.price }})
|
||||
{% endif %}
|
||||
</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-option-{{ option.product_option_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if option.type == 'checkbox' %}
|
||||
<div class="mb-3{% if option.required %} required{% endif %}">
|
||||
<label class="form-label">{{ option.name }}</label>
|
||||
<div id="input-option-{{ option.product_option_id }}">
|
||||
{% for option_value in option.product_option_value %}
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="option[{{ option.product_option_id }}][]" value="{{ option_value.product_option_value_id }}" id="input-option-value-{{ option_value.product_option_value_id }}" class="form-check-input"/>
|
||||
<label for="input-option-value-{{ option_value.product_option_value_id }}" class="form-check-label">
|
||||
{% if option_value.image %}
|
||||
<img src="{{ option_value.image }}" alt="{{ option_value.name }} {% if option_value.price %}{{ option_value.price_prefix }} {{ option_value.price }}{% endif %}" class="img-thumbnail"/>{% endif %}
|
||||
{{ option_value.name }}
|
||||
{% if option_value.price %}
|
||||
({{ option_value.price_prefix }}{{ option_value.price }})
|
||||
{% endif %}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="error-option-{{ option.product_option_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if option.type == 'text' %}
|
||||
<div class="mb-3{% if option.required %} required{% endif %}">
|
||||
<label for="input-option-{{ option.product_option_id }}" class="form-label">{{ option.name }}</label>
|
||||
<input type="text" name="option[{{ option.product_option_id }}]" value="{{ option.value }}" placeholder="{{ option.name }}" id="input-option-{{ option.product_option_id }}" class="form-control"/>
|
||||
<div id="error-option-{{ option.product_option_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if option.type == 'textarea' %}
|
||||
<div class="mb-3{% if option.required %} required{% endif %}">
|
||||
<label for="input-option-{{ option.product_option_id }}" class="form-label">{{ option.name }}</label>
|
||||
<textarea name="option[{{ option.product_option_id }}]" rows="5" placeholder="{{ option.name }}" id="input-option-{{ option.product_option_id }}" class="form-control">{{ option.value }}</textarea>
|
||||
<div id="error-option-{{ option.product_option_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if option.type == 'file' %}
|
||||
<div class="mb-3{% if option.required %} required{% endif %}">
|
||||
<label for="button-upload-{{ option.product_option_id }}" class="form-label">{{ option.name }}</label>
|
||||
<div>
|
||||
<button type="button" id="button-upload-{{ option.product_option_id }}" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-target="#input-option-{{ option.product_option_id }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size }}" class="btn btn-light btn-block"><i class="fa-solid fa-upload"></i> {{ button_upload }}</button>
|
||||
<input type="hidden" name="option[{{ option.product_option_id }}]" value="" id="input-option-{{ option.product_option_id }}"/>
|
||||
</div>
|
||||
<div id="error-option-{{ option.product_option_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if option.type == 'date' %}
|
||||
<div class="mb-3{% if option.required %} required{% endif %}">
|
||||
<label for="input-option-{{ option.product_option_id }}" class="form-label">{{ option.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="option[{{ option.product_option_id }}]" value="{{ option.value }}" id="input-option-{{ option.product_option_id }}" class="form-control date"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-option-{{ option.product_option_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if option.type == 'datetime' %}
|
||||
<div class="mb-3{% if option.required %} required{% endif %}">
|
||||
<label for="input-option-{{ option.product_option_id }}" class="form-label">{{ option.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="option[{{ option.product_option_id }}]" value="{{ option.value }}" id="input-option-{{ option.product_option_id }}" class="form-control datetime"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-option-{{ option.product_option_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if option.type == 'time' %}
|
||||
<div class="mb-3{% if option.required %} required{% endif %}">
|
||||
<label for="input-option-{{ option.product_option_id }}" class="form-label">{{ option.name }}</label>
|
||||
<div class="input-group">
|
||||
<input type="text" name="option[{{ option.product_option_id }}]" value="{{ option.value }}" id="input-option-{{ option.product_option_id }}" class="form-control time"/>
|
||||
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
||||
</div>
|
||||
<div id="error-option-{{ option.product_option_id }}" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if subscription_plans %}
|
||||
<hr/>
|
||||
<h3>{{ text_subscription }}</h3>
|
||||
<div class="mb-3 required">
|
||||
|
||||
<select name="subscription_plan_id" id="input-subscription" class="form-select">
|
||||
<option value="">{{ text_select }}</option>
|
||||
{% for subscription_plan in subscription_plans %}
|
||||
<option value="{{ subscription_plan.subscription_plan_id }}">{{ subscription_plan.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
{% for subscription_plan in subscription_plans %}
|
||||
<div id="subscription-description-{{ subscription_plan.subscription_plan_id }}" class="form-text subscription d-none">{{ subscription_plan.description }}</div>
|
||||
{% endfor %}
|
||||
<div id="error-subscription" class="invalid-feedback"></div>
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="input-quantity" class="form-label">{{ entry_qty }}</label>
|
||||
<input type="text" name="quantity" value="{{ minimum }}" size="2" id="input-quantity" class="form-control"/>
|
||||
<input type="hidden" name="product_id" value="{{ product_id }}" id="input-product-id"/>
|
||||
<div id="error-quantity" class="form-text"></div>
|
||||
<br/>
|
||||
<button type="submit" id="button-cart" class="btn btn-primary btn-lg btn-block">{{ button_cart }}</button>
|
||||
</div>
|
||||
|
||||
{% if minimum > 1 %}
|
||||
<div class="alert alert-info"><i class="fa-solid fa-circle-info"></i> {{ text_minimum }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if review_status %}
|
||||
<div class="rating">
|
||||
<p>{% for i in 1..5 %}
|
||||
{% if rating < i %}
|
||||
<span class="fa-stack"><i class="fa-regular fa-star fa-stack-1x"></i></span>
|
||||
{% else %}
|
||||
<span class="fa-stack"><i class="fa-solid fa-star fa-stack-1x"></i><i class="fa-regular fa-star fa-stack-1x"></i></span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<a href="" onclick="$('a[href=\'#tab-review\']').tab('show'); return false;">{{ text_reviews }}</a> / <a href="" onclick="$('a[href=\'#tab-review\']').tab('show'); return false;">{{ text_write }}</a></p>
|
||||
</div>
|
||||
{% endif %}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="nav-item"><a href="#tab-description" data-bs-toggle="tab" class="nav-link active">{{ tab_description }}</a></li>
|
||||
|
||||
{% if attribute_groups %}
|
||||
<li class="nav-item"><a href="#tab-specification" data-bs-toggle="tab" class="nav-link">{{ tab_attribute }}</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% if review_status %}
|
||||
<li class="nav-item"><a href="#tab-review" data-bs-toggle="tab" class="nav-link">{{ tab_review }}</a></li>
|
||||
{% endif %}
|
||||
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
|
||||
<div id="tab-description" class="tab-pane fade show active mb-4">{{ description }}</div>
|
||||
|
||||
{% if attribute_groups %}
|
||||
<div id="tab-specification" class="tab-pane fade">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered">
|
||||
{% for attribute_group in attribute_groups %}
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="2"><strong>{{ attribute_group.name }}</strong></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for attribute in attribute_group.attribute %}
|
||||
<tr>
|
||||
<td>{{ attribute.name }}</td>
|
||||
<td>{{ attribute.text }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if review_status %}
|
||||
<div id="tab-review" class="tab-pane fade mb-4">{{ review }}</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if products %}
|
||||
<h3>{{ text_related }}</h3>
|
||||
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-xl-4">
|
||||
{% for product in products %}
|
||||
<div class="col mb-3">{{ product }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if tags %}
|
||||
<p>{{ text_tags }}
|
||||
{% for i in 0..(tags|length - 1) %}
|
||||
<a href="{{ tags[i].href }}">{{ tags[i].tag }}</a>{% if not loop.end %},{% endif %}
|
||||
{% endfor %}
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('#input-subscription').on('change', function(e) {
|
||||
var element = this;
|
||||
|
||||
$('.subscription').addClass('d-none');
|
||||
|
||||
$('#subscription-description-' + $(element).val()).removeClass('d-none');
|
||||
});
|
||||
|
||||
$('#form-product').on('submit', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
$.ajax({
|
||||
url: 'index.php?route=checkout/cart.add&language={{ language }}',
|
||||
type: 'post',
|
||||
data: $('#form-product').serialize(),
|
||||
dataType: 'json',
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
cache: false,
|
||||
processData: false,
|
||||
beforeSend: function() {
|
||||
$('#button-cart').button('loading');
|
||||
},
|
||||
complete: function() {
|
||||
$('#button-cart').button('reset');
|
||||
},
|
||||
success: function(json) {
|
||||
console.log(json);
|
||||
|
||||
$('#form-product').find('.is-invalid').removeClass('is-invalid');
|
||||
$('#form-product').find('.invalid-feedback').removeClass('d-block');
|
||||
|
||||
if (json['error']) {
|
||||
for (key in json['error']) {
|
||||
$('#input-' + key.replaceAll('_', '-')).addClass('is-invalid').find('.form-control, .form-select, .form-check-input, .form-check-label').addClass('is-invalid');
|
||||
$('#error-' + key.replaceAll('_', '-')).html(json['error'][key]).addClass('d-block');
|
||||
}
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-check"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#header-cart').load('index.php?route=common/cart.info');
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
$('.magnific-popup').magnificPopup({
|
||||
type: 'image',
|
||||
delegate: 'a',
|
||||
gallery: {
|
||||
enabled: true
|
||||
}
|
||||
});
|
||||
});
|
||||
//--></script>
|
||||
{{ footer }}
|
99
catalog/view/template/product/review.twig
Normal file
99
catalog/view/template/product/review.twig
Normal file
@ -0,0 +1,99 @@
|
||||
<form id="form-review">
|
||||
<div id="review">{{ list }}</div>
|
||||
<h2>{{ text_write }}</h2>
|
||||
{% if review_guest %}
|
||||
<div class="mb-3 required">
|
||||
<label for="input-name" class="form-label">{{ entry_name }}</label> <input type="text" name="name" value="{{ customer_name }}" id="input-name" class="form-control"/>
|
||||
<div id="error-name" class="invalid-feedback"></div>
|
||||
</div>
|
||||
<div class="mb-3 required">
|
||||
<label for="input-text" class="form-label">{{ entry_review }}</label> <textarea name="text" rows="5" id="input-text" class="form-control"></textarea>
|
||||
<div id="error-text" class="invalid-feedback"></div>
|
||||
<div class="invalid-feedback">{{ text_note }}</div>
|
||||
</div>
|
||||
<div class="row mb-3 required">
|
||||
<label class="form-label">{{ entry_rating }}</label>
|
||||
<div id="input-rating">
|
||||
{{ entry_bad }}
|
||||
<input type="radio" name="rating" value="1" class="form-check-input"/>
|
||||
|
||||
<input type="radio" name="rating" value="2" class="form-check-input"/>
|
||||
|
||||
<input type="radio" name="rating" value="3" class="form-check-input"/>
|
||||
|
||||
<input type="radio" name="rating" value="4" class="form-check-input"/>
|
||||
|
||||
<input type="radio" name="rating" value="5" class="form-check-input"/>
|
||||
{{ entry_good }}
|
||||
</div>
|
||||
<div id="error-rating" class="invalid-feedback"></div>
|
||||
</div>
|
||||
{{ captcha }}
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href="{{ back }}" class="btn btn-light">{{ button_back }}</a>
|
||||
</div>
|
||||
<div class="col text-end">
|
||||
<button type="submit" id="button-review" class="btn btn-primary">{{ button_continue }}</button>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
{{ text_login }}
|
||||
{% endif %}
|
||||
</form>
|
||||
<script type="text/javascript"><!--
|
||||
$('#review').on('click', '.pagination a', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
$('#review').load(this.href);
|
||||
});
|
||||
|
||||
// Forms
|
||||
$('#form-review').on('submit', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var element = this;
|
||||
|
||||
$.ajax({
|
||||
url: 'index.php?route=product/review.write&language={{ language }}&review_token={{ review_token }}&product_id={{ product_id }}',
|
||||
type: 'post',
|
||||
data: $('#form-review').serialize(),
|
||||
dataType: 'json',
|
||||
cache: false,
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
processData: false,
|
||||
beforeSend: function() {
|
||||
$('#button-review').button('loading');
|
||||
},
|
||||
complete: function() {
|
||||
$('#button-review').button('reset');
|
||||
},
|
||||
success: function(json) {
|
||||
$('.alert-dismissible').remove();
|
||||
$('#form-review').find('.is-invalid').removeClass('is-invalid');
|
||||
$('#form-review').find('.invalid-feedback').removeClass('d-block');
|
||||
|
||||
if (json['error']) {
|
||||
if (json['error']['warning']) {
|
||||
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error']['warning'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
}
|
||||
|
||||
for (key in json['error']) {
|
||||
$('#input-' + key.replaceAll('_', '-')).addClass('is-invalid').find('.form-control, .form-select, .form-check-input, .form-check-label').addClass('is-invalid');
|
||||
$('#error-' + key.replaceAll('_', '-')).html(json['error'][key]).addClass('d-block');
|
||||
}
|
||||
}
|
||||
|
||||
if (json['success']) {
|
||||
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
||||
|
||||
$('#input-text').val('');
|
||||
$('#input-rating input[type=\'radio\']').prop('checked', false);
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
//--></script>
|
26
catalog/view/template/product/review_list.twig
Normal file
26
catalog/view/template/product/review_list.twig
Normal file
@ -0,0 +1,26 @@
|
||||
{% if reviews %}
|
||||
{% for review in reviews %}
|
||||
<table class="table table-striped table-bordered">
|
||||
<tr>
|
||||
<td style="width: 50%;"><strong>{{ review.author }}</strong></td>
|
||||
<td class="text-end">{{ review.date_added }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"><p>{{ review.text }}</p>
|
||||
<div class="rating">
|
||||
{% for i in 1..5 %}
|
||||
{% if review.rating < i %}
|
||||
<span class="fa-stack"><i class="fa-regular fa-star fa-stack-1x"></i></span>
|
||||
{% else %}
|
||||
<span class="fa-stack"><i class="fa-solid fa-star fa-stack-1x"></i><i class="fa-regular fa-star fa-stack-1x"></i></span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endfor %}
|
||||
<div class="text-end">{{ pagination }}</div>
|
||||
{% else %}
|
||||
<p class="text-center">{{ text_no_results }}</p>
|
||||
{% endif %}
|
138
catalog/view/template/product/search.twig
Normal file
138
catalog/view/template/product/search.twig
Normal file
@ -0,0 +1,138 @@
|
||||
{{ header }}
|
||||
<div id="product-search" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<div class="row">
|
||||
<div class="col"><label for="input-search" class="col-form-label">{{ entry_search }}</label></div>
|
||||
</div>
|
||||
<div class="row row-cols-1 row-cols-md-2">
|
||||
<div class="col">
|
||||
<input type="text" name="search" value="{{ search }}" placeholder="{{ text_keyword }}" id="input-search" class="form-control mb-1"/>
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="description" value="1" id="input-description" class="form-check-input"{% if description %} checked{% endif %}/> <label for="input-description" class="form-check-label">{{ entry_description }}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<select name="category_id" id="input-category" class="form-select mb-1">
|
||||
<option value="0">{{ text_category }}</option>
|
||||
{% for category_1 in categories %}
|
||||
<option value="{{ category_1.category_id }}"{% if category_1.category_id == category_id %} selected{% endif %}>{{ category_1.name }}</option>
|
||||
{% for category_2 in category_1.children %}
|
||||
<option value="{{ category_2.category_id }}"{% if category_2.category_id == category_id %} selected{% endif %}> {{ category_2.name }}</option>
|
||||
{% for category_3 in category_2.children %}
|
||||
<option value="{{ category_3.category_id }}"{% if category_3.category_id == category_id %} selected{% endif %}> {{ category_3.name }}</option>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="sub_category" value="1" id="input-sub-category" class="form-check-input"{% if sub_category %} checked{% endif %}/> <label for="input-sub-category" class="form-check-label">{{ text_sub_category }}</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col text-end">
|
||||
<button type="button" id="button-search" class="btn btn-primary">{{ button_search }}</button>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<h2>{{ text_search }}</h2>
|
||||
{% if products %}
|
||||
<div id="display-control" class="row">
|
||||
<div class="col-md-3">
|
||||
<div class="mb-3">
|
||||
<a href="{{ compare }}" id="compare-total" class="btn btn-primary d-block"><i class="fa-solid fa-arrow-right-arrow-left"></i> <span class="d-inline d-md-none d-lg-inline">{{ text_compare }}</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-1 d-none d-md-block">
|
||||
<div class="btn-group">
|
||||
<button type="button" id="button-list" class="btn btn-light" data-bs-toggle="tooltip" title="{{ button_list }}"><i class="fa-solid fa-table-list"></i></button>
|
||||
<button type="button" id="button-grid" class="btn btn-light" data-bs-toggle="tooltip" title="{{ button_grid }}"><i class="fa-solid fa-table-cells"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 offset-md-1 col-6">
|
||||
<div class="input-group mb-3">
|
||||
<label for="input-sort" class="input-group-text">{{ text_sort }}</label>
|
||||
<select id="input-sort" class="form-select" onchange="location = this.value;">
|
||||
{% for sorts in sorts %}
|
||||
<option value="{{ sorts.href }}"{% if sorts.value == '%s-%s'|format(sort, order) %} selected{% endif %}>{{ sorts.text }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 col-6">
|
||||
<div class="input-group mb-3">
|
||||
<label for="input-limit" class="input-group-text">{{ text_limit }}</label>
|
||||
<select id="input-limit" class="form-select" onchange="location = this.value;">
|
||||
{% for limits in limits %}
|
||||
<option value="{{ limits.href }}"{% if limits.value == limit %} selected{% endif %}>{{ limits.text }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="product-list" class="row row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-4">
|
||||
{% for product in products %}
|
||||
<div class="col mb-3">{{ product }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
{% endif %}
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
<script type="text/javascript"><!--
|
||||
$('#button-search').bind('click', function() {
|
||||
url = 'index.php?route=product/search&language={{ language }}';
|
||||
|
||||
var search = $('#input-search').val();
|
||||
|
||||
if (search) {
|
||||
url += '&search=' + encodeURIComponent(search);
|
||||
}
|
||||
|
||||
var category_id = $('#input-category').prop('value');
|
||||
|
||||
if (category_id > 0) {
|
||||
url += '&category_id=' + encodeURIComponent(category_id);
|
||||
}
|
||||
|
||||
var sub_category = $('#input-sub-category:checked').prop('value');
|
||||
|
||||
if (sub_category) {
|
||||
url += '&sub_category=1';
|
||||
}
|
||||
|
||||
var filter_description = $('#input-description:checked').prop('value');
|
||||
|
||||
if (filter_description) {
|
||||
url += '&description=1';
|
||||
}
|
||||
|
||||
location = url;
|
||||
});
|
||||
|
||||
$('#input-search').bind('keydown', function(e) {
|
||||
if (e.keyCode == 13) {
|
||||
$('#button-search').trigger('click');
|
||||
}
|
||||
});
|
||||
|
||||
$('#input-category').on('change', function() {
|
||||
$('#input-sub-category').prop('disabled', (this.value == '0' ? true : false));
|
||||
});
|
||||
|
||||
$('#input-category').trigger('change');
|
||||
//--></script>
|
||||
{{ footer }}
|
60
catalog/view/template/product/special.twig
Normal file
60
catalog/view/template/product/special.twig
Normal file
@ -0,0 +1,60 @@
|
||||
{{ header }}
|
||||
<div id="product-search" class="container">
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li class="breadcrumb-item"><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="row">{{ column_left }}
|
||||
<div id="content" class="col">{{ content_top }}
|
||||
<h2>{{ heading_title }}</h2>
|
||||
{% if products %}
|
||||
<div id="display-control" class="row">
|
||||
<div class="col-md-3">
|
||||
<div class="mb-3">
|
||||
<a href="{{ compare }}" id="compare-total" class="btn btn-primary d-block"><i class="fa-solid fa-arrow-right-arrow-left"></i> <span class="d-inline d-md-none d-lg-inline">{{ text_compare }}</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-1 d-none d-md-block">
|
||||
<div class="btn-group">
|
||||
<button type="button" id="button-list" class="btn btn-light" data-bs-toggle="tooltip" title="{{ button_list }}"><i class="fa-solid fa-table-list"></i></button>
|
||||
<button type="button" id="button-grid" class="btn btn-light" data-bs-toggle="tooltip" title="{{ button_grid }}"><i class="fa-solid fa-table-cells"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 offset-md-1 col-6">
|
||||
<div class="input-group mb-3">
|
||||
<label for="input-sort" class="input-group-text">{{ text_sort }}</label> <select id="input-sort" class="form-select" onchange="location = this.value;">
|
||||
{% for sorts in sorts %}
|
||||
<option value="{{ sorts.href }}"{% if sorts.value == '%s-%s'|format(sort, order) %} selected{% endif %}>{{ sorts.text }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 col-6">
|
||||
<div class="input-group mb-3">
|
||||
<label for="input-limit" class="input-group-text">{{ text_limit }}</label>
|
||||
<select id="input-limit" class="form-select" onchange="location = this.value;">
|
||||
{% for limits in limits %}
|
||||
<option value="{{ limits.href }}"{% if limits.value == limit %} selected{% endif %}>{{ limits.text }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="product-list" class="row row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-4">
|
||||
{% for product in products %}
|
||||
<div class="col mb-3">{{ product }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6 text-start">{{ pagination }}</div>
|
||||
<div class="col-sm-6 text-end">{{ results }}</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{{ text_no_results }}</p>
|
||||
<div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
|
||||
{% endif %}
|
||||
{{ content_bottom }}</div>
|
||||
{{ column_right }}</div>
|
||||
</div>
|
||||
{{ footer }}
|
40
catalog/view/template/product/thumb.twig
Normal file
40
catalog/view/template/product/thumb.twig
Normal file
@ -0,0 +1,40 @@
|
||||
<div class="product-thumb">
|
||||
<div class="image"><a href="{{ href }}"><img src="{{ thumb }}" alt="{{ name }}" title="{{ name }}" class="img-fluid"/></a></div>
|
||||
<div class="content">
|
||||
<div class="description">
|
||||
<h4><a href="{{ href }}">{{ name }}</a></h4>
|
||||
<p>{{ description }}</p>
|
||||
{% if price %}
|
||||
<div class="price">
|
||||
{% if not special %}
|
||||
<span class="price-new">{{ price }}</span>
|
||||
{% else %}
|
||||
<span class="price-new">{{ special }}</span> <span class="price-old">{{ price }}</span>
|
||||
{% endif %}
|
||||
{% if tax %}
|
||||
<span class="price-tax">{{ text_tax }} {{ tax }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if review_status and rating %}
|
||||
<div class="rating">
|
||||
{% for i in 1..5 %}
|
||||
{% if rating < i %}
|
||||
<span class="fa-stack"><i class="fa-regular fa-star fa-stack-1x"></i></span>
|
||||
{% else %}
|
||||
<span class="fa-stack"><i class="fa-solid fa-star fa-stack-1x"></i><i class="fa-regular fa-star fa-stack-1x"></i></span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<form method="post" data-oc-toggle="ajax" data-oc-load="{{ cart }}" data-oc-target="#header-cart">
|
||||
<div class="button-group">
|
||||
<button type="submit" formaction="{{ add_to_cart }}" data-bs-toggle="tooltip" title="{{ button_cart }}"><i class="fa-solid fa-shopping-cart"></i></button>
|
||||
<button type="submit" formaction="{{ add_to_wishlist }}" data-bs-toggle="tooltip" title="{{ button_wishlist }}"><i class="fa-solid fa-heart"></i></button>
|
||||
<button type="submit" formaction="{{ add_to_compare }}" data-bs-toggle="tooltip" title="{{ button_compare }}"><i class="fa-solid fa-arrow-right-arrow-left"></i></button>
|
||||
</div>
|
||||
<input type="hidden" name="product_id" value="{{ product_id }}"/> <input type="hidden" name="quantity" value="{{ minimum }}"/>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
Reference in New Issue
Block a user