Jump to content

Блок HTML в Категории или краткое и полное описание


Recommended Posts

Здравствуйте!

 

Возникла необходимость добавить в каждую категорию после ее описания в mainbody блок с html-кодом.

 

Есть два решения: временное и правильное.

 

Временное - установить модуль произвольного HTML кода, типа HTML Box, и в нем все написать. Для каждой категории делать копию модуля и размещать в отдельном хуке. Тут есть трудность: для каждой категории нет отдельного хука, разместить не получилось.

 

Правильное - Добавить в редакторе категорий отдельное поле с поддержкой редактора TinyMCE и размещать его содержимое в отдельном div-е после стандартного описания категории. Тут у меня просто не хватает знаний для правки кода. Хотя кажется, что задача не сложная.

 

Форумчане, помогите решить вопрос первым или вторым методом! Думаю многим пригодится!

Link to comment
Share on other sites

  • 2 weeks later...

Разобрался сам. И так, кому надо - читаем дальше.

1. Открываем файл AdminCategoriesController.php и где-то в районе 403 строки видим код:

array(
 'type' => 'textarea',
 'label' => $this->l('Description:'),
 'name' => 'description',
 'lang' => true,
 'rows' => 10,
 'cols' => 100,
 'hint' => $this->l('Invalid characters:').' <>;=#{}'
   ),

Это код, который отвечает за вывод поля в редакторе категорий.

Добавим еще одно поле, но с редактором HTML. После этого блока вставляем такой код:

array(
 'type' => 'textarea',
 'label' => $this->l('Description:'),
 'name' => 'description_full',
 'lang' => true,
 'rows' => 10,
 'cols' => 100,
 'autoload_rte' => true, /*поле, куда вводится текст, будет содержать редактор TinyMCE*/
 'hint' => $this->l('Invalid characters:').' <>;=#{}'
   ),

Заходим в админку в редактор категорий, проверяем. Сразу под полем "описание" появилось второе поле с редактором

Далее...

  • Like 1
Link to comment
Share on other sites

Заходим через phpMyAdmin в свою базу данных и в ветке ps_category_lang добавляем ветку с названием description_full

 

Для тех, кто с phpMyAdmin на "вы" как это сделать:

1. Слева в столбик перечень ваших баз данных. Выбираете ту, которую вы создали для Prestashop во время установки.

2. В том же столбике слева откроется структура БД в алфавитном порядке. Ищем ps_category_lang и нажимаем

3. В меню нажимаем структура

4. После списка полей есть строчка с созданием нового поля. Опции такие:

 

Одно поле после description. Имя description_full Разберетесь)

 

На появившемся поле нажимаем "Редактировать" (карандаш)

Ставим тип - текст, сравнение utf8-general-ci, По умолчанию - НЕТ. Остальное не трогаем

Далее...

Edited by fortuner (see edit history)
  • Like 1
Link to comment
Share on other sites

Запись в БД. Самое сложное. Если я где-то ошибся, поправьте. Но главное, что все работает.

Открываем файл classes\Category.php

 

Находим код:

/** @var string Description */
public $description;

 

после него вставляем:

/** @var string Description */
public $description_full;

 

Находим код:

'description' =>   array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString'),

После него ставим:

'description_full' =>  array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString'),

Находим дальше:

 if (is_array($this->description))
  foreach ($this->description as $lang => $description)
   $this->description[$lang] = Category::getDescriptionClean($description);
 else
  $this->description = Category::getDescriptionClean($this->description);

Ставим после:

 if (is_array($this->description_full))
  foreach ($this->description_full as $lang => $description_full)
   $this->description_full[$lang] = Category::getDescriptionClean($description_full);
 else
  $this->description_full = Category::getDescriptionClean($this->description_full);

И после строчки

'desc'=> $this->description,

ставим строчку

'desc_full'=> $this->description_full,

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

Выводим этот текст на странице далее

  • Like 1
Link to comment
Share on other sites

Темерь вставим одну строчку в файле category.tpl шаблона категории, который находится в папке вашего шаблона. У меня шаблон стандартный, поэтому у меня это themes\default\category.tpl

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

После вот этого блока вызова краткого описания категорий:

{if $category->description}
<div class="cat_desc">
{if strlen($category->description) > 120}
 <p id="category_description_short">{$category->description|truncate:120}</p>
 <p id="category_description_full" style="display:none">{$category->description}</p>
 <a href="#" onclick="$('#category_description_short').hide(); $('#category_description_full').show(); $(this).hide(); return false;" class="lnk_more">{l s='More'}</a>
{else}
 <p>{$category->description}</p>
{/if}
</div>
  {/if}
 </div>
 {/if}

 

Добавляем малюсенькую строчечку:

 {if $category->description_full}
<div class="cat_desc">
 <p>{$category->description_full}</p>
</div>
{/if}

 

Проверяем, любуемся :)

Edited by fortuner (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 3 months later...

Проверяем, любуемся :)

 

fortuner, вы не сталкивались с такой проблемой как скрывать текст в Спойлер?

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

 

Есть ли у Вас какие идеи по этому поводу?

Спасибо!

Link to comment
Share on other sites

  • 2 weeks later...

Извините, что долго не отвечал, за темой не слежу.

Скрыть в спойлер мне кажется не сложно. Давайте если вам не срочно, то я со временем сделаю и выложу инструкцию на форуме. Самому тоже надо, но пока не горит:)

Уже есть готовые решения в разных фреймворках, например в Foundation 4. Нужно просто скопировать оттуда и пользоваться.

Link to comment
Share on other sites

×
×
  • Create New...