COVID2019 и это вот все. Друзья, вся эта история начинает плохо пахнет. Мойте руки, не ходите в люди. Отложите все плановые покупки и положите в носок заначку. Заприте ваших родителей, бабушек-дедушек на даче. Лучше перебдеть чем недобдеть. Берегите себя!

Краткое описание товара для opencart / ocshop 2.x.x


Recommended Posts

В версии ocshop 1.5.6.4 была замечательная доработка, дополнительное поле "краткое описание товара". В ocshop 2.x.x этого поля к сожалению нет. Подскажите пожалуйста, как его правильно добавить в ocshop / opencart 2.x.x пробовал делать по аналогии с 1.5.x, но так как с php я на вы, толком ничего не получилось. Может кто сталкивался / делал, подскажите как сделать или где почитать. Заранее спасибо.

Ссылка на комментарий
Поделиться на других сайтах

Нашел на просторах интернета очередную инструкцию, как это сделать для opencart 1.5.x, по аналогии сделал для opencart 2.0.11 над которым сейчас колдую. Если кратко, то сделал примерно так:

 

Скрытый текст

 

1. Откроем нашу базу данных с помощью phpMyAdmin, и выберем таблицу oc_product_description, жмём кнопку структура. Добавляем новое поле, после description, назовём его description_mini Параметры прописываем точно, те же что и для поля description (как на прикреплённой картинке)

2. Откроем файл (..\admin\controller\catalog\product.php), ищем в нём строку

 

$data['entry_description'] = $this->language->get('entry_description');

 

после неё добавляем


$data['entry_description_mini'] = $this->language->get('entry_description_mini');

 

3. Откроем файл (..\admin\language\russian\catalog\product.php) ищем в нём строку

 

$_['entry_description']      = 'Описание';

 

после неё добавляем


$_['entry_description_mini'] = 'Краткое описание';

 

4. Откроем файл (..\admin\view\template\catalog\product_form.tpl) ищем в нём строку

 

<div class="form-group">
                    <label class="col-sm-2 control-label" for="input-description<?php echo $language['language_id']; ?>"><?php echo $entry_description; ?></label>
                    <div class="col-sm-10">
                      <textarea name="product_description[<?php echo $language['language_id']; ?>][description]" placeholder="<?php echo $entry_description; ?>" id="input-description<?php echo $language['language_id']; ?>"><?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['description'] : ''; ?></textarea>
                    </div>
</div>

 

после неё добавляем

 

 <div class="form-group">
                    <label class="col-sm-2 control-label" for="input-description<?php echo $language['language_id']; ?>"><?php echo 'Краткое описание'; ?></label>
                    <div class="col-sm-10">
                      <textarea name="product_description[<?php echo $language['language_id']; ?>][description_mini]" placeholder="<?php echo $entry_description; ?>" id="input-description<?php echo $language['language_id']; ?>" cols="100" rows="3"><?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['description_mini'] : ''; ?></textarea>
                    </div>
</div>

 

Вот тут у меня получились грабли, вопервых вместо <?php echo 'Краткое описание'; ?> по старой инструкции нужно писать <?php echo $entry_description; ?>, но у меня почему то постоянно выдавало ошибку... психанул сделал "как нельзя", но пока сойдёт и так. Во вторых, корявенько прописал размеры поля cols="100" rows="3" так как тут вообще должен вставляется редактор текста, для его форматирования, но... тоже не знаю как делать. По идее он должен дублироваться как для поля "описание товара", но не отображается... Получилось не адаптивное поле, но пока сойдёт и так. Если кто подскажет как тут поправить буду благодарен.

 

