Мелкая доработка, которая экономит время каждый рабочий день: ID категории нужен постоянно — для настройки модулей, для SEO-правил, для отладки, — а в стандартном списке категорий OpenCart его нет. Приходится открывать категорию и вылавливать идентификатор из адресной строки.
Задача
При подготовке файлов импорта товаров нужно знать ID категорий. По умолчанию в списке категорий OpenCart/ocStore идентификаторы не отображаются.
Решение
Модифицируем шаблон списка категорий, добавив колонку ID.
Шаг 1: Добавление заголовка столбца
Откройте файл /admin/view/template/catalog/category_list.tpl (или category_list.twig в новых версиях).
Найдите строку с заголовками таблицы и добавьте колонку ID:
<!-- Найти -->
<td class="text-left"><?php echo $column_name; ?></td>
<!-- Добавить ПЕРЕД этой строкой -->
<td class="text-center" style="width: 60px;">ID</td>Шаг 2: Вывод значений ID
Найдите цикл вывода категорий и добавьте вывод ID:
<!-- Найти -->
<td class="text-left"><?php echo $category['name']; ?></td>
<!-- Добавить ПЕРЕД этой строкой -->
<td class="text-center"><?php echo $category['category_id']; ?></td>Полный пример для OpenCart 3.x
<!-- /admin/view/template/catalog/category_list.twig -->
<table class="table table-bordered table-hover">
<thead>
<tr>
<td style="width: 1px;" class="text-center">
<input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" />
</td>
<td class="text-center" style="width: 60px;">ID</td>
<td class="text-left">
{% if sort == 'name' %}
<a href="{{ sort_name }}" class="{{ order|lower }}">{{ column_name }}</a>
{% else %}
<a href="{{ sort_name }}">{{ column_name }}</a>
{% endif %}
</td>
<td class="text-right">{{ column_sort_order }}</td>
<td class="text-right">{{ column_action }}</td>
</tr>
</thead>
<tbody>
{% if categories %}
{% for category in categories %}
<tr>
<td class="text-center">
{% if category.category_id in selected %}
<input type="checkbox" name="selected[]" value="{{ category.category_id }}" checked="checked" />
{% else %}
<input type="checkbox" name="selected[]" value="{{ category.category_id }}" />
{% endif %}
</td>
<td class="text-center">
<code>{{ category.category_id }}</code>
</td>
<td class="text-left">{{ category.name }}</td>
<td class="text-right">{{ category.sort_order }}</td>
<td class="text-right">
<a href="{{ category.edit }}" class="btn btn-primary">
<i class="fa fa-pencil"></i>
</a>
</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td class="text-center" colspan="5">{{ text_no_results }}</td>
</tr>
{% endif %}
</tbody>
</table>Модификация через OCMOD (рекомендуется)
Для сохранения изменений при обновлении используйте OCMOD:
<?xml version="1.0" encoding="UTF-8"?>
<modification>
<name>Show Category ID in Admin</name>
<code>show_category_id</code>
<version>1.0</version>
<author>Developer</author>
<link>https://example.com</link>
<file path="admin/view/template/catalog/category_list.twig">
<!-- Добавляем заголовок -->
<operation>
<search><![CDATA[<td class="text-left">]]></search>
<add position="before"><![CDATA[
<td class="text-center" style="width: 60px;">ID</td>
]]></add>
</operation>
<!-- Добавляем значение -->
<operation>
<search><![CDATA[<td class="text-left">{{ category.name }}</td>]]></search>
<add position="before"><![CDATA[
<td class="text-center"><code>{{ category.category_id }}</code></td>
]]></add>
</operation>
</file>
</modification>Сохраните как show_category_id.ocmod.xml и загрузите через Extensions → Installer.
Результат
После изменений в списке категорий появится колонка ID:
| ☑ | ID | Название категории | Порядок | Действия |
|---|---|---|---|---|
| ☐ | 1 | Электроника | 1 | ✏️ |
| ☐ | 2 | Одежда | 2 | ✏️ |
| ☐ | 3 | └ Мужская | 1 | ✏️ |
| ☐ | 4 | └ Женская | 2 | ✏️ |
Итоги
Правьте через OCMOD, а не файлы напрямую. Прямая правка выглядит быстрее ровно один раз — до ближайшего обновления, которое молча вернёт исходный файл. Причём заметите вы это не сразу: столбец просто исчезнет, а связать это с обновлением, случившимся неделю назад, будет сложно.
После установки модификации обновите кэш через Extensions → Modifications → Refresh — без этого изменения не применятся, и вы будете искать ошибку в коде, которого система ещё не видела.
Тот же приём работает для товаров, заказов и покупателей. Если ID регулярно нужен вам в одном списке, он понадобится и в остальных; сделать все сразу дешевле, чем возвращаться к задаче каждый раз.
Общее правило для доработок админки на любой CMS: любое изменение, сделанное правкой файлов ядра, живёт до следующего обновления. Штатный механизм расширения (OCMOD в OpenCart, /local/ в Битриксе, плагины в WordPress) существует именно для этого — и обход его ради экономии двадцати минут всегда оказывается плохой сделкой, потому что расплачиваться приходится тогда, когда никто не помнит про эту правку.
Комментарии
Система комментариев скоро будет подключена. А пока вы можете написать мне в Telegram или на email.