Автозамены регионов

This commit is contained in:
Konstantin
2026-05-30 17:43:37 +03:00
parent df8cf22112
commit 6c8a012702
16 changed files with 317 additions and 18 deletions
@@ -270,6 +270,17 @@ class ControllerLocalisationZone extends Controller {
$data['error_slug'] = '';
}
if (isset($this->error['contact_email'])) {
$data['error_contact_email'] = $this->error['contact_email'];
} else {
$data['error_contact_email'] = '';
}
foreach (array('gorod', 'gorodu', 'gorodom', 'strana', 'stranu', 'stranoi', 'strane', 'strany') as $replacement_field) {
$key = 'replacement_' . $replacement_field;
$data['error_' . $key] = isset($this->error[$key]) ? $this->error[$key] : '';
}
$url = '';
if (isset($this->request->get['sort'])) {
@@ -340,6 +351,42 @@ class ControllerLocalisationZone extends Controller {
$data['slug'] = '';
}
foreach (array('telephone', 'email', 'address', 'geocode', 'fax', 'open', 'comment') as $contact_field) {
$key = 'contact_' . $contact_field;
if (isset($this->request->post[$key])) {
$data[$key] = $this->request->post[$key];
} elseif (!empty($zone_info)) {
$data[$key] = $zone_info[$key];
} else {
$data[$key] = '';
}
}
foreach (array('gorod', 'gorodu', 'gorodom', 'strana', 'stranu', 'stranoi', 'strane', 'strany') as $replacement_field) {
$key = 'replacement_' . $replacement_field;
if (isset($this->request->post[$key])) {
$data[$key] = $this->request->post[$key];
} elseif (!empty($zone_info)) {
$data[$key] = $zone_info[$key];
} else {
$data[$key] = '';
}
}
$data['replacement_fields'] = array();
foreach (array('gorod', 'gorodu', 'gorodom', 'strana', 'stranu', 'stranoi', 'strane', 'strany') as $replacement_field) {
$key = 'replacement_' . $replacement_field;
$data['replacement_fields'][] = array(
'name' => $key,
'label' => $this->language->get('entry_' . $key),
'value' => $data[$key],
'error' => $data['error_' . $key]
);
}
if (isset($this->request->post['country_id'])) {
$data['country_id'] = $this->request->post['country_id'];
} elseif (!empty($zone_info)) {
@@ -378,6 +425,18 @@ class ControllerLocalisationZone extends Controller {
$this->error['slug'] = $this->language->get('error_slug_exists');
}
if ($this->request->post['contact_email'] !== '' && !filter_var($this->request->post['contact_email'], FILTER_VALIDATE_EMAIL)) {
$this->error['contact_email'] = $this->language->get('error_contact_email');
}
foreach (array('gorod', 'gorodu', 'gorodom', 'strana', 'stranu', 'stranoi', 'strane', 'strany') as $replacement_field) {
$key = 'replacement_' . $replacement_field;
if ((utf8_strlen(trim($this->request->post[$key])) < 1) || (utf8_strlen($this->request->post[$key]) > 128)) {
$this->error[$key] = $this->language->get('error_replacement');
}
}
return !$this->error;
}
@@ -10,6 +10,8 @@ $_['text_success'] = 'Настройки успешно изменен
$_['text_list'] = 'Список регионов';
$_['text_add'] = 'Добавить';
$_['text_edit'] = 'Редактирование';
$_['text_contacts'] = 'Контакты региона';
$_['text_replacements'] = 'Автозамены';
// Column
$_['column_name'] = 'Название региона';
@@ -24,12 +26,33 @@ $_['entry_code'] = 'Код региона';
$_['entry_slug'] = 'Slug для URL';
$_['entry_country'] = 'Страна';
$_['entry_status'] = 'Статус';
$_['entry_contact_telephone'] = 'Телефон';
$_['entry_contact_email'] = 'Email';
$_['entry_contact_address'] = 'Адрес';
$_['entry_contact_geocode'] = 'Геокод';
$_['entry_contact_fax'] = 'Факс';
$_['entry_contact_open'] = 'Режим работы';
$_['entry_contact_comment'] = 'Комментарий';
$_['entry_replacement_gorod'] = '{_GOROD_}: в городе';
$_['entry_replacement_gorodu'] = '{_GORODU_}: к городу';
$_['entry_replacement_gorodom'] = '{_GORODOM_}: городом';
$_['entry_replacement_strana'] = '{_STRANA_}: страна';
$_['entry_replacement_stranu'] = '{_STRANU_}: в страну';
$_['entry_replacement_stranoi'] = '{_STRANOI_}: страной';
$_['entry_replacement_strane'] = '{_STRANE_}: в стране';
$_['entry_replacement_strany'] = '{_STRANY_}: из страны';
// Help
$_['help_contacts'] = 'Заполните только отличающиеся контакты. Для пустых полей будут использоваться общие настройки магазина.';
$_['help_replacements'] = 'Название региона используется для тега {_REGION_}. Остальные словоформы обязательны и подставляются в текст витрины автоматически.';
// Error
$_['error_permission'] = 'У вас недостаточно прав для внесения изменений!';
$_['error_name'] = 'Название должно содержать от 3 до 128 символов!';
$_['error_slug'] = 'Slug обязателен для всех регионов, кроме региона по умолчанию, и может содержать только строчные латинские буквы, цифры и дефисы!';
$_['error_slug_exists'] = 'Такой slug уже используется другим регионом!';
$_['error_contact_email'] = 'Введите корректный email или оставьте поле пустым!';
$_['error_replacement'] = 'Словоформа обязательна и не должна быть длиннее 128 символов!';
$_['error_default'] = 'Этот Регион нельзя удалить, поскольку он используется по умолчанию!';
$_['error_store'] = 'Этот Регион нельзя удалить, поскольку он используется в %s магазинах!';
$_['error_address'] = 'Этот Регион нельзя удалить, поскольку он используется в %s адресах!';
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
class ModelLocalisationZone extends Model {
public function addZone($data) {
$this->db->query("INSERT INTO " . DB_PREFIX . "zone SET status = '" . (int)$data['status'] . "', name = '" . $this->db->escape($data['name']) . "', code = '" . $this->db->escape($data['code']) . "', slug = '" . $this->db->escape($data['slug']) . "', country_id = '" . (int)$data['country_id'] . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "zone SET status = '" . (int)$data['status'] . "', name = '" . $this->db->escape($data['name']) . "', code = '" . $this->db->escape($data['code']) . "', slug = '" . $this->db->escape($data['slug']) . "', contact_telephone = '" . $this->db->escape($data['contact_telephone']) . "', contact_email = '" . $this->db->escape($data['contact_email']) . "', contact_address = '" . $this->db->escape($data['contact_address']) . "', contact_geocode = '" . $this->db->escape($data['contact_geocode']) . "', contact_fax = '" . $this->db->escape($data['contact_fax']) . "', contact_open = '" . $this->db->escape($data['contact_open']) . "', contact_comment = '" . $this->db->escape($data['contact_comment']) . "', replacement_gorod = '" . $this->db->escape($data['replacement_gorod']) . "', replacement_gorodu = '" . $this->db->escape($data['replacement_gorodu']) . "', replacement_gorodom = '" . $this->db->escape($data['replacement_gorodom']) . "', replacement_strana = '" . $this->db->escape($data['replacement_strana']) . "', replacement_stranu = '" . $this->db->escape($data['replacement_stranu']) . "', replacement_stranoi = '" . $this->db->escape($data['replacement_stranoi']) . "', replacement_strane = '" . $this->db->escape($data['replacement_strane']) . "', replacement_strany = '" . $this->db->escape($data['replacement_strany']) . "', country_id = '" . (int)$data['country_id'] . "'");
$this->cache->delete('zone');
@@ -9,7 +9,7 @@ class ModelLocalisationZone extends Model {
}
public function editZone($zone_id, $data) {
$this->db->query("UPDATE " . DB_PREFIX . "zone SET status = '" . (int)$data['status'] . "', name = '" . $this->db->escape($data['name']) . "', code = '" . $this->db->escape($data['code']) . "', slug = '" . $this->db->escape($data['slug']) . "', country_id = '" . (int)$data['country_id'] . "' WHERE zone_id = '" . (int)$zone_id . "'");
$this->db->query("UPDATE " . DB_PREFIX . "zone SET status = '" . (int)$data['status'] . "', name = '" . $this->db->escape($data['name']) . "', code = '" . $this->db->escape($data['code']) . "', slug = '" . $this->db->escape($data['slug']) . "', contact_telephone = '" . $this->db->escape($data['contact_telephone']) . "', contact_email = '" . $this->db->escape($data['contact_email']) . "', contact_address = '" . $this->db->escape($data['contact_address']) . "', contact_geocode = '" . $this->db->escape($data['contact_geocode']) . "', contact_fax = '" . $this->db->escape($data['contact_fax']) . "', contact_open = '" . $this->db->escape($data['contact_open']) . "', contact_comment = '" . $this->db->escape($data['contact_comment']) . "', replacement_gorod = '" . $this->db->escape($data['replacement_gorod']) . "', replacement_gorodu = '" . $this->db->escape($data['replacement_gorodu']) . "', replacement_gorodom = '" . $this->db->escape($data['replacement_gorodom']) . "', replacement_strana = '" . $this->db->escape($data['replacement_strana']) . "', replacement_stranu = '" . $this->db->escape($data['replacement_stranu']) . "', replacement_stranoi = '" . $this->db->escape($data['replacement_stranoi']) . "', replacement_strane = '" . $this->db->escape($data['replacement_strane']) . "', replacement_strany = '" . $this->db->escape($data['replacement_strany']) . "', country_id = '" . (int)$data['country_id'] . "' WHERE zone_id = '" . (int)$zone_id . "'");
$this->cache->delete('zone');
}
@@ -77,6 +77,70 @@
</select>
</div>
</div>
<fieldset>
<legend>{{ text_replacements }}</legend>
<p class="text-muted">{{ help_replacements }}</p>
{% for replacement_field in replacement_fields %}
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-{{ replacement_field.name }}">{{ replacement_field.label }}</label>
<div class="col-sm-10">
<input type="text" name="{{ replacement_field.name }}" value="{{ replacement_field.value }}" placeholder="{{ replacement_field.label }}" id="input-{{ replacement_field.name }}" class="form-control" />
{% if replacement_field.error %}
<div class="text-danger">{{ replacement_field.error }}</div>
{% endif %}
</div>
</div>
{% endfor %}
</fieldset>
<fieldset>
<legend>{{ text_contacts }}</legend>
<p class="text-muted">{{ help_contacts }}</p>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-contact-telephone">{{ entry_contact_telephone }}</label>
<div class="col-sm-10">
<input type="text" name="contact_telephone" value="{{ contact_telephone }}" placeholder="{{ entry_contact_telephone }}" id="input-contact-telephone" class="form-control" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-contact-email">{{ entry_contact_email }}</label>
<div class="col-sm-10">
<input type="text" name="contact_email" value="{{ contact_email }}" placeholder="{{ entry_contact_email }}" id="input-contact-email" class="form-control" />
{% if error_contact_email %}
<div class="text-danger">{{ error_contact_email }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-contact-address">{{ entry_contact_address }}</label>
<div class="col-sm-10">
<textarea name="contact_address" rows="3" placeholder="{{ entry_contact_address }}" id="input-contact-address" class="form-control">{{ contact_address }}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-contact-geocode">{{ entry_contact_geocode }}</label>
<div class="col-sm-10">
<input type="text" name="contact_geocode" value="{{ contact_geocode }}" placeholder="{{ entry_contact_geocode }}" id="input-contact-geocode" class="form-control" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-contact-fax">{{ entry_contact_fax }}</label>
<div class="col-sm-10">
<input type="text" name="contact_fax" value="{{ contact_fax }}" placeholder="{{ entry_contact_fax }}" id="input-contact-fax" class="form-control" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-contact-open">{{ entry_contact_open }}</label>
<div class="col-sm-10">
<textarea name="contact_open" rows="3" placeholder="{{ entry_contact_open }}" id="input-contact-open" class="form-control">{{ contact_open }}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-contact-comment">{{ entry_contact_comment }}</label>
<div class="col-sm-10">
<textarea name="contact_comment" rows="3" placeholder="{{ entry_contact_comment }}" id="input-contact-comment" class="form-control">{{ contact_comment }}</textarea>
</div>
</div>
</fieldset>
</form>
</div>
</div>