Skip to content

Instantly share code, notes, and snippets.

@PechenkiUA
Created December 5, 2023 18:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PechenkiUA/b667cfdd80d7c6a51463c111e002a07c to your computer and use it in GitHub Desktop.
Save PechenkiUA/b667cfdd80d7c6a51463c111e002a07c to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Coder hide fields settings</name>
<code>Coder_hide_fields_settings</code>
<version>0.1</version>
<author>coder</author>
<link>https://coder.org.ua</link>
<file path="admin/controller/setting/setting.php">
<operation>
<search trim="true"><![CDATA[
$this->model_setting_setting->editSetting('config', $this->request->post);
]]></search>
<add position="after"><![CDATA[
if ($this->request->post && isset($this->request->post['settingshidden_hideFields'])){
if (isset($this->request->post['settingshidden_hideTabs'])) {
$this->request->post['settingshidden_hideTabs'] = json_encode($this->request->post['settingshidden_hideTabs']);
}
if (isset($this->request->post['settingshidden_hideFields'])) {
$this->request->post['settingshidden_hideFields'] = json_encode($this->request->post['settingshidden_hideFields']);
}
if (isset($this->request->post['settingshidden_hideFieldsSet'])) {
$this->request->post['settingshidden_hideFieldsSet'] = json_encode($this->request->post['settingshidden_hideFieldsSet']);
}
$this->model_setting_setting->editSetting('settingshidden', $this->request->post);
}
]]></add>
</operation>
<operation>
<search trim="true"><![CDATA[
$data['breadcrumbs'] = array();
]]></search>
<add><![CDATA[
$data['show_checkbox'] = false;
if(isset($this->request->get['hidden'])){
$data['show_checkbox'] = true;
}
if (!empty($this->config->get('settingshidden_hideFields'))) {
$data['hideFields'] = json_decode($this->config->get('settingshidden_hideFields'),true);
} else {
$data['hideFields'] = [];
}
if (!empty($this->config->get('settingshidden_hideTabs'))) {
$data['hideTabs'] = json_decode($this->config->get('settingshidden_hideTabs'),true);
} else {
$data['hideTabs'] = [];
}
if (!empty($this->config->get('settingshidden_hideFieldsSet'))) {
$data['hideFieldset'] = json_decode($this->config->get('settingshidden_hideFieldsSet'),true);
} else {
$data['hideFieldset'] = [];
}
]]></add>
</operation>
</file>
<file path="admin/view/template/setting/setting.twig">
<operation>
<search><![CDATA[{{ footer }}]]></search>
<add position="before"><![CDATA[
<script>
(function () {
const selectedTab = '{% if hideTabs %}{{ hideTabs|json_encode }}{% else %}[]{% endif %}';
const selectedField = '{% if hideFields %}{{ hideFields|json_encode }}{% else %}[]{% endif %}';
const selectedFieldSet = '{% if hideFields %}{{ hideFieldset|json_encode }}{% else %}[]{% endif %}';
/**
*
*/
function init() {
const doc = document;
let tabs = doc.querySelectorAll('form>.nav-tabs a');
let fieldsGroup = doc.querySelectorAll('.form-group ');
let fieldsSet = doc.querySelectorAll('form fieldset');
if (tabs){
let listTab = [];
tabs.forEach(el=>{
const name = el.getAttribute('href').replace('#tab-','');
listTab.push({'name':name,'text':el.textContent});
el.insertAdjacentHTML('afterbegin',renderСheckbox({'name':name,'type':'settingshidden_hideTabs','selectedField':selectedTab}))
});
}
if (fieldsSet){
fieldsSet.forEach(el=>{
const name = el.querySelector('[name]').getAttribute('name');
el.querySelector('legend').insertAdjacentHTML('afterbegin',renderСheckbox({'name':name,'type':'settingshidden_hideFieldsSet','selectedField':selectedFieldSet}))
});
}
if (fieldsGroup){
fieldsGroup.forEach(el=>{
const name = el.querySelector('[name]').getAttribute('name');
const txt = el.querySelector('label').textContent;
const tabParent = el.closest('.tab-pane')?.id.replace('tab-','');
el.querySelector('label').insertAdjacentHTML('afterbegin',renderСheckbox({'name':name,'type':'settingshidden_hideFields','selectedField':selectedField}))
});
}
}
/**
*
* @param item
*/
function renderСheckbox(item) {
const active = JSON.parse(item.selectedField);
let checked = false;
if (active.includes(item.name)){
checked = 'checked'
}
return `<input onclick="this.checked = !!this.checked; event.stopPropagation();" type="checkbox" ${checked} name="${item.type}[]" value="${item.name}"> `;
}
{% if show_checkbox %}
init();
{% endif %}
})();
</script>
<script>
{% if not show_checkbox %}
let tabs = document.querySelectorAll('form>.nav-tabs a');
let fieldsGroup = document.querySelectorAll('.form-group');
let fieldsGroupSet = document.querySelectorAll('form fieldset');
/*
* Список груп полів які потрібно призовати, беремо значення атрибуту name
*/
//let hideGroup = ['config_compression','config_theme','config_address']; - приклад
let hideGroup = {% if hideFields %}{{ hideFields|json_encode }}{% else %}[]{% endif %};
/*
* список табів які потрібно приховати, назва з href="#tab-local" - вписуємо тільки local
*/
//let hideTab = ['local','seopro','server']; - приклад
let hideTab = {% if hideTabs %}{{ hideTabs|json_encode }}{% else %}[]{% endif %};
let hideGroupSet = {% if hideTabs %}{{ hideFieldset|json_encode }}{% else %}[]{% endif %};
hideTab.map(currentValue=>{
document.querySelector(`[href="#tab-${currentValue}"]`).classList.add('hide')
});
//
hideGroup.map(currentValue=>{
document.querySelector(`[name="${currentValue}"]`)?.closest('.form-group').classList.add('hide')
});
hideGroupSet.map(currentValue=>{
document.querySelector(`[name="${currentValue}"]`)?.closest('fieldset').classList.add('hide')
});
{% endif %}
</script>
]]></add>
</operation>
</file>
</modification>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment