Добавление настраиваемого поля на странице описания продуктов в OpenCart 3.x - PullRequest
2 голосов
/ 21 апреля 2020

Я хочу настроить страницу описания продукта моего сайта, которая основана на OpenCart, добавив дополнительное поле, но я не могу оштрафовать файл, описывающий страницу описания. Я проверил файл catalog / view / theme / (mytemplate) /product/product.twig, но это не файл для моей страницы описания продукта.

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Добавление нового поля в описание продукта 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 кэш путем очистки хранилища в файловой системе.

0 голосов
/ 22 апреля 2020

При редактировании файла .twig в OpenCart 3.x вы часто сталкиваетесь с проблемой с Twig Cache. Вы бы отредактировали файл и не увидели никаких изменений.

Чтобы избежать этого, 1. go в вашу админ-панель 2. в правом верхнем углу нажмите на значок шестеренки. 3. отключите кеш веток.

дайте мне знать, если это поможет?

...