Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


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
Надіслати
Поділитися на інших сайтах


А где  в 
 
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 weeks later...

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

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

 

 

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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.