Jump to content
Sign in to follow this  
megrel

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

Recommended Posts

Здравствуйте. На одном из сайтов сделал два описания для категорий. Может кому пригодится данное решение. Движок - 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

Share this post


Link to post
Share on other sites

А где  в 
 
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; ?>'
});

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

В этом

 

 

<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 не может искать целыми кусками.Делайте поиск по какой то определённой строке и потом  через добавление с переносом по количеству строк.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

 

 

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

 

Share this post


Link to post
Share on other sites

То есть, не выводит в админке из за того, что неправильно написал в 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>

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

У....

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

 

 

 

пишем

 

В описании

 

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

[sepearator]

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

 

 

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

 

получили description

 

explode ('[separator]', $description)

 

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

То есть, не выводит в админке из за того, что неправильно написал в 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>

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

 

 

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

Share this post


Link to post
Share on other sites

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

Вот решение

 

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

Share this post


Link to post
Share on other sites

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

Вот решение

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

Sign in to follow this  

  • Similar Content

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

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.