Перейти к содержанию
megrel

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

Рекомендуемые сообщения

Здравствуйте. На одном из сайтов сделал два описания для категорий. Может кому пригодится данное решение. Движок - Ocstore 1.5.4.1

 

Шаг 1. База данных. Создадим дополнительный столбец для таблицы "category_description"

Выполняем SQL запрос для нашей БД:

ALTER TABLE `category_description` ADD `description2` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `description`

Шаг 2. Правим файлы административной части

 

admin/controller/catalog/category.php

После:

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

Добавить:

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

admin/language/russian/catalog/category.php

После:

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

Добавляем:

$_['entry_description2']      = 'Описание нижнее:';

admin/model/catalog/category.php

Ищем на 13 и на 47 строчках:

$this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "',  seo_title = '" . $this->db->escape($value['seo_title']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'");

Заменяем на:

$this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', description2 = '" . $this->db->escape($value['description2']) . "', seo_title = '" . $this->db->escape($value['seo_title']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'");

Находим:

'description'      => $result['description']

Заменяем на:

'description'      => $result['description'],
'description2'      => $result['description2']

admin/view/template/catalog/category_form.tpl

После:

              <tr>
                <td><?php echo $entry_description; ?></td>
                <td><textarea name="category_description[<?php echo $language['language_id']; ?>][description]" id="description<?php echo $language['language_id']; ?>"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['description'] : ''; ?></textarea></td>
              </tr> 

Вставляем:

	<tr>
                <td><?php echo $entry_description2; ?></td>
                <td><textarea name="category_description[<?php echo $language['language_id']; ?>][description2]" id="description2<?php echo $language['language_id']; ?>"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['description2'] : ''; ?></textarea></td>
              </tr>

В конце файла находим:

script type="text/javascript"><!--
<?php foreach ($languages as $language) { ?>
CKEDITOR.replace('description<?php echo $language['language_id']; ?>', {
	filebrowserBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserImageBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserFlashBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserImageUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserFlashUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>'
});
<?php } ?>
//--></script>

И после добавляем:

script type="text/javascript"><!--
<?php foreach ($languages as $language) { ?>
CKEDITOR.replace('description2<?php echo $language['language_id']; ?>', {
	filebrowserBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserImageBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserFlashBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserImageUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
	filebrowserFlashUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>'
});
<?php } ?>
//--></script>

Шаг 3. Выводим все это в клиентскую часть

 

catalog/controller/product/category.php

После:

$this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');

Вставляем:

$this->data['description2'] = html_entity_decode($category_info['description2'], ENT_QUOTES, 'UTF-8');

Ну и наконец, выводим наше второе описание на страницу категории.

catalog/view/default/template/product/category.tpl

 

Перед:

  <div class="buttons">
    <div class="right"><a href="<?php echo $continue; ?>" class="button"><?php echo $button_continue; ?></a></div>
  </div>

Вставляем:

 <div class="category-info">
    <?php if ($description2) { ?>
    <?php echo $description2; ?>
    <?php } ?>
  </div>

У меня получилось вывести второе описание для категорий. Сделал vqmod для данного решения, но он почему-то не хочет работать.

 

Что не так в нем, может что упустил?

category-description-2.xml

  • +1 1

Поделиться сообщением


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

А где  в 
 
admin\view\template\catalog\category_form.tpl
это?
 

CKEDITOR.replace('description2<?php echo $language['language_id']; ?>', {
    language: '<?php echo $lang; ?>',
    filebrowserBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
    filebrowserImageBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
    filebrowserFlashBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
    filebrowserUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
    filebrowserImageUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
    filebrowserFlashUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>'
});

Поделиться сообщением


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

Да, совсем забыл. Спасибо)

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

Поделиться сообщением


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

В этом

 

 

