[OCMOD] Дополнительное поле Описания в карточке товара OpenCart 3

Тема в разделе "Готовые модули и модификаторы. Бесплатно", создана пользователем Maksikus, 15 май 2023.

  1. Maksikus

    Maksikus Пользователь

    Сообщения:
    48
    Симпатии:
    5
    Коллеги, приветствую!

    Тут не нашёл.

    Делал для себя:
    - дополнительное поле описания в карточке товара для opencart 3.x:
    - а именно:
    - opencart 3.0.3.7
    , может кому-то пригодится.

    Код:
    <?xml version="1.0" encoding="utf-8"?>
    <modification>
      <name>[BEFE] Дополнительное поле Описания в карточке товара</name>
      <code>BEFE_Extra_Description_Product_v100</code>
      <version>1.0.0</version>
      <author>MAEmelyanov</author>
      <link>https://t.me/maemelyanov</link>
      
      <file path="admin/controller/catalog/product.php">
        <operation>
          <search><![CDATA[if (isset($this->request->post['product_description'])) {]]></search>
          <add position="after" offset="6"><![CDATA[
            if (isset($this->request->post['product_extra_description'])) {
                $data['product_extra_description'] = $this->request->post['product_extra_description'];
            } elseif (isset($this->request->get['product_id'])) {
                $data['product_extra_description'] = $this->model_catalog_product->getProductDescriptions($this->request->get['product_id']);
            } else {
                $data['product_extra_description'] = array();
            }
          ]]></add>
        </operation>
      </file>
    
      <file path="admin/model/catalog/product.php">
        <operation>
          <search index="0"><![CDATA[description = '" . $this->db->escape($value['description']) . "',]]></search>
          <add position="replace"><![CDATA[
            description = '" . $this->db->escape($value['description']) . "', extra_description = '" . $this->db->escape($value['extra_description']) . "',
          ]]></add>
        </operation>
        <operation>
           <search index="1"><![CDATA[description = '" . $this->db->escape($value['description']) . "',]]></search>
          <add position="replace"><![CDATA[
            description = '" . $this->db->escape($value['description']) . "', extra_description = '" . $this->db->escape($value['extra_description']) . "',
          ]]></add>
        </operation>
        <operation>
          <search><![CDATA[public function getProducts($data = array()) {]]></search>
          <add position="after"><![CDATA[
            $result_extra_description = $this->db->query("SHOW COLUMNS FROM " . DB_PREFIX . "product_description LIKE 'extra_description';");
            if ($result_extra_description->num_rows == 0) {
                $this->db->query("ALTER TABLE " . DB_PREFIX . "product_description ADD COLUMN extra_description TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER  `description` ;");             
            }
          ]]></add>
        </operation>
        <operation>
          <search><![CDATA['description'      => $result['description'],]]></search>
          <add position="after"><![CDATA[
            'extra_description'  => $result['extra_description'],
          ]]></add>
        </operation>
      </file>
     
      <file path="admin/view/template/catalog/product_form.twig">
        <operation>
          <search><![CDATA[<textarea name="product_description[{{ language.language_id }}][description]" placeholder="{{ entry_description }}" id="input-description{{ language.language_id }}" data-toggle="summernote" data-lang="{{ summernote }}" class="form-control">{{ product_description[language.language_id] ? product_description[language.language_id].description }}</textarea>]]></search>
          <add position="after" offset="2"><![CDATA[
                        <div class="form-group">
                          <label class="col-sm-2 control-label" for="input-description{{ language.language_id }}">{{ entry_extra_description }}</label>
                          <div class="col-sm-10">
                            <textarea name="product_description[{{ language.language_id }}][extra_description]" placeholder="{{ entry_extra_description }}" id="input-extra_description{{ language.language_id }}" data-toggle="summernote" data-lang="{{ summernote }}" class="form-control">{{ product_extra_description[language.language_id] ? product_description[language.language_id].extra_description }}</textarea>
                          </div>
                        </div>
          ]]></add>
        </operation>
      </file>
     
      <file path="catalog/controller/product/product.php">
        <operation>
          <search><![CDATA[$data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');]]></search>
          <add position="after"><![CDATA[
                $data['extra_description'] = html_entity_decode($product_info['extra_description'], ENT_QUOTES, 'UTF-8');
          ]]></add>
        </operation>
        <operation>
          <search><![CDATA['description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',]]></search>
          <add position="after"><![CDATA[
                        'extra_description' => utf8_substr(trim(strip_tags(html_entity_decode($result['extra_description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
          ]]></add>
        </operation>
      </file>
     
      <file path="catalog/model/catalog/product.php">
        <operation>
          <search><![CDATA['description'      => $query->row['description'],]]></search>
          <add position="after"><![CDATA[
                    'extra_description'      => $query->row['extra_description'],
          ]]></add>
        </operation>
      </file>
     
       <file path="catalog/view/theme/default/template/product/product.twig">
        <operation>
          <search><![CDATA[<div class="tab-pane active" id="tab-description">{{ description }}</div>]]></search>
          <add position="replace"><![CDATA[
                        <div class="tab-pane active" id="tab-description">{{ description }}
                        <br>
                        {{ extra_description }}</div>
          ]]></add>
        </operation>
      </file>
     
      <file path="admin/language/ru-ru/catalog/product.php">
        <operation>
          <search><![CDATA[$_['entry_description']]]></search>
          <add position="before"><![CDATA[
            $_['entry_extra_description'] = 'Дополнительное описание';
          ]]></add>
        </operation>
      </file>
      <file path="admin/language/en-gb/catalog/product.php">
        <operation>
          <search><![CDATA[$_['entry_description']]]></search>
          <add position="before"><![CDATA[
            $_['entry_extra_description'] = 'Additional description';
          ]]></add>
        </operation>
      </file>
     
    </modification>
     

    Вложения:

    Последнее редактирование: 27 май 2023
    devimirochnik нравится это.
  2. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    522
    Симпатии:
    82
    Полезная вещь, единственно, лучше использовать вместо

    catalog/view/theme/default/template/product

    Запись

    catalog/view/theme/*/template/product

    Тогда не только в дефолтном шаблоне будет применяться.
     
    lap81 нравится это.