{% extends 'admin/base.html.twig' %}{% block title %}{{ mode == 'new' ? 'Новый товар' : 'Редактирование товара' }}{% endblock %}{% block heading %}{{ mode == 'new' ? 'Новый товар' : product.name }}{% endblock %}{% block page_actions %} <div class="text-sm-end"> <a class="btn btn-light me-1" href="{{ path('admin_dashboard') }}#products">Назад</a> {% if mode == 'edit' %} <a class="btn btn-outline-primary" href="{{ product.product_url }}" target="_blank" rel="noreferrer">Открыть товар</a> {% endif %} </div>{% endblock %}{% block content %} <form method="post"> <div class="row"> <div class="col-xl-8"> <div class="card"> <div class="card-body"> <div class="d-flex justify-content-between align-items-start flex-wrap gap-2 mb-3"> <div> <p class="text-muted mb-1">{{ mode == 'new' ? 'Manual' : product.external_code }}</p> <h5 class="mb-0">Основное</h5> </div> <button class="btn btn-primary" type="submit"><i class="mdi mdi-content-save-outline me-1"></i>Сохранить</button> </div> <div class="row g-3"> <div class="col-12"> <label class="form-label">Название</label> <input class="form-control" name="name" value="{{ product.name }}" required /> </div> <div class="col-md-3"> <label class="form-label">Цена</label> <input class="form-control" name="price_amount" type="number" step="0.01" min="0" value="{{ product.price_amount }}" /> </div> <div class="col-md-3"> <label class="form-label">Валюта</label> <select class="form-select" name="price_currency"> {% for currency in ['USD', 'RUB', 'EUR', 'KZT'] %} <option value="{{ currency }}" {{ product.price_currency == currency ? 'selected' : '' }}>{{ currency }}</option> {% endfor %} </select> </div> <div class="col-md-3"> <label class="form-label">Скидка, %</label> <input class="form-control" name="discount_percent" type="number" step="0.01" min="0" max="100" value="{{ product.discount_percent }}" placeholder="нет" /> </div> <div class="col-md-3"> <label class="form-label">Количество</label> <input class="form-control" name="stock_quantity" type="number" min="0" value="{{ product.stock_quantity }}" placeholder="не задано" /> </div> <div class="col-md-3"> <label class="form-label">Регион</label> <input class="form-control" name="region" value="{{ product.region }}" placeholder="RU" /> </div> <div class="col-md-3"> <label class="form-label">Steam appid</label> <input class="form-control" name="appid" value="{{ product.appid }}" placeholder="365590" /> </div> <div class="col-md-3"> <label class="form-label">Источник</label> <select class="form-select" name="source_id"> <option value="">Manual</option> {% for source in sources %} <option value="{{ source.id }}" {{ product.source_id == source.id ? 'selected' : '' }}>{{ source.name }}</option> {% endfor %} </select> </div> <div class="col-md-3"> <label class="form-label">Категория</label> <select class="form-select" name="category_id"> <option value="">Ручные товары</option> {% for category in categories %} <option value="{{ category.id }}" {{ product.category_id == category.id ? 'selected' : '' }}>{{ category.name }}</option> {% endfor %} </select> </div> <div class="col-md-4"> <label class="form-label">Provider</label> <input class="form-control" name="provider" value="{{ product.provider }}" /> </div> <div class="col-md-4"> <label class="form-label">Provider type</label> <input class="form-control" name="provider_type" value="{{ product.provider_type }}" /> </div> <div class="col-md-4"> <label class="form-label">Категория поставщика</label> <input class="form-control" name="provider_category_code" value="{{ product.provider_category_code }}" /> </div> <div class="col-md-6"> <label class="form-label">Внешний код</label> {% if mode == 'new' %} <input class="form-control" name="external_code" value="{{ product.external_code }}" placeholder="создастся автоматически" /> {% else %} <input class="form-control" value="{{ product.external_code }}" disabled /> {% endif %} </div> <div class="col-md-3 d-flex align-items-end"> <div class="form-check form-switch mb-2"> <input class="form-check-input" name="is_active" type="checkbox" value="1" id="productActive" {{ product.is_active ? 'checked' : '' }} /> <label class="form-check-label" for="productActive">Показывать</label> </div> </div> <div class="col-md-3 d-flex align-items-end"> <div class="form-check form-switch mb-2"> <input class="form-check-input" name="in_stock" type="checkbox" value="1" id="productStock" {{ product.in_stock ? 'checked' : '' }} /> <label class="form-check-label" for="productStock">В наличии</label> </div> </div> </div> </div> </div> </div> <div class="col-xl-4"> <div class="card"> <div class="card-body"> <p class="text-muted mb-1">Preview</p> <h5 class="mb-3">Витрина</h5> <div class="admin-preview-product"> <img src="{{ product.image_url ?: '/assets/product-pubg.png' }}" alt="" /> <h5>{{ product.name ?: 'Новый товар' }}</h5> <div class="d-flex align-items-center gap-2 flex-wrap"> <span class="fs-20 fw-semibold text-success">{{ product.price_label }}</span> {% if product.discount_label %}<span class="badge bg-success-subtle text-success">{{ product.discount_label }}</span>{% endif %} </div> <p class="text-muted mb-0">{{ product.delivery_label }}</p> </div> <div class="border rounded-2 mt-3"> <div class="d-flex justify-content-between p-2 border-bottom"><span class="text-muted">Slug</span><strong class="text-truncate ms-2">{{ product.slug ?: 'создастся автоматически' }}</strong></div> <div class="d-flex justify-content-between p-2 border-bottom"><span class="text-muted">Галерея</span><strong>{{ product.gallery_count }} фото</strong></div> <div class="d-flex justify-content-between p-2 border-bottom"><span class="text-muted">Формы заказа</span><strong>{{ product.forms_count }}</strong></div> <div class="d-flex justify-content-between p-2"><span class="text-muted">Raw/manual</span><strong>{{ product.is_manual ? 'manual' : 'provider' }}</strong></div> </div> </div> </div> </div> </div> <div class="row"> <div class="col-xl-6"> <div class="card"> <div class="card-body"> <p class="text-muted mb-1">Контент</p> <h5 class="mb-3">Описание и медиа</h5> <div class="mb-3"> <label class="form-label">Главная картинка</label> <input class="form-control" name="image_url" value="{{ product.image_url }}" placeholder="https://..." /> </div> <div class="mb-3"> <label class="form-label">Короткое описание HTML</label> <textarea class="form-control admin-codearea" name="short_description_html" rows="4">{{ product.short_description_html }}</textarea> </div> <div class="mb-3"> <label class="form-label">Полное описание HTML</label> <textarea class="form-control admin-codearea" name="description_html" rows="10">{{ product.description_html }}</textarea> </div> <div> <label class="form-label">Галерея JSON</label> <textarea class="form-control admin-codearea" name="gallery_json" rows="8">{{ product.gallery_json ?: '[]' }}</textarea> </div> </div> </div> </div> <div class="col-xl-6"> <div class="card"> <div class="card-body"> <p class="text-muted mb-1">Поставщик</p> <h5 class="mb-3">Формы и метаданные</h5> <div class="mb-3"> <label class="form-label">Forms JSON</label> <textarea class="form-control admin-codearea" name="forms_json" rows="5">{{ product.forms_json ?: '[]' }}</textarea> </div> <div class="mb-3"> <label class="form-label">Metadata JSON</label> <textarea class="form-control admin-codearea" name="metadata_json" rows="7">{{ product.metadata_json ?: '[]' }}</textarea> </div> {% if product.raw_json is defined %} <div> <label class="form-label">Raw JSON поставщика</label> <textarea class="form-control admin-codearea" rows="8" readonly>{{ product.raw_json }}</textarea> </div> {% endif %} </div> </div> </div> </div> {% if variants %} <div class="row"> <div class="col-12"> <div class="card"> <div class="card-body"> <p class="text-muted mb-1">Steam appid {{ product.appid }}</p> <h5 class="mb-3">Другие варианты этой игры</h5> <div class="table-responsive"> <table class="table table-hover align-middle mb-0"> <thead> <tr> <th>ID</th> <th>Название</th> <th>Цена</th> <th>Скидка</th> <th>Статус</th> <th class="text-end">Действие</th> </tr> </thead> <tbody> {% for variant in variants %} <tr> <td>{{ variant.id }}</td> <td> <h6 class="mb-0">{{ variant.name }}</h6> <small class="text-muted">{{ variant.external_code }}</small> </td> <td>{{ variant.price_label }}</td> <td>{{ variant.discount_label ?: 'нет' }}</td> <td>{{ variant.is_active ? 'активен' : 'скрыт' }} · {{ variant.in_stock ? 'в наличии' : 'нет' }}</td> <td class="text-end"><a class="btn btn-sm btn-light" href="{{ path('admin_product_edit', {'id': variant.id}) }}">Открыть</a></td> </tr> {% endfor %} </tbody> </table> </div> </div> </div> </div> </div> {% endif %} <div class="card sticky-bottom admin-sticky-actions"> <div class="card-body py-2 d-flex justify-content-end gap-2"> <a class="btn btn-light" href="{{ path('admin_dashboard') }}#products">Назад</a> <button class="btn btn-primary" type="submit">Сохранить товар</button> </div> </div> </form>{% endblock %}