<operation error="skip"> 
<search position="after"><![CDATA[
<script type="text/javascript"><!--
<?php foreach ($languages as $language) { ?>
CKEDITOR.replace('description<?php echo $language['language_id']; ?>', {
filebrowserBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserImageBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserFlashBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserImageUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserFlashUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>'
});
<?php } ?>
//--></script>  ]]></search>
            <add><![CDATA[   
<script type="text/javascript"><!--
<?php foreach ($languages as $language) { ?>
CKEDITOR.replace('description2<?php echo $language['language_id']; ?>', {
filebrowserBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserImageBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserFlashBrowseUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserImageUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>',
filebrowserFlashUploadUrl: 'index.php?route=common/filemanager&token=<?php echo $token; ?>'
});
<?php } ?>
//--></script> 

Vqmod не может искать целыми кусками.Делайте поиск по какой то определённой строке и потом  через добавление с переносом по количеству строк.

Поделиться сообщением


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

Этот кусок за ckeditor отвечает же. Но дело в том. что просто даже обычное пустое поле не появляется в админке.

И как тогда правильнее записать этот кусок с ckeditor, подскажите пожалуйста.

Поделиться сообщением


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

Этот кусок за ckeditor отвечает же. Но дело в том. что просто даже обычное пустое поле не появляется в админке.

И как тогда правильнее записать этот кусок с ckeditor, подскажите пожалуйста.

 

 

Vqmod не может искать целыми кусками.Делайте поиск по какой то определённой строке и потом  через добавление с переносом по количеству строк.

 

Поделиться сообщением


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

То есть, не выводит в админке из за того, что неправильно написал в vqmod вывод этих строк:

        <operation error="skip">    
        <search position="after"><![CDATA[
            <tr>
                <td><?php echo $entry_description; ?></td>
                <td><textarea name="category_description[<?php echo $language['language_id']; ?>][description]" id="description<?php echo $language['language_id']; ?>"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['description'] : ''; ?></textarea></td>
              </tr> ]]></search>
               <add><![CDATA[   
            <tr>
                <td><?php echo $entry_description2; ?></td>
                <td><textarea name="category_description[<?php echo $language['language_id']; ?>][description2]" id="description2<?php echo $language['language_id']; ?>"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['description2'] : ''; ?></textarea></td>
              </tr>
            ]]></add>   
        </operation>

Я извиняюсь, может не понимаю чего-то элементарного, но на данном этапе своих знаний не в силах решить эту проблему сам (

Поделиться сообщением


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

Vqmod не ищет по целому блоку.Ему нужно указать строку, а потом уже он добавит.Читаем ниже и особо уделяем внимание описанию

 

     "before" и "offset" 
     "after" и "offset" 

 

 

 
Какие теги файла .xml, что означают:
 

<modification> - самый главный родитель, он может быть только один во всем файле
<id> - это название и идентификатор модуля. Это любой текст.
<version> - версия модификации в формате "1.0.0"
<vqmver> - это минимальная версия vQmo в формате "1.0.0"
<author> - имя автора
<file> - имя изменяемого файла. Задается от корня сайта, где лежит index.php (например catalog/controller/product/product.php). Этот тег можо несколько раз использовать во всем .xml файле
<operation> - это обертка над конкретной операцией с файлом, определенном в теге file. Аттрибут "errors" может иметь два значения "skip"(пропустить ошибку и продолжить работу модуля) и "abort"(откатить все изменения)
<search> - первый шаг выполнения модификации. Найти можно только одну строку. Автоматически обрезаются пробелы и разрывы строк. Этот тег может быть только один по отношению к тегу <operation>. Рекомендуется использовать CDATA для оборачивания кода. Обязательный атрибут - "position", может принимать значения before, after, replace, top, bottom и all.
 
    * replace - заменит весь код указанный в <search> на код указанные в теге <add>. Используется по умолчанию.
    * before - вставит данные из <add> перед данными из <search>
    * after - вставит данные из <add> после данными из <search>
    * top - вставит данные из <add> в самом начале файла. Данные из <search> будут проигнорированны.
    * bottom - вставит данные из <add> в конце файла. Данные из <search> будут проигнорированны.
    * all - заменит все данные в файле данными из <add>. Данные из <search> будут проигнорированны.
 
Необязательный атрибут - "offset", используется для работы с позицией вставки кода.
 
    * Если в "position" установлено "before" и "offset" установлено 3, тогда данные из <add> будут вставлены на 3 строки до искомых данных
    * Если в "position" установлено "after" и "offset" установлено 3, тогда данные из <add> будут вставлены на 3 строки после искомых данных
    * Если в "position" установлено "replace" и "offset" установлено 3, тогда будут искомые данные будут заменены на данные из <add>
    * Если в "position" установлено "top" и "offset" установлено 3, тогда данные вставятся после 3 строк от начала файла
    * Если в "position" установлено "bottom" и "offset" установлено 3, тогда данные вставятся после 3 строк с конца файла
 
Необязательный атрибут - "index", для указания, какие найденные экземпляры кода из тегов <search> должны быть учтены. Если мы ищем "echo" и найдено 5 "echo", но нам нужны только первое и третье, тогда мы можем использовать index="1,3". Запятая для определения нескольки елементов. Для работы со всеми найденными елементами нужно использовать index="false".
Необязательный атрибут - "regex". Устанавливается в true, если поеск выполнятся с помощью регулярного выражени. Чтобы выполнять обычный поиск установите параметр в false(стоит по умолчанию)
Необязательный атрибут - "trim". Если нужно искать без обрезания пробелов - устанавливаем в false. По умолчанию пробелы обрезаются и параметр установлен в true. <add> - Это второй этам нашей работы с файлом. Может состоять из нескольких линий. Обязательно только один на одну операцию с файлом. Нужно оборачивать код в CDATA.
Необязательный атрибут - "trim". Используется также, как и при поиске, но по умолчанию установлен false(пробелы не обрезаются)
<![CDATA[ ]]> - это CDATA xml теги. Означает, что данные в них не нужно обрабатывать как xml

Поделиться сообщением


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

У....

100%  так не делал бы

 

 

 

пишем

 

В описании

 

Все что должно быть вверху

[sepearator]

Все что должно быть внизу

 

 

в контроллере

 

получили description

 

explode ('[separator]', $description)

 

Первый элемент - до товаров

Второй - после.

Поделиться сообщением


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

У меня не выводит описание второе! Сделал все по инструкции и перепроверил. Версия тоже совпадает

Поделиться сообщением


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

Вывел, моя ошибка была)))

А как сделать, чтобы он h1 поддерживал и т.д.

Поделиться сообщением


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

То есть, не выводит в админке из за того, что неправильно написал в vqmod вывод этих строк:

        <operation error="skip">    
        <search position="after"><![CDATA[
            <tr>
                <td><?php echo $entry_description; ?></td>
                <td><textarea name="category_description[<?php echo $language['language_id']; ?>][description]" id="description<?php echo $language['language_id']; ?>"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['description'] : ''; ?></textarea></td>
              </tr> ]]></search>
               <add><![CDATA[   
            <tr>
                <td><?php echo $entry_description2; ?></td>
                <td><textarea name="category_description[<?php echo $language['language_id']; ?>][description2]" id="description2<?php echo $language['language_id']; ?>"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['description2'] : ''; ?></textarea></td>
              </tr>
            ]]></add>   
        </operation>

Я извиняюсь, может не понимаю чего-то элементарного, но на данном этапе своих знаний не в силах решить эту проблему сам (

 

 

А можно ли в вашем модуле сделать так, чтобы он был скрыт, но при необходимости его можно было развернуть нажатием на кнопку?

Поделиться сообщением


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

Да, конечно. Это можно делать не только с описанием.

Вот решение

 

И это не мой модуль)

Поделиться сообщением


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

Да, конечно. Это можно делать не только с описанием.

Вот решение

 

Не особо понял, как это осуществить. Нужно править те файлы, что вы писали? 

Поделиться сообщением


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

Читайте внимательно все и все поймете. Там все просто. Править в вашем случае нужно category.tpl

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От autonavi
      Подскажите, как сделать описание категории на всю ширину страницы. Стоит шаблон Unishop. Есть возможность в настройках шаблона перемещать категорию над списком товаров и после. Знаю, что перемещением кода за кнопки пагинации, описание станет на всю страницу, но не получается это сделать.
    • От zzaxx
      Добрый день помогите пожалуста с вопросом. У меня есть три категории товаров и к ним есть описания но они почемуто не выводяться на экран тоесть на сайте. Подскажите в чем проблема и как её решить. Скажу сразу сайт верстал человек и теперь я не могу с ним связаться в админку могу зайти скажите что и где искать и как изменить. Заранее благодарен.
    • От Alina
      Здравствуйте.
      Как сделать,чтобы при пейджинге страниц товарной категории, например, сайт.ру/категория/ -> сайт.ру/категория/?page=2 и т.д., текст описания к категории не дублировался на последующих страницах категории, а был расположен только на первой странице категории. Это требуется для того чтобы не дублировался контент страниц ,иначе это отрицательно влияет на продвижение.
      Как такое можно реализовать???
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.