feat(spa): show navbar with app logo and app name

This commit is contained in:
2025-10-25 18:48:47 +03:00
parent ed8592c19d
commit c3c0d6d2c1
9 changed files with 174 additions and 76 deletions

View File

@@ -378,24 +378,22 @@ TEXT,
],
'module_tgshop_app_name' => [
'hidden' => true,
'required' => true,
'type' => 'text',
'placeholder' => 'Введите название Телеграм магазина',
'placeholder' => 'Без названия',
'help' => <<<TEXT
Отображается в заголовке Telegram Mini App при запуске, а также используется как подпись
под иконкой, если пользователь добавит приложение на главный экран своего устройства.
Рекомендуется короткое и понятное название (до 20 символов).
Если оставить пустым, то название выводиться не будет.
TEXT,
],
'module_tgshop_app_icon' => [
'hidden' => true,
'type' => 'image',
'help' => <<<TEXT
Изображение, которое будет отображаться в Telegram Mini App и на рабочем столе устройства,
если пользователь добавит приложение как ярлык. Используйте квадратное изображение PNG или SVG,
размером не менее 192×192 пикселей, а лучше 512x512.
если пользователь добавит приложение как ярлык. Рекомендуется использовать квадратное изображение PNG или SVG,
размером 32×32 пикселей.
TEXT,
],

View File

@@ -85,9 +85,9 @@
{# Image #}
{% elseif item['type'] == 'image' %}
<a href="" id="thumb-image" data-toggle="image" class="img-thumbnail">
<a href="" id="thumb-image-{{ settingKey }}" data-toggle="image" class="img-thumbnail">
<img src="{{ attribute(_context, settingKey) }}"
data-placeholder="{{ attribute(_context, settingKey) }}"
data-placeholder="https://placehold.co/100x100?text=Удалено"
/>
</a>
<input type="hidden"
@@ -95,8 +95,7 @@
value="{{ attribute(_context, settingKey) }}"
id="{{ settingKey }}"
/>
{# Image #}
{# Textarea #}
{% elseif item['type'] == 'textarea' %}
<textarea name="{{ settingKey }}"
rows="{{ item['rows'] }}"
@@ -104,7 +103,6 @@
id="{{ settingKey }}"
class="form-control"
>{{ attribute(_context, settingKey) }}</textarea>
{# Products #}
{% elseif item['type'] == 'products' %}
<input type="text" value="" placeholder="Начните вводить название товара..." id="{{ settingKey }}-input" class="form-control"/>
@@ -450,4 +448,13 @@
</div>
</div>
</div>
{{ footer }}
{{ footer }}
<script>
const $element = $('#thumb-image-module_tgshop_app_icon');
$('#button-clear').on('click', function() {
$element.find('img').attr('src', $element.find('img').attr('data-placeholder'));
$element.parent().find('input').val('');
$element.popover('destroy');
});
</script>

View File

@@ -37,11 +37,12 @@ class SettingsHandler
$icons['icon180'] = $this->imageTool->resize($appIcon, 180, 180, 'no_image.png', 'png'). '?_v=' . $hash;
$icons['icon152'] = $this->imageTool->resize($appIcon, 152, 152, 'no_image.png', 'png'). '?_v=' . $hash;
$icons['icon120'] = $this->imageTool->resize($appIcon, 120, 120, 'no_image.png', 'png'). '?_v=' . $hash;
$appIcon = $this->imageTool->resize($appIcon, 32, 32, 'no_image.png', 'png'). '?_v=' . $hash;
}
return new JsonResponse([
'app_name' => $this->settings->get('app_name'),
'app_icon' => $appIcon ? $appIcon . '?_v=' . $hash : '',
'app_icon' => $appIcon ?? '',
'app_icon192' => $icons['icon192'] ?? '',
'app_icon180' => $icons['icon180'] ?? '',
'app_icon152' => $icons['icon152'] ?? '',