Итак, задача: «Сделать возможность убирать категории как страницы. По проставлению в чекбоксе в настройках категории. Не отображать страницы таких категорий, сделать их некликабельными в меню. Проводить адреса и хлебные крошки на вложенные категории без них». Как всегда разбил ее на этапы:

  • добавить checkbox на странице категории в админ панели и сохранить данные;
  • сделать некликабельными нужные категории;
  • поправить адреса и хлебные крошки.

Первый этап включает в себя добавление чекбокса в шаблон admin/view/template/catalog/category_form.tpl:

 

Далее необходимо в контроллере admin/controller/catalog/category.php добавить текстовую переменную:

$this->data['entry_hide_category'] = $this->language->get('entry_hide_category');

получить и обработать значение чекбокса:

 

Теперь добавим текстовую переменную в языковой файл admin/language/russian/catalog/category.php:

$_['entry_hide_category']    = 'Скрыть категорию:';

Последнее, что осталось сделать по первому этапу – это записать значение чекбокса в базу данных. Для этого необходимо в запросы на добавление данных в функциях addCategory() и editCategory() модели admin/model/catalog/category.php добавить:

hide_category = '" . (int)$data['hide_category'] . "',

Осталось только добавить колонку «hide_category» в таблицу «category» базы данных.

Второй этап я опишу на примере модуля «Категории» дефолтного для ОС. Для начала получим значение «hide_category» в контроллере модуля catalog/controller/module/category.php:

для подкатегорий:

'hide_category' => $child['hide_category'],

для категорий:

'hide_category' => $category['hide_category'],

Далее в шаблоне модуля catalog/view/theme/*/template/module/category.tpl делаем некликабельными нужные категории:

для категорий:

$class = !$category['hide_category']?'':'catery_disabled';

и в каждую ссылку добавляем <?php echo $class;?>

для подкатегорий:

<?php $style = !$ $child ['hide_category']?'':'style="pointer-events: none;"';?>

и в каждую ссылку добавляем <?php echo $style;?>

заменим  <?php if (($category['children']) && ($category['category_id'] == $category_id)) { ?>

на  <?php if ($category['children']) { ?>

далее добавляем скрипт:

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

Переходим к последнему этапу и для начала разберемся с хлебными крошками, для этого в контроллере catalog/controller/product/category.php в цикле, в котором формируются хлебные крошки, перед  $this->data['breadcrumbs'][] добавим if(!$category_info['hide_category']){  и после формирования крошек закроем if .

Последнее, что осталось сделать это убрать нужную категорию из урла. Для этого в функции getPathByCategory() контроллера catalog/controller/common/seo_pro.php (если вы его используете) перед «return» добавить:

либо же можно убрать нужный path во всех контроллерах, где выводятся категории. Покажу на примере все того же контроллера catalog/controller/module/category.php. Перед $children_data[]  ставим:

$parent_path = !$category['hide_category']?$category['category_id'] . '_':'';

теперь в этом массиве $category['category_id'] . '_'  меняем на $parent_path .

Mission accomplished! Как всегда, если есть какие-либо вопросы или пожелания просьба оставлять их в комментариях. До скорых встреч!