Add Creative Elements templates and update index files

- Introduced new templates for catalog, checkout, contact, and error pages.
- Implemented caching headers and redirection in index.php files across various directories.
- Enhanced product and layout templates for better integration with Creative Elements.
- Added backoffice header styles and scripts for improved UI/UX in the admin panel.
This commit is contained in:
2025-07-01 00:56:07 +02:00
parent f00cd5b992
commit 6cc26c0ed2
642 changed files with 213294 additions and 12 deletions

View File

@@ -0,0 +1,163 @@
{**
* Creative Elements - live Theme & Page Builder
*
* @author WebshopWorks
* @copyright 2019-2022 WebshopWorks.com
* @license One domain support license
*}
{capture ce_alert}<div class="alert alert-%s">%s</div>{/capture}
{capture ce_undefined_position}
{ce__('Undefined Position!')}
<a href="http://docs.webshopworks.com/creative-elements/79-troubleshooting/337-undefined-position" class="ce-read-more">{ce__('Learn More')}</a>
{/capture}
{capture ce_action_link}<a href="%s" target="%s"><i class="icon-%s"></i> %s</a>{/capture}
{capture ce_modal_license_status}{ce__('License Status:')} <span class="text-success">{ce__('Active')}</span>{/capture}
{capture ce_modal_license}
<form name="activate" action="%s" method="post">
<div class="modal-body">%s</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary"><i class="icon-file-text"></i>&nbsp; %s</button>
</div>
</form>
{/capture}
{capture ce_modal_replace_url}
<form name="replace_url" class="form-horizontal">
<div class="modal-body">
<input type="hidden" name="ajax" value="1">
<input type="hidden" name="action" value="replace_url">
<div class="alert alert-warning">%s</div>
<div class="form-group">
<div class="col-sm-6">
<input type="url" placeholder="%s" class="form-control" name="from" required>
</div>
<div class="col-sm-6">
<input type="url" placeholder="%s" class="form-control" name="to" required>
</div>
</div>
<div class="help-block">%s</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary"><i class="icon-refresh"></i>&nbsp; %s</button>
</div>
</form>
{/capture}
{function ce_preview_breadcrumb links=[]}
{$last = array_pop($links)}
{foreach $links as $link}
<a>{$link['title']|cleanHtml}</a><span class="navigation-pipe">&gt;</span>
{/foreach}
{$last['title']|cleanHtml}
{/function}
{capture ce_inline_script}
<script data-cfasync="false">
%s
</script>
{/capture}
{function ce_add_custom_font}
<div class="elementor-metabox-content">
<div class="elementor-field font_face elementor-field-repeater">
<script type="text/template" id="tmpl-elementor-add-font">
<div class="repeater-block block-visible">
<span class="repeater-title ce-hidden" data-default="{ce__('Settings')}" data-selector=".font_weight">{ce__('Settings')}</span>
<span class="elementor-repeater-tool-btn close-repeater-row" title="{ce__('Close')}">
<i aria-hidden="true" class="icon-times"></i> {ce__('Close')}
</span>
<span class="elementor-repeater-tool-btn toggle-repeater-row" title="{ce__('Edit')}">
<i aria-hidden="true" class="icon-edit"></i> {ce__('Edit')}
</span>
<span class="elementor-repeater-tool-btn remove-repeater-row" data-confirm="{ce__('Are you sure?')}" title="{ce__('Delete')}">
<i aria-hidden="true" class="icon-trash"></i> {ce__('Delete')}
</span>
<div class="repeater-content form-table">
<div class="repeater-content-top">
<div class="elementor-field font_face elementor-field-select">
<p class="elementor-field-label">
<label for="font_face[__counter__][font_weight]">{ce__('Weight')}:</label>
</p>
<select class="font_weight" id="font_face[__counter__][font_weight]" name="font_face[__counter__][font_weight]">
<option value="normal">{ce__('Normal')}</option>
<option value="bold">{ce__('Bold')}</option>
<option value="100">100</option>
<option value="200">200</option>
<option value="300">300</option>
<option value="400">400</option>
<option value="500">500</option>
<option value="600">600</option>
<option value="700">700</option>
<option value="800">800</option>
<option value="900">900</option>
</select>
</div>
<div class="elementor-field font_face elementor-field-select">
<p class="elementor-field-label">
<label for="font_face[__counter__][font_style]">{ce__('Style')}:</label>
</p>
<select class="font_style" id="font_face[__counter__][font_style]" name="font_face[__counter__][font_style]">
<option value="normal">{ce__('Normal')}</option>
<option value="italic">{ce__('Italic')}</option>
<option value="oblique">{ce__('Oblique')}</option>
</select>
</div>
<div class="inline-preview">Creative Elements Module is Making The Web Beautiful!</div>
<div class="elementor-field font_face elementor-field-toolbar">
<span class="elementor-repeater-tool-btn close-repeater-row" title="{ce__('Close')}">
<i aria-hidden="true" class="icon-times"></i> {ce__('Close')}
</span>
<span class="elementor-repeater-tool-btn toggle-repeater-row" title="{ce__('Edit')}">
<i aria-hidden="true" class="icon-edit"></i> {ce__('Edit')}
</span>
<span class="elementor-repeater-tool-btn remove-repeater-row" data-confirm="Are you sure?" title="{ce__('Delete')}">
<i aria-hidden="true" class="icon-trash"></i> {ce__('Delete')}
</span>
</div>
</div>
<div class="repeater-content-bottom">
<div class="elementor-field font_face elementor-field-file">
<p class="elementor-field-label">
<label for="font_face[__counter__][woff]file">{sprintf(ce__('%s File'), 'WOFF')}</label>
</p>
<input class="hidden" name="font_face[__counter__][woff][file]" type="file" accept=".woff,font/woff">
<input class="elementor-field-input" name="font_face[__counter__][woff][url]" placeholder="{ce__('The Web Open Font Format, Used by Modern Browsers')}" type="text">
<input class="elementor-button elementor-upload-btn" data-ext="woff" data-preview_anchor="none" data-remove_text="{ce__('Delete')}" data-upload_text="{ce__('Upload')}" id="font_face[__counter__][woff]" name="font_face[__counter__][woff]" type="button">
</div>
<div class="elementor-field font_face elementor-field-file">
<p class="elementor-field-label">
<label for="font_face[__counter__][woff2]file">{sprintf(ce__('%s File'), 'WOFF2')}</label>
</p>
<input class="hidden" name="font_face[__counter__][woff2][file]" type="file" accept=".woff2,font/woff2">
<input class="elementor-field-input" name="font_face[__counter__][woff2][url]" placeholder="{ce__('The Web Open Font Format 2, Used by Super Modern Browsers')}" type="text">
<input class="elementor-button elementor-upload-btn" data-ext="woff2" data-preview_anchor="none" data-remove_text="{ce__('Delete')}" data-upload_text="{ce__('Upload')}" id="font_face[__counter__][woff2]" name="font_face[__counter__][woff2]" type="button">
</div>
<div class="elementor-field font_face elementor-field-file">
<p class="elementor-field-label">
<label for="font_face[__counter__][ttf]file">{sprintf(ce__('%s File'), 'TTF')}</label>
</p>
<input class="hidden" name="font_face[__counter__][ttf][file]" type="file" accept=".ttf,font/ttf">
<input class="elementor-field-input" name="font_face[__counter__][ttf][url]" placeholder="{ce__('TrueType Fonts, Used for better supporting Safari, Android, iOS')}" type="text">
<input class="elementor-button elementor-upload-btn" data-ext="ttf" data-preview_anchor="none" data-remove_text="{ce__('Delete')}" data-upload_text="{ce__('Upload')}" id="font_face[__counter__][ttf]" name="font_face[__counter__][ttf]" type="button">
</div>
<div class="elementor-field font_face elementor-field-file">
<p class="elementor-field-label">
<label for="font_face[__counter__][otf]file">{sprintf(ce__('%s File'), 'OTF')}</label>
</p>
<input class="hidden" name="font_face[__counter__][otf][file]" type="file" accept=".otf,font/otf">
<input class="elementor-field-input" name="font_face[__counter__][otf][url]" placeholder="{ce__('OpenType Fonts, Used for better supporting Safari, Android, iOS')}" type="text">
<input class="elementor-button elementor-upload-btn" data-ext="otf" data-preview_anchor="none" data-remove_text="{ce__('Delete')}" data-upload_text="{ce__('Upload')}" id="font_face[__counter__][otf]" name="font_face[__counter__][otf]" type="button">
</div>
</div>
</div>
</div>
</script>
<input type="button" class="elementor-button add-repeater-row" value="{ce__('Add Font Variation')}" data-template-id="tmpl-elementor-add-font">
</div>
</div>
{/function}