5. Откроем файл (..\admin\model\catalog\product.php ) находим

 

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']) . "', description = '" . $this->db->escape($value['description']) . "', description_mini = '" . $this->db->escape($value['description_mini']) . "', 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']) . "', 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']) . "', description = '" . $this->db->escape($value['description']) . "', description_mini = '" . $this->db->escape($value['description_mini']) . "', 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 ($query->rows as $result) {
            $product_description_data[$result['language_id']] = array(
                'name'             => $result['name'],
                'description'      => $result['description'],

 

после неё добавляем


                'description_mini' => $result['description_mini'],

 

Заходим в админку в любой товар и проверям, что перед описанием появилось поле "Краткое описание". Попробуйте добавить любой текст, сохранить товар, потом зайдите в опять в phpMyadmin и проверьте, что в новом поле, которое мы добавили в пункте 1, появилось описание для выбранного товара. Если нет - проверяйте все еще раз, без того дальше двигаться нет смысла.

 

6. Откроем файл (..\catalog\model\catalog\product.php)

 

Находим

 

if ($query->num_rows) {
            return array(
                'product_id'       => $query->row['product_id'],
                'name'             => $query->row['name'],
                'description'      => $query->row['description'],

 

после неё добавляем


                'description_mini'      => $query->row['description_mini'],

 

7. Откроем файл (..\catalog\controller\product\category.php)

 

находим

 

$data['products'][] = array(
                    'product_id'  => $result['product_id'],
                    'thumb'       => $image,
                    'name'        => $result['name'],
                    'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',

 

после неё добавляем


                    'description_mini' => $result['description_mini'],

 

8. Откроем файл (..\catalog\view\theme\default\template\product\category.tpl)

находим <?php echo $product['description']; ?>

 

и заменяем его на

 

<?php echo $product['description_mini']; ?>

 

Ну вот собственно и всё, теперь у меня в категории выводится краткое описание товара, Ура!

По аналогии можно подправить контроллеры и шаблоны для поиска, сравнения, производителей и т.п. если кому нужно конечно.

 

Вот ссылочка на исходную статью, по которой я делал под себя для opencart 2.0.1.1

 

П.С. Если кто поможет с пунктом 4 разобраться, чтоб была адаптивность и текстовый редактор буду очень благодарен!

1.jpg

2.jpg

3.jpg

 

 

P.S. Большие сообщения прячем под спойлер!

Ссылка на комментарий
Поделиться на других сайтах

  • 8 months later...
В 13.01.2016 at 02:53, NeoS сказал:

Нашел на просторах интернета очередную инструкцию, как это сделать для opencart 1.5.x, по аналогии сделал для opencart 2.0.11 над которым сейчас колдую. Если кратко, то сделал примерно так:

 

  Показать содержимое

 

1. Откроем нашу базу данных с помощью phpMyAdmin, и выберем таблицу oc_product_description, жмём кнопку структура. Добавляем новое поле, после description, назовём его description_mini Параметры прописываем точно, те же что и для поля description (как на прикреплённой картинке)

2. Откроем файл (..\admin\controller\catalog\product.php), ищем в нём строку

 

$data['entry_description'] = $this->language->get('entry_description');

 

после неё добавляем


$data['entry_description_mini'] = $this->language->get('entry_description_mini');

 

3. Откроем файл (..\admin\language\russian\catalog\product.php) ищем в нём строку

 

$_['entry_description']      = 'Описание';

 

после неё добавляем


$_['entry_description_mini'] = 'Краткое описание';

 

4. Откроем файл (..\admin\view\template\catalog\product_form.tpl) ищем в нём строку

 

<div class="form-group">
                    <label class="col-sm-2 control-label" for="input-description<?php echo $language['language_id']; ?>"><?php echo $entry_description; ?></label>
                    <div class="col-sm-10">
                      <textarea name="product_description[<?php echo $language['language_id']; ?>][description]" placeholder="<?php echo $entry_description; ?>" id="input-description<?php echo $language['language_id']; ?>"><?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['description'] : ''; ?></textarea>
                    </div>
</div>

 

после неё добавляем

 

 <div class="form-group">
                    <label class="col-sm-2 control-label" for="input-description<?php echo $language['language_id']; ?>"><?php echo 'Краткое описание'; ?></label>
                    <div class="col-sm-10">
                      <textarea name="product_description[<?php echo $language['language_id']; ?>][description_mini]" placeholder="<?php echo $entry_description; ?>" id="input-description<?php echo $language['language_id']; ?>" cols="100" rows="3"><?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['description_mini'] : ''; ?></textarea>
                    </div>
</div>

 

Вот тут у меня получились грабли, вопервых вместо <?php echo 'Краткое описание'; ?> по старой инструкции нужно писать <?php echo $entry_description; ?>, но у меня почему то постоянно выдавало ошибку... психанул сделал "как нельзя", но пока сойдёт и так. Во вторых, корявенько прописал размеры поля cols="100" rows="3" так как тут вообще должен вставляется редактор текста, для его форматирования, но... тоже не знаю как делать. По идее он должен дублироваться как для поля "описание товара", но не отображается... Получилось не адаптивное поле, но пока сойдёт и так. Если кто подскажет как тут поправить буду благодарен.

 

5. Откроем файл (..\admin\model\catalog\product.php ) находим

 

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']) . "', description = '" . $this->db->escape($value['description']) . "', description_mini = '" . $this->db->escape($value['description_mini']) . "', 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']) . "', 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']) . "', description = '" . $this->db->escape($value['description']) . "', description_mini = '" . $this->db->escape($value['description_mini']) . "', 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 ($query->rows as $result) {
            $product_description_data[$result['language_id']] = array(
                'name'             => $result['name'],
                'description'      => $result['description'],

 

после неё добавляем


                'description_mini' => $result['description_mini'],

 

Заходим в админку в любой товар и проверям, что перед описанием появилось поле "Краткое описание". Попробуйте добавить любой текст, сохранить товар, потом зайдите в опять в phpMyadmin и проверьте, что в новом поле, которое мы добавили в пункте 1, появилось описание для выбранного товара. Если нет - проверяйте все еще раз, без того дальше двигаться нет смысла.

 

6. Откроем файл (..\catalog\model\catalog\product.php)

 

Находим

 

if ($query->num_rows) {
            return array(
                'product_id'       => $query->row['product_id'],
                'name'             => $query->row['name'],
                'description'      => $query->row['description'],

 

после неё добавляем


                'description_mini'      => $query->row['description_mini'],

 

7. Откроем файл (..\catalog\controller\product\category.php)

 

находим

 

$data['products'][] = array(
                    'product_id'  => $result['product_id'],
                    'thumb'       => $image,
                    'name'        => $result['name'],
                    'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',

 

после неё добавляем


                    'description_mini' => $result['description_mini'],

 

8. Откроем файл (..\catalog\view\theme\default\template\product\category.tpl)

находим <?php echo $product['description']; ?>

 

и заменяем его на

 

<?php echo $product['description_mini']; ?>

 

Ну вот собственно и всё, теперь у меня в категории выводится краткое описание товара, Ура!

По аналогии можно подправить контроллеры и шаблоны для поиска, сравнения, производителей и т.п. если кому нужно конечно.

 

Вот ссылочка на исходную статью, по которой я делал под себя для opencart 2.0.1.1

 

П.С. Если кто поможет с пунктом 4 разобраться, чтоб была адаптивность и текстовый редактор буду очень благодарен!

1.jpg

2.jpg

3.jpg

 

 

P.S. Большие сообщения прячем под спойлер!


получилось? работает?
на 2.1.0.2.1 тоже? Админ может саотрел, не поломает чего? - ОТВЕТ: работает! главное не забыть очистить все кэши, вк мода тоже (если стоит)

можно ли в мини дескрипшн вставить ссылку? (поддерживается ли ХТМЛ) - нет не поддерживается (буду пробовать победить этот момент)

Ссылка на комментарий
Поделиться на других сайтах

 Undefined index: description_mini in /home/----/public_html/test.-----y/catalog/view/theme/gentle/template/product/category.tpl on line 76
на дефолтной теме все тоже самое, только строчка 102

это собственно место :

8. Откроем файл (..\catalog\view\theme\default\template\product\category.tpl)

находим <?php echo $product['description']; ?>

и заменяем его на

 

<?php echo $product['description_mini']; ?>


Ошибка прошла после чистки всех кэшей

Ссылка на комментарий
Поделиться на других сайтах

  • 2 months later...

В сообщении от NeoS'а, пункт 4.

чтобы не было ошибок, нужно часть кода заменить так:

Скрытый текст

<div class="form-group">
      <label class="col-sm-2 control-label" for="input-description<?php echo $language['language_id']; ?>"><?php echo $entry_description; ?></label>
      <div class="col-sm-10">
      <textarea name="product_description[<?php echo $language['language_id']; ?>][description]" placeholder="<?php echo $entry_description; ?>" id="input-description<?php echo $language['language_id']; ?>"><?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['description'] : ''; ?></textarea>
      </div>
</div>

 

заменить так:

<div class="form-group">
                    <label class="col-sm-2 control-label" for="input-description<?php echo $language['language_id']; ?>"><?php echo $entry_mini_description;; ?></label>
                    <div class="col-sm-10">
                      <textarea name="product_description[<?php echo $language['language_id']; ?>][mini_description]" class="form-control" placeholder="<?php echo $entry_mini_description; ?>" id="input-description<?php echo $language['language_id']; ?>"><?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['mini_description'] : ''; ?></textarea>
                    </div>
                  </div>

 

в моем случае: description_mini  ->  mini_description

чистим кэш и все работает, пока что, а чтобы поле было такое же, то для мини описания нужно добавить атрибут - class="form-control"

 

А за ресёрч - спасибо, долго искал, сам не оч бум-бум, а тут помогло))

Ссылка на комментарий
Поделиться на других сайтах

  • 2 months later...

А как сделать так, чтоб если короткого описание нет, то тогда выводить полное?

Часть товаров уже забита в магазин и каждое по новому редактировать, не хочется.

 

Я на версии 2.3, в файле /catalog/view/theme/template/product/category.tpl сделал так:

    <?php if ($product['description_mini']) { ?>
    <p><?php echo $product['description_mini']; ?></p>
    <?php } else { ?>
    <p><?php echo $product['description']; ?></p>
    <?php } ?>

Ссылка на комментарий
Поделиться на других сайтах

Добавлю сам...

Да, всё круто заработало как и хотел... Если нет короткого, то вставляется полное описание.

Просто, изначально у меня в файле:

catalog/controller/product/category.php

была строка:

'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..',

 

после которой я добавил по аналогии:

'description_mini' => utf8_substr(strip_tags(html_entity_decode($result['description_mini'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '',

 

и вот тут! в самом конце между одинарными кавычками крылась загвоздка, там стоит двоеточие '..'  убираем его и всё отлично работает!

Ссылка на комментарий
Поделиться на других сайтах

А ещё лучше, эту строчку уменьшить до:

'description_mini' => html_entity_decode($result['description_mini'], ENT_QUOTES, 'UTF-8'), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length'),

 

Тогда можно писать мини описание в html формате!

Ссылка на комментарий
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу