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

[РЕШЕНО] Расширенное описание категории

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

Всем доброго времени суток, очень понравился данный двиг, но хочется немного дополнить описание категорий, для начала попытаюсь описать чего хочу добиться и что для этого уже сделал (ЗЫ если честно в пыхе полный 0 хотя и люблю програмить на delphi)))

Задача: добавить дополнительное описание категории, основное описание как и раньше сверху + дополнительное описание под вложеными категориями

скрин как должно быть Изображение

что уже сделал:

в файле catalog\controller\product\category.php после строки

$this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');
добавил

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

в файле catalog\view\theme\sancart\template\product\category.tpl в нужном месте добавил

<?php if ($description1) { ?>
	<div style="margin-bottom: 15px;"><?php echo $description1; ?></div>
<?php } ?>

еще добавил в БД в таблице oc_category_description дополнительное поле description1

если заносить данные в БД в это поле вручную то все отлчно работает НО теперь хочется автоматизировать все это дело и дополнить админку...

начал ковярять код админки но это оказалось не так просто...

файл 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_description; ?></td>
  <td><textarea name="category_description[<?php echo $language['language_id']; ?>][description1]"  id="description1<?php echo $language['language_id']; ?>"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['description1'] : ''; ?></textarea></td>
</tr>

и еще добавил кусок кода для CKEDITOR

CKEDITOR.replace('description1<?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; ?>'
});

вот что вышло скрин

Изображение

Решил сегодня на свежую голову еще раз подумать и получилось все доделать для этого нужно:

файл admin\model\catalog\category.php

в нем:

строка 13 было:

$this->db->query("INSERT INTO " . DB_PREFIX . "category_description (category_id, language_id, name, meta_keywords, meta_description, description, title, h1) VALUES ('" . (int)$category_id . "', '" . (int)$language_id . "', '" . $this->db->escape($value['name']) . "', '" . $this->db->escape($value['meta_keywords']) . "', '" . $this->db->escape($value['meta_description']) . "', '" . $this->db->escape($value['description']) . "', '" . $this->db->escape($value['title']) . "', '" . $this->db->escape($value['h1']) . "')");
стало:

$this->db->query("INSERT INTO " . DB_PREFIX . "category_description (category_id, language_id, name, meta_keywords, meta_description, description, title, h1, description1) VALUES ('" . (int)$category_id . "', '" . (int)$language_id . "', '" . $this->db->escape($value['name']) . "', '" . $this->db->escape($value['meta_keywords']) . "', '" . $this->db->escape($value['meta_description']) . "', '" . $this->db->escape($value['description']) . "', '" . $this->db->escape($value['title']) . "', '" . $this->db->escape($value['h1']) . "', '" . $this->db->escape($value['description1']) . "')");

строка 41:

было:

$this->db->query("INSERT INTO " . DB_PREFIX . "category_description (category_id, language_id, name, meta_keywords, meta_description, description, title, h1) VALUES ('" . (int)$category_id . "', '" . (int)$language_id . "', '" . $this->db->escape($value['name']) . "', '" . $this->db->escape($value['meta_keywords']) . "', '" . $this->db->escape($value['meta_description']) . "', '" . $this->db->escape($value['description']) . "', '" . $this->db->escape($value['title']) . "', '" . $this->db->escape($value['h1']) . "')");
стало:

$this->db->query("INSERT INTO " . DB_PREFIX . "category_description (category_id, language_id, name, meta_keywords, meta_description, description, title, h1, description1) VALUES ('" . (int)$category_id . "', '" . (int)$language_id . "', '" . $this->db->escape($value['name']) . "', '" . $this->db->escape($value['meta_keywords']) . "', '" . $this->db->escape($value['meta_description']) . "', '" . $this->db->escape($value['description']) . "', '" . $this->db->escape($value['title']) . "', '" . $this->db->escape($value['h1']) . "', '" . $this->db->escape($value['description1']) . "')");

и последнее строка 136-143 в foreach ($query->rows as $result) {

после 'h1' => $result['h1'],

добавил

'description1' => $result['description1'],

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

  • +1 5

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


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

Спасибо тебе огромное.

Только хотел это же делать :-)

Остается еще один вопрос, как вывести длинное описание только на первой странице категории?

Как убрать дубляж текста при паджинации?

Тоесть нужно чтоб текст под товаром выводился только на первой странице.

А при переходе на вторую и последующие текста под товарами не было.

Тем самым текст индексируется только на одной странице и в поиске ей будет основной вес.

И в индексе будет только эта категория по выбранным запросам а не будт проскакивать страницы с окончанием ?page=8

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


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

Вот наверное по типу кода для вывода текста в определенных категориях