View File

@@ -0,0 +1,65 @@
{**
* Creative Elements - live Theme & Page Builder
*
* @author WebshopWorks
* @copyright 2019-2022 WebshopWorks.com
* @license One domain support license
*}
{extends file="helpers/form/form.tpl"}
{block name="input_row"}
{$smarty.block.parent}
{if 'hook' == $input.name}
<script>
var $hook = $('#hook').attr('type', 'hidden');
var $select = $('<select name="hook">').html(
'<option value="displayHome">displayHome</option>' +
'<option value="displayTop">displayTop</option>' +
'<option value="displayBanner">displayBanner</option>' +
'<option value="displayNav1">displayNav1</option>' +
'<option value="displayNav2">displayNav2</option>' +
'<option value="displayNavFullWidth">displayNavFullWidth</option>' +
'<option value="displayTopColumn">displayTopColumn</option>' +
'<option value="displayLeftColumn">displayLeftColumn</option>' +
'<option value="displayRightColumn">displayRightColumn</option>' +
'<option value="displayFooterBefore">displayFooterBefore</option>' +
'<option value="displayFooter">displayFooter</option>' +
'<option value="displayFooterAfter">displayFooterAfter</option>' +
'<option value="displayAfterBodyOpeningTag">displayAfterBodyOpeningTag</option>' +
'<option value="displayShoppingCart">displayShoppingCart</option>' +
'<option value="displayShoppingCartFooter">displayShoppingCartFooter</option>' +
'<option value="displayFooterProduct">displayFooterProduct</option>' +
'<option value="displayNotFound">displayNotFound</option>'
).insertAfter($hook);
if (!$select.find('[value="'+$hook.val()+'"]').length) {
$('<option>', {
value: $hook.val(),
html: $hook.val()
}).appendTo($select);
}
$select.select2({
tags: true,
createTag: function(params) {
return {
id: params.term,
text: params.term,
newOption: true
};
},
templateResult: function(data) {
var $result = $('<span>').text(data.text);
if (data.newOption) {
$result.append(" <i>(custom)</i>");
}
return $result;
}
}).val($hook.val())
.trigger('change.select2')
;
</script>
{/if}
{/block}

