Добавление нового поля в описание продукта OpenCart 3.X (многоязычный).
На панели инструментов администратора в правом верхнем углу щелкните значок шестеренки. Во всплывающем окне отключите Cache OFF (оба) и Refre sh. Это необходимо для того, чтобы результаты вашего редактирования были видны.
1. Прежде всего, вам необходимо добавить новое поле в вашу базу данных. Используя phpMyAdmin , откройте свою БД, найдите таблицу oc_product_description (oc_ - мой префикс, используйте ваш).
Когда вы открываете oc_product_description , откройте SQL tab и напишите (не забудьте изменить oc_ на префикс вашей БД):
ALTER TABLE `oc_product_description` ADD `subtitle` VARCHAR(255) NOT NULL AFTER `name`;
Это добавит новый столбец subtitle .
2. Модель администратора версии Администратор / модель / каталог / продукт. php
Найти (≈12 строк)
foreach ($data['product_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}
Заменить на
foreach ($data['product_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', subtitle = '" . $this->db->escape($value['subtitle']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}
Найти (строка ≈146)
foreach ($data['product_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}
Заменить на
foreach ($data['product_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', subtitle = '" . $this->db->escape($value['subtitle']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}
Найти (строка ≈432)
$product_description_data[$result['language_id']] = array(
'name' => $result['name'],
Добавить ниже
'subtitle' => $result['subtitle'],
3. Модель администратора версии Администратор / контроллер / каталог / продукт. php
Найти (≈500 строк)
if (isset($this->error['name'])) {
$data['error_name'] = $this->error['name'];
} else {
$data['error_name'] = array();
}
Добавить ниже
if (isset($this->error['subtitle'])) {
$data['error_subtitle'] = $this->error['subtitle'];
} else {
$data['error_subtitle'] = array();
}
Найти
if ((utf8_strlen($value['name']) < 1) || (utf8_strlen($value['name']) > 255)) {
$this->error['name'][$language_id] = $this->language->get('error_name');
}
Добавить ниже
if (utf8_strlen($value['subtitle']) > 255) {
$this->error['subtitle'][$language_id] = $this->language->get('error_subtitle');
}
4. Редактирование языка администратора admin / language / en-gb (или ваш язык администратора) /catalog/product.php
Добавить в конце
$_['entry_subtitle'] = 'Product Subtitle';
$_['error_subtitle'] = 'Product Subtitle must less than 255 characters!';
5. Edition admin view admin / view / template / catalog / product_form.twig
Найти (≈50 строк)
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-name{{ language.language_id }}">{{ entry_name }}</label>
<div class="col-sm-10">
<input type="text" name="product_description[{{ language.language_id }}][name]" value="{{ product_description[language.language_id] ? product_description[language.language_id].name }}" placeholder="{{ entry_name }}" id="input-name{{ language.language_id }}" class="form-control"/>
{% if error_name[language.language_id] %}
<div class="text-danger">{{ error_name[language.language_id] }}</div>
{% endif %} </div>
</div>
Добавить ниже
<div class="form-group">
<label class="col-sm-2 control-label" for="input-name{{ language.language_id }}">{{ entry_subtitle }}</label>
<div class="col-sm-10">
<input type="text" name="product_description[{{ language.language_id }}][subtitle]" value="{{ product_description[language.language_id] ? product_description[language.language_id].subtitle }}" placeholder="{{ entry_subtitle }}" id="input-subtitle{{ language.language_id }}" class="form-control"/>
{% if error_subtitle[language.language_id] %}
<div class="text-danger">{{ error_subtitle[language.language_id] }}</div>
{% endif %} </div>
</div>
Теперь мы можем видеть новое поле в панели администратора при выпуске или добавлении продукта.
Наконец, мы собираемся редактировать сторону клиента.
6. Издание для модели клиента каталог / модель / каталог / продукт. php
Найти (≈10 строк)
if ($query->num_rows) {
return array(
'product_id' => $query->row['product_id'],
'name' => $query->row['name'],
Добавить ниже
'subtitle' => $query->row['subtitle'],
7. Контроллер клиента издания каталог / контроллер / продукт / продукт. php
Найти (≈228 строка)
$data['heading_title'] = $product_info['name'];
Добавить ниже
$data['subtitle'] = $product_info['subtitle'];
8. Редактирование представления клиента каталог / просмотр / тема / по умолчанию (или ваша тема) /template/product/product.twig
Найти
<h1>{{ heading_title }}</h1>
Добавить ниже
<h3>{{ subtitle }}</h3>
Поздравляю! Мы сделали это! После всех этих манипуляций вы должны очистить кеш ocmod . Go для администратора, Расширения - Модификации , кнопка в правом верхнем углу Refre sh. Чем go вернуться к админ-панели администратора, нажмите в правом верхнем углу значок шестеренки. Во всплывающем окне включите Cache (оба) и Refre sh it.
Это подходит для любого OpenCart 3.X, но в некоторых более старых версиях 3.X вам придется очистить Twig кэш путем очистки хранилища в файловой системе.