Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


 Поделиться

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

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

 

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

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

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

  • 4 недели спустя...

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

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

 

 

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

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


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

Вот решение

 

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

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


Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

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

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