<?php $categories = $this->model_catalog_product->getCategories($product_id); ?>
<?php foreach($categories as $category) { ?>
<?php if($category['category_id'] == 1 || $category['category_id'] == 2 || $category['category_id'] == 3) { ?>
text 1
<?php } else { ?>
text 2
<?php } ?>
<?php } ?>
Так вот как можно задать не определенные категории а главная страница категории? и не учитывать паджинацию?

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


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

Сделал вывод текста только на первой странице.

В файле catalogviewthemeВаша Темаtemplateproductcategory.tpl

<?php } ?>
  <?php if ($description1) { ?>
 
	    <div style="margin-bottom: 15px; margin-top: 35px;"><?php if (!isset($_GET['page'])) {echo $description1; }?></div>
<?php } ?>

А теперь задаюсь вопросом а нужно ли это?

Если страницы вида ?page=2 спрятаны в роботс, не будет ли это только хуже?

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


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

Сделал вывод текста только на первой странице.

В файле catalog\view\theme\Ваша Тема\template\product\category.tpl

<?php } ?>
 <?php if ($description1) { ?>

	<div style="margin-bottom: 15px; margin-top: 35px;"><?php if (!isset($_GET['page'])) {echo $description1; }?></div>
<?php } ?>

А теперь задаюсь вопросом а нужно ли это?

Если страницы вида ?page=2 спрятаны в роботс, не будет ли это только хуже?

Спасибо, добрый человек. Единственно косяк, что при возвращении на первую страницу клиент не видит текст (добавляется этот самый ?page=1).

Как исправить?

Еще такой вопрос (я тут в оптимизации новенькая), прятать ?page=2 и т.д. действительно резон? Это потому, что товары будут убираться (или там сортировка другая будет включена) и по этим ссылкам будет вылазить "Нет такой страницы" или еще из каких-то соображений?

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


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

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


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

для версии 1.5.4.1 чуть по другому в модели

файл admin\model\catalog\category.php

 

13 строка

$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']) . "',description1 = '" . $this->db->escape($value['description1']) . "', seo_title = '" . $this->db->escape($value['seo_title']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'");

 

и 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']) . "', description1 = '" . $this->db->escape($value['description1']) . "', seo_title = '" . $this->db->escape($value['seo_title']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'");

  • +1 1

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


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

Для того чтобы текст категории был внизу категории: (для версии 1.5.4.1)

 

в файле catalog\view\theme\sancart\template\product\category.tpl в нужном месте добавил:





<?php if ($description1) { ?>
<div style="margin-bottom: 15px;"><?php echo $description1; ?></div>
<?php } ?>
 

вставлять надо после строки:





<div class="pagination"><?php echo $pagination; ?></div>
 

Так как картинка с результатом удалена, возьму на себя смелость добавить ее сюда:

 

9869b3ff5048bcb04c0599b62541593e.png
 

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


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

и все-таки не совсем понял. нужно ли убирать ?page=x в роботс? если нет то нужно ли отображать описание только на первой странице?

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


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

и все-таки не совсем понял. нужно ли убирать ?page=x в роботс? если нет то нужно ли отображать описание только на первой странице?

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

 

Я page=2 не убираю никогда это не 100% дубль и можно оставлять страницы в индексе.

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


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

Подскажите пожалуйста, у меня вообще описание категории не выводится, шо делать? версия 1.5.4.1

уточняю, описания категорий выводится, описание страниц производителей, нет...

Изменено пользователем Headless

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


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

Делала все по инструкции. Дополнительное поле для описания категории в админке появилось. Но пишет ошибку Notice: Undefined index: description1 in /home/ninas/public_html/pro/admin/view/template/catalog/category_form.tpl on line 57   в самом поле для описания.  

 

На страницу магазина дополнительное описание категории выводится внизу, как и хотела. Но в самом верху страницы выдает кучу ошибок:

 

Notice: Undefined index: description1 in /home/ninas/public_html/pro/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 259Notice: Undefined index: description1 in /home/ninas/public_html/pro/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 259Notice: Undefined index: description1 in /home/ninas/public_html/pro/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 259Notice: Undefined index: description1 in /home/ninas/public_html/pro/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 259Notice: Undefined index: description1 in /home/ninas/public_html/pro/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 259
 
В категориях, где нету товара, этой кучи ошибок нет.  
 
При повторной попытке редактировать описание категории дополнительного описания нету. Вместо этого описания ошибка:
Notice: Undefined index: description1 in /home/ninas/public_html/pro/admin/view/template/catalog/category_form.tpl on line 57
 
Что мне сделать, чтобы все работало? Заранее спасибо. Я, конечно, чайник, но благодаря хорошим инструкциям надеюсь справиться.
 
 

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


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

 