View File

@@ -0,0 +1,8 @@
<?php
header('Expires: Thu, 28 Feb 2019 00:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../../../');
die;

View File

@@ -0,0 +1,8 @@
<?php
header('Expires: Thu, 28 Feb 2019 00:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../../');
die;

View File

@@ -0,0 +1,8 @@
<?php
header('Expires: Thu, 28 Feb 2019 00:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../');
die;

View File

@@ -0,0 +1,8 @@
<?php
header('Expires: Thu, 28 Feb 2019 00:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../../');
die;

View File

@@ -0,0 +1,8 @@
<?php
header('Expires: Thu, 28 Feb 2019 00:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../../../');
die;

View File

@@ -0,0 +1,20 @@
{**
* Creative Elements - live Theme & Page Builder
*
* @author WebshopWorks
* @copyright 2019-2022 WebshopWorks.com
* @license One domain support license
*}
{extends file="helpers/list/list_content.tpl"}
{block name="td_content"}
{if 'preview' === $key}
<style>{str_replace('{{BASE}}', $smarty.const.__PS_BASE_URI__, $tr.$key)}</style>
<span style="font-family: '{$tr.$key->family|escape:'html':'UTF-8'}'; font-size: 16px;">
Creative Elements Module Is Making The Web Beautiful!
</span>
{else}
{$smarty.block.parent}
{/if}
{/block}

View File

@@ -0,0 +1,8 @@
<?php
header('Expires: Thu, 28 Feb 2019 00:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../');
die;

View File

@@ -0,0 +1,8 @@
<?php
header('Expires: Thu, 28 Feb 2019 00:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../../');
die;

View File

@@ -0,0 +1,8 @@
<?php
header('Expires: Thu, 28 Feb 2019 00:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../../../');
die;

View File

@@ -0,0 +1,27 @@
{**
* Creative Elements - live Theme & Page Builder
*
* @author WebshopWorks
* @copyright 2019-2022 WebshopWorks.com
* @license One domain support license
*}
{extends file="helpers/options/options.tpl"}
{block name="input" append}
{if $field['type'] == 'multiselect'}
<div class="col-lg-9">
{if $field.list}
{$json = Configuration::get($key)}
{if $json}{$selected = json_decode($json)}{else}{$selected = []}{/if}
<select multiple class="form-control fixed-width-xxl {if isset($field.class)}{$field.class}{/if}" name="{$key}[]"{if isset($field.js)} onchange="{$field.js}"{/if} id="{$key}" {if isset($field.size)} size="{$field.size}"{/if}>
{foreach $field.list as $option}
<option value="{$option[$field['identifier']]}"{if in_array($option[$field.identifier], $selected)} selected="selected"{/if}>{$option.name}</option>
{/foreach}
</select>
{elseif isset($input.empty_message)}
{$input.empty_message}
{/if}
</div>
{/if}
{/block}

View File

@@ -0,0 +1,8 @@
<?php
header('Expires: Thu, 28 Feb 2019 00:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../');
die;

View File

@@ -0,0 +1,8 @@
<?php
header('Expires: Thu, 28 Feb 2019 00:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../');
die;