#!/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 "Модификация применится той же логикой, что и при установке на сервере."