Помощи не дождалась - справилась сама. Так долго ковырялась, что даже не знаю уже в чем была проблема. Но уже работает. Ура!  Спасибо за инструкции.

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


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

подскажите пожалуйста, а как этот модуль увязать с модулем export import товаров? не экспортирует новую колонку и естественно при импорте все затирает

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


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

Подскажите на 1.5.5.1.1 будет работать?

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


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

а демо можно взглянуть ?

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


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

 

для версии 1.5.4.1 чуть по другому в модели

файл admin\model\catalog\category.php

 

13 строка

$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']) . "',description1 = '" . $this->db->escape($value['description1']) . "', seo_title = '" . $this->db->escape($value['seo_title']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'");

и 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']) . "', description1 = '" . $this->db->escape($value['description1']) . "', seo_title = '" . $this->db->escape($value['seo_title']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'");

сделал как написано но выдает

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /home/smartsto/smart-store.com.ua/www/vqmod/vqcache/vq2-admin_model_catalog_category.php on line 156

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


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

Есть проблема!!!!

Если в категории нет товаров, то нижний текст со второй категории не появляется, а надо

Можно както изменить?

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


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

Спасибо огромнейшее! Все получилось (ocStore 1.5.4.1).

 

 

Делала все по инструкции. Дополнительное поле для описания категории в админке появилось. Но пишет ошибку Notice: Undefined index: description1 in /home/ninas/public_html/pro/admin/view/template/catalog/category_form.tpl on line 57   в самом поле для описания.  

 

На страницу магазина дополнительное описание категории выводится внизу, как и хотела. Но в самом верху страницы выдает кучу ошибок:

 

Notice: Undefined index: description1 in /home/ninas/public_html/pro/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 259Notice: Undefined index: description1 in /home/ninas/public_html/pro/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 259Notice: Undefined index: description1 in /home/ninas/public_html/pro/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 259Notice: Undefined index: description1 in /home/ninas/public_html/pro/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 259Notice: Undefined index: description1 in /home/ninas/public_html/pro/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 259
 
В категориях, где нету товара, этой кучи ошибок нет.  
 
При повторной попытке редактировать описание категории дополнительного описания нету. Вместо этого описания ошибка:
Notice: Undefined index: description1 in /home/ninas/public_html/pro/admin/view/template/catalog/category_form.tpl on line 57
 
Что мне сделать, чтобы все работало? Заранее спасибо. Я, конечно, чайник, но благодаря хорошим инструкциям надеюсь справиться.

 

 

Нужно добавить в admin/model/category/category.php, там где:

foreach ($query->rows as $result) {
			$category_description_data[$result['language_id']] = array(

Строку:

'description1'     => $result['description1']

В файле admin/language/russian/catalog/category.php надо добавить:

$_['entry_description1']     = 'Подробное описание:';

И ошибок не будет, вроде ничего не забыл.

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


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

Доброго дня.

Все сделал по шаблону, доп. поле с описанием появилось, при добавлении описания выдает ошибку:

Notice: Error: Unknown column 'description1' in 'field list'
Error No: 1054
INSERT INTO 1category_description SET category_id = '93', language_id = '1', name = 'Консоль', meta_keyword = '', meta_description = '', description = '',description1 = '', seo_title = '', seo_h1 = '' in /var/www/leva1981/data/www/______.ru/system/database/mysql.php on line 49

 

Поле "description1" в базе mysql есть, удалял и добавлял раздел несколько раз, ошибка остается:

Ошибка

SQL-запрос:

ALTER TABLE `oc_category_description` ADD `description1` INT( 11 ) NOT NULL

Ответ MySQL: b_help.png

#1060 - Duplicate column name 'description1'

 

Подскажите в каком направлении копать?

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


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

Для чистого OpenCart 1.5.4

 

В /admin/model/catalog/category.php

 

Строка 13 заменить на:

		$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']) . "', description1 = '" . $this->db->escape($value['description1']) . "'");

Строка 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']) . "', description1 = '" . $this->db->escape($value['description1']) . "'");

После:

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

Добавить:

'description1'      => $result['description1']

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


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

Спасибо большое, этот вариант подошел для версии 1.5.5.1.2 сборки оксторе.

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


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

и еще добавил кусок кода для CKEDITOR 

CKEDITOR.replace('description1<?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; ?>'
});

Забыли тут в теме для не знающих еще добавить, куда это добавлять.

 

з.ы добрый человек подсказал что в файл  category_form.tpl

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


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

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

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

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

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

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

Войти

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

Войти

  • Последние посетители   0 пользователей онлайн

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

×

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

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