fortuner Posted March 13, 2013 Share Posted March 13, 2013 Здравствуйте! Возникла необходимость добавить в каждую категорию после ее описания в mainbody блок с html-кодом. Есть два решения: временное и правильное. Временное - установить модуль произвольного HTML кода, типа HTML Box, и в нем все написать. Для каждой категории делать копию модуля и размещать в отдельном хуке. Тут есть трудность: для каждой категории нет отдельного хука, разместить не получилось. Правильное - Добавить в редакторе категорий отдельное поле с поддержкой редактора TinyMCE и размещать его содержимое в отдельном div-е после стандартного описания категории. Тут у меня просто не хватает знаний для правки кода. Хотя кажется, что задача не сложная. Форумчане, помогите решить вопрос первым или вторым методом! Думаю многим пригодится! Link to comment Share on other sites More sharing options...
fortuner Posted March 14, 2013 Author Share Posted March 14, 2013 Да, забыл указать версию - 1.5.3.1. Поможите, кто-нибудь Link to comment Share on other sites More sharing options...
fortuner Posted March 28, 2013 Author Share Posted March 28, 2013 Разобрался сам. И так, кому надо - читаем дальше. 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:').' <>;=#{}' ), Заходим в админку в редактор категорий, проверяем. Сразу под полем "описание" появилось второе поле с редактором Далее... 1 Link to comment Share on other sites More sharing options...
fortuner Posted March 28, 2013 Author Share Posted March 28, 2013 (edited) Заходим через phpMyAdmin в свою базу данных и в ветке ps_category_lang добавляем ветку с названием description_full Для тех, кто с phpMyAdmin на "вы" как это сделать: 1. Слева в столбик перечень ваших баз данных. Выбираете ту, которую вы создали для Prestashop во время установки. 2. В том же столбике слева откроется структура БД в алфавитном порядке. Ищем ps_category_lang и нажимаем 3. В меню нажимаем структура 4. После списка полей есть строчка с созданием нового поля. Опции такие: Одно поле после description. Имя description_full Разберетесь) На появившемся поле нажимаем "Редактировать" (карандаш) Ставим тип - текст, сравнение utf8-general-ci, По умолчанию - НЕТ. Остальное не трогаем Далее... Edited March 28, 2013 by fortuner (see edit history) 1 Link to comment Share on other sites More sharing options...
fortuner Posted March 28, 2013 Author Share Posted March 28, 2013 Запись в БД. Самое сложное. Если я где-то ошибся, поправьте. Но главное, что все работает. Открываем файл 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 с текстом, который вы ввели. Выводим этот текст на странице далее 1 Link to comment Share on other sites More sharing options...
fortuner Posted March 28, 2013 Author Share Posted March 28, 2013 (edited) Темерь вставим одну строчку в файле 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 March 28, 2013 by fortuner (see edit history) 1 Link to comment Share on other sites More sharing options...
Oleg2013 Posted July 19, 2013 Share Posted July 19, 2013 Проверяем, любуемся fortuner, вы не сталкивались с такой проблемой как скрывать текст в Спойлер? Просто у меня на сайте острая необходимость в нем, так как некоторые категории имеют много технической документации и если их не скрывать в спойлер, то это сильно затруднят навигацию по сайту пользователям. Есть ли у Вас какие идеи по этому поводу? Спасибо! Link to comment Share on other sites More sharing options...
fortuner Posted July 31, 2013 Author Share Posted July 31, 2013 Извините, что долго не отвечал, за темой не слежу. Скрыть в спойлер мне кажется не сложно. Давайте если вам не срочно, то я со временем сделаю и выложу инструкцию на форуме. Самому тоже надо, но пока не горит Уже есть готовые решения в разных фреймворках, например в Foundation 4. Нужно просто скопировать оттуда и пользоваться. Link to comment Share on other sites More sharing options...
Recommended Posts