diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index cc00087d..e27d88be 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -134,6 +134,11 @@ jobs:
MODULE_ROOT="module/oc_telegram_shop/upload/oc_telegram_shop"
echo "${{ needs.version_meta.outputs.tag }}" > "${MODULE_ROOT}/version.txt"
+ - name: Set version in install.xml
+ run: |
+ TAG="${{ needs.version_meta.outputs.tag }}"
+ sed -i "s#.*#${TAG}#" module/oc_telegram_shop/install.xml
+
- name: Build module
run: |
bash scripts/ci/build.sh "${GITHUB_WORKSPACE}"
diff --git a/Makefile b/Makefile
index 86f7ebb4..5eed9b8d 100644
--- a/Makefile
+++ b/Makefile
@@ -45,6 +45,9 @@ dev-admin:
rm -rf src/upload/admin/view/javascript/telecart && \
cd frontend/admin && npm run dev
+ocmod:
+ ./scripts/apply_ocmod.sh
+
lint:
docker compose exec -w /module/oc_telegram_shop/upload/oc_telegram_shop web bash -c "./vendor/bin/phpstan analyse"
diff --git a/module/oc_telegram_shop/install.xml b/module/oc_telegram_shop/install.xml
new file mode 100644
index 00000000..1542bd6f
--- /dev/null
+++ b/module/oc_telegram_shop/install.xml
@@ -0,0 +1,30 @@
+
+
+ TeleCart
+ telecart
+ 1.0
+ TeleCart
+ https://docs.telecart.pro/
+
+
+
+ 'Настройки',
+ 'href' => $this->url->link('extension/module/tgshop', 'user_token=' . $this->session->data['user_token'], true),
+ 'children' => array()
+ );
+ $data['menus'][] = array(
+ 'id' => 'menu-telecart',
+ 'icon' => 'fa-telegram',
+ 'name' => 'TeleCart',
+ 'href' => '',
+ 'children' => $telecart
+ );
+ // END TeleCart modification
+
+ ]]>
+
+
+
diff --git a/scripts/apply_ocmod.sh b/scripts/apply_ocmod.sh
new file mode 100755
index 00000000..e1caa852
--- /dev/null
+++ b/scripts/apply_ocmod.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+# Создаёт симлинк install.xml в system/ OpenCart внутри контейнера.
+# OpenCart при «Обновить» (Расширения → Модификации) подхватывает файлы
+# DIR_SYSTEM . '*.ocmod.xml' и применяет их своей логикой — так же, как на сервере.
+#
+# Использование:
+# ./scripts/apply_ocmod.sh
+#
+# Переменные (по умолчанию из docker-compose.yaml):
+# CONTAINER — сервис/контейнер (по умолчанию web)
+# TARGET_DIR — каталог system в контейнере (по умолчанию /web/upload/system)
+# SOURCE — путь к install.xml в контейнере (по умолчанию /module/oc_telegram_shop/ocmod/install.xml)
+#
+# После запуска: открой админку → Расширения → Модификации → нажми «Обновить».
+
+set -euo pipefail
+
+CONTAINER="${CONTAINER:-web}"
+TARGET_DIR="${TARGET_DIR:-/web/upload/system}"
+SOURCE="${SOURCE:-/module/oc_telegram_shop/install.xml}"
+TARGET="$TARGET_DIR/telecart.ocmod.xml"
+
+if ! docker compose exec "$CONTAINER" test -f "$SOURCE" 2>/dev/null; then
+ echo "Ошибка: в контейнере $CONTAINER не найден $SOURCE" >&2
+ echo "Проверь, что том ./module примонтирован в контейнер." >&2
+ exit 1
+fi
+
+if ! docker compose exec "$CONTAINER" test -d "$TARGET_DIR" 2>/dev/null; then
+ echo "Ошибка: в контейнере $CONTAINER не найден каталог $TARGET_DIR" >&2
+ exit 1
+fi
+
+docker compose exec "$CONTAINER" bash -c "
+ if [ -e '$TARGET' ]; then
+ if [ -L '$TARGET' ]; then
+ current=\$(readlink '$TARGET')
+ if [ \"\$current\" = '$SOURCE' ]; then
+ echo 'Симлинк уже указывает на модуль: $TARGET'
+ exit 0
+ fi
+ fi
+ rm -f '$TARGET'
+ fi
+ ln -sf '$SOURCE' '$TARGET'
+ echo 'Симлинк создан в контейнере: $TARGET → $SOURCE'
+"
+
+echo ""
+echo "Дальше: открой админку OpenCart → Расширения → Модификации → нажми «Обновить»."
+echo "Модификация применится той же логикой, что и при установке на сервере."