setting.twig (12495B)
1 {{ header }}{{ column_left }} 2 <div id="content"> 3 <div class="page-header"> 4 <div class="container-fluid"> 5 <div class="form-inline pull-right"> 6 {% if (stores|length > 1) %} 7 <select class="form-control" onChange="location='{{ href_setting }}&store_id='+$(this).val()"> 8 {% for store in stores %} 9 {% if (store['store_id'] == store_id) %} 10 <option value="{{ store['store_id'] }}" selected="selected">{{ store['name'] }}</option> 11 {% else %} 12 <option value="{{ store['store_id'] }}">{{ store['name'] }}</option> 13 {% endif %} 14 {% endfor %} 15 </select> 16 {% endif %} 17 <button id="button_save_and_stay" data-toggle="tooltip" title="{{ button_save_and_stay }}" class="btn btn-success"><i class="fa fa-save"></i><i class="fa fa-refresh rotate hide"></i></button> 18 <button id="button_save_and_exit" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i><i class="fa fa-refresh rotate hide"></i></button> 19 <a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a> 20 </div> 21 <h1>{{ heading_title }} {{ version }}</h1> 22 <ul class="breadcrumb"> 23 {% for breadcrumb in breadcrumbs %} 24 <li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li> 25 {% endfor %} 26 </ul> 27 </div> 28 </div> 29 <div class="container-fluid"> 30 {% if error['warning'] %} 31 <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i><button type="button" class="close" data-dismiss="alert">×</button> {{ error['warning'] }}</div> 32 {% endif %} 33 {% if success %} 34 <div class="alert alert-success"><i class="fa fa-exclamation-circle"></i><button type="button" class="close" data-dismiss="alert">×</button> {{ success }}</div> 35 {% endif %} 36 <div class="panel panel-default panel-resizable"> 37 <div class="panel-heading"> 38 <h3 class="panel-title"><i class="fa fa-pencil"></i> {{ text_edit }}</h3> 39 </div> 40 <div class="panel-body"> 41 <ul class="nav nav-tabs"> 42 <li> 43 <a href="{{ href_dashboard }}"><span class="fa fa-home"></span> {{ text_dashboard }}</a> 44 </li> 45 <li class="active"> 46 <a href="{{ href_setting }}"><span class="fa fa-cog"></span> {{ text_settings }}</a> 47 </li> 48 <li> 49 <a href="{{ href_multi_store_field }}"><span class="fa fa-list-alt"></span> {{ text_multi_store_fields }}</a> 50 </li> 51 <li> 52 <a href="{{ href_target_keyword }}"><span class="fa fa-key"></span> {{ text_target_keywords }}</a> 53 </li> 54 <li> 55 <a href="{{ href_export_import }}"><span class="fa fa-exchange"></span> {{ text_export_import }}</a> 56 </li> 57 <li> 58 <a href="{{ href_instruction }}"><span class="fa fa-graduation-cap"></span> {{ text_instructions }}</a> 59 </li> 60 </ul> 61 62 <form action="{{ action }}" method="post" enctype="multipart/form-data" id="form" class="form-horizontal"> 63 <div class="flex row"> 64 <div class="flex col-sm-3"> 65 <ul class="nav nav-pills nav-stacked"> 66 <li class="active"> 67 <a href="#vtab_basic_setting" data-toggle="tab"><span class="fa fa-cog"></span> {{ text_basic_settings }}</a> 68 </li> 69 <li> 70 <a href="#vtab_htaccess" data-toggle="tab"><span class="fa fa-file-text-o"></span> {{ text_htaccess }}</a> 71 </li> 72 <li> 73 <a href="#vtab_robots" data-toggle="tab"><span class="fa fa-file-code-o"></span> {{ text_robots }}</a> 74 </li> 75 </ul> 76 </div> 77 <div class="col-sm-9"> 78 <div class="tab-content"> 79 <div id="vtab_basic_setting" class="tab-pane active"> 80 <div class="page-header"> 81 <h3><strong>{{ text_basic_settings }}</strong></h3> 82 </div> 83 <div class="form-group"> 84 <label class="col-sm-3 control-label" for="input-status">{{ entry_status }}</label> 85 <div class="col-sm-9"> 86 <input type="hidden" name="module_{{ codename }}_status" value="0" /> 87 <input type="checkbox" name="module_{{ codename }}_status" value="1" class="switch" data-label-text="{{ text_enabled }}" {% if status %}checked="checked"{% endif %} /> 88 </div> 89 </div> 90 <div class="form-group"> 91 <label class="col-sm-3 control-label" for="input-list-limit">{{ entry_list_limit }}</label> 92 <div class="col-sm-9"> 93 <input type="text" name="module_{{ codename }}_setting[list_limit]" value="{{ setting['list_limit'] }}" class="form-control"/> 94 </div> 95 </div> 96 <div class="form-group"> 97 <label class="col-sm-3 control-label" for="input-uninstall">{{ entry_uninstall }}</label> 98 <div class="col-sm-9"> 99 <a action="{{ uninstall }}" id="button_uninstall" class="btn btn-danger"><i class="fa fa-trash"></i><i class="fa fa-refresh rotate hide"></i> {{ button_uninstall }}</a> 100 </div> 101 </div> 102 </div> 103 <div id="vtab_htaccess" class="tab-pane"> 104 <div class="page-header"> 105 <h3><strong>{{ text_htaccess }}</strong> <span class="info-window-item" data-href="https://opencartseomodule.com/opencart-htaccess-editor"><i class="fa fa-question"></i></span></h3> 106 </div> 107 <div class="form-group"> 108 <label class="col-sm-3 control-label" for="input-status">{{ entry_status }}</label> 109 <div class="col-sm-9"> 110 <input type="hidden" name="htaccess[status]" value="0" /> 111 <input type="checkbox" name="htaccess[status]" value="1" class="switch" data-label-text="{{ text_enabled }}" {% if htaccess['status'] %}checked="checked"{% endif %} /> 112 </div> 113 </div> 114 <div class="form-group"> 115 <div class="col-sm-9 col-sm-offset-3"> 116 <p><a href="{{ store_setting }}" target="_blank" class="btn btn-primary"><i class="fa fa-cog fw"></i> {{ button_view_store_setting }}</a></p> 117 <div class="bs-callout bs-callout-info">{{ help_htaccess_setting }}</div> 118 </div> 119 </div> 120 <div class="form-group"> 121 <label class="col-sm-3 control-label" for="input-text">{{ entry_text }}</label> 122 <div class="col-sm-9"> 123 <p><textarea name="htaccess[text]" class="form-control" rows="20">{{ htaccess['text'] }}</textarea></p> 124 <div class="bs-callout bs-callout-info">{{ help_htaccess_subfolder }}</div> 125 </div> 126 </div> 127 </div> 128 <div id="vtab_robots" class="tab-pane"> 129 <div class="page-header"> 130 <h3><strong>{{ text_robots }}</strong> <span class="info-window-item" data-href="https://opencartseomodule.com/robots-txt-editor"><i class="fa fa-question"></i></span></h3> 131 </div> 132 <div class="form-group"> 133 <label class="col-sm-3 control-label" for="input-status">{{ entry_status }}</label> 134 <div class="col-sm-9"> 135 <input type="hidden" name="robots[status]" value="0" /> 136 <input type="checkbox" name="robots[status]" value="1" class="switch" data-label-text="{{ text_enabled }}" {% if robots['status'] %}checked="checked"{% endif %} /> 137 </div> 138 </div> 139 <div class="form-group"> 140 <label class="col-sm-3 control-label" for="input-text">{{ entry_text }}</label> 141 <div class="col-sm-9"> 142 <p><textarea name="robots[text]" class="form-control" rows="20">{{ robots['text'] }}</textarea></p> 143 <div class="bs-callout bs-callout-info">{{ help_robots }}</div> 144 </div> 145 </div> 146 </div> 147 </div> 148 </div> 149 </div> 150 </form> 151 <div class="p-lg text-center">{{ text_powered_by }}</div> 152 </div> 153 </div> 154 <div class="info-window"> 155 <div class="info-window-wrap"> 156 <div class="info-window-block"> 157 <div class="info-window-close"><i class="fa fa-close"></i></div> 158 <div class="info-window-description"></div> 159 </div> 160 </div> 161 </div> 162 <br class="clear"/> 163 </div> 164 </div> 165 <script type="text/javascript"> 166 167 var info_window = { 168 'item' : new Array(), 169 'current_url' : '' 170 } 171 172 $.each($('.info-window-item'), function(key, value) { 173 var url = $(this).attr('data-href'); 174 175 if (url) { 176 $.getJSON(url + '?format=json&callback=?', function(data) { 177 info_window.item[url] = data['description']; 178 }); 179 } 180 }); 181 182 $('.info-window-item').on('click', function() { 183 var url = $(this).attr('data-href'); 184 185 if (url == info_window.current_url) { 186 info_window.current_url = ''; 187 $('.info-window').removeClass('resized'); 188 $('.panel-resizable').removeClass('resized'); 189 } else { 190 info_window.current_url = url; 191 $('.info-window .info-window-description').html(info_window.item[url]); 192 $('.panel-resizable').addClass('resized'); 193 $('.info-window').addClass('resized'); 194 } 195 }); 196 197 $('.info-window .info-window-close').on('click', function() { 198 info_window.current_url = ''; 199 $('.info-window').removeClass('resized'); 200 $('.panel-resizable').removeClass('resized'); 201 }); 202 203 $('.switch').bootstrapSwitch({ 204 'onColor': 'success', 205 'labelWidth': '50', 206 'onText': '{{ text_yes }}', 207 'offText': '{{ text_no }}' 208 }); 209 210 function showAlert(json) { 211 $('.alert, .text-danger').remove(); 212 $('.form-group').removeClass('has-error'); 213 214 if (json['error']) { 215 if (json['error']['warning']) { 216 $('#content > .container-fluid').prepend('<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i><button type="button" class="close" data-dismiss="alert">×</button> ' + json['error']['warning'] + '</div>'); 217 } 218 219 for (i in json['error']) { 220 var element = $('#input_' + i); 221 222 if (element.parent().hasClass('input-group')) { 223 $(element).parent().after('<div class="text-danger">' + json['error'][i] + '</div>'); 224 } else { 225 $(element).after('<div class="text-danger">' + json['error'][i] + '</div>'); 226 } 227 } 228 229 $('.text-danger').parents('.form-group').addClass('has-error'); 230 } 231 232 if (json['success']) { 233 $('#content > .container-fluid').prepend('<div class="alert alert-success"><i class="fa fa-check-circle"></i><button type="button" class="close" data-dismiss="alert">×</button> ' + json['success'] + '</div>'); 234 } 235 } 236 </script> 237 <script type="text/javascript"> 238 239 $('body').on('click', '#button_uninstall', function(event) { 240 if (confirm("{{ text_uninstall_confirm }}")) { 241 $.ajax({ 242 type: 'post', 243 url: $(this).attr('action'), 244 data: '', 245 dataType: 'json', 246 beforeSend: function() { 247 $('#button_uninstall .fa-refresh').removeClass('hide'); 248 $('#button_uninstall .fa-trash').addClass('hide'); 249 }, 250 complete: function() { 251 $('#button_uninstall .fa-refresh').addClass('hide'); 252 $('#button_uninstall .fa-trash').removeClass('hide'); 253 }, 254 success: function(json) { 255 showAlert(json); 256 257 if (json['success']) { 258 location = '{{ module_link|replace({"&" : "&"}) }}'; 259 } 260 }, 261 error: function(xhr, ajaxOptions, thrownError) { 262 console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 263 } 264 }); 265 } 266 }); 267 268 $('body').on('click', '#button_save_and_stay', function() { 269 $.ajax({ 270 type: 'post', 271 url: $('#form').attr('action'), 272 data: $('#form').serialize(), 273 dataType: 'json', 274 beforeSend: function() { 275 $('#button_save_and_stay .fa-refresh').removeClass('hide'); 276 $('#button_save_and_stay .fa-save').addClass('hide'); 277 }, 278 complete: function() { 279 $('#button_save_and_stay .fa-refresh').addClass('hide'); 280 $('#button_save_and_stay .fa-save').removeClass('hide'); 281 }, 282 success: function(json) { 283 showAlert(json); 284 }, 285 error: function(xhr, ajaxOptions, thrownError) { 286 console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 287 } 288 }); 289 }); 290 291 $('body').on('click', '#button_save_and_exit', function() { 292 $.ajax({ 293 type: 'post', 294 url: $('#form').attr('action'), 295 data: $('#form').serialize(), 296 dataType: 'json', 297 beforeSend: function() { 298 $('#button_save_and_exit .fa-refresh').removeClass('hide'); 299 $('#button_save_and_exit .fa-save').addClass('hide'); 300 }, 301 complete: function() { 302 $('#button_save_and_exit .fa-refresh').addClass('hide'); 303 $('#button_save_and_exit .fa-save').removeClass('hide'); 304 }, 305 success: function(json) { 306 showAlert(json); 307 308 if (json['success']) { 309 location = '{{ cancel|replace({"&" : "&"}) }}'; 310 } 311 }, 312 error: function(xhr, ajaxOptions, thrownError) { 313 console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 314 } 315 }); 316 }); 317 318 </script> 319 {{ footer }}