Jump to content
Sign in to follow this  
MasterAlex

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

Recommended Posts

Всем доброго времени суток, очень понравился данный двиг, но хочется немного дополнить описание категорий, для начала попытаюсь описать чего хочу добиться и что для этого уже сделал (ЗЫ если честно в пыхе полный 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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

<?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 } ?>
Так вот как можно задать не определенные категории а главная страница категории? и не учитывать паджинацию?

Share this post


Link to post
Share on other sites

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

В файле 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 спрятаны в роботс, не будет ли это только хуже?

Share this post


Link to post
Share on other sites

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

В файле 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 и т.д. действительно резон? Это потому, что товары будут убираться (или там сортировка другая будет включена) и по этим ссылкам будет вылазить "Нет такой страницы" или еще из каких-то соображений?

Share this post


Link to post
Share on other sites

Share this post


Link to post
Share on other sites

для версии 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

Share this post


Link to post
Share on other sites

Для того чтобы текст категории был внизу категории: (для версии 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
 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

Edited by Headless

Share this post


Link to post
Share on other sites

Делала все по инструкции. Дополнительное поле для описания категории в админке появилось. Но пишет ошибку 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
 
Что мне сделать, чтобы все работало? Заранее спасибо. Я, конечно, чайник, но благодаря хорошим инструкциям надеюсь справиться.
 
 

Share this post


Link to post
Share on other sites

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

 

для версии 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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Спасибо огромнейшее! Все получилось (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']     = 'Подробное описание:';

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

Share this post


Link to post
Share on other sites

Доброго дня.

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

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'

 

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

Share this post


Link to post
Share on other sites

Для чистого 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']

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

и еще добавил кусок кода для 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

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  

  • 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.