fix: align stage preland picker and demo layout
No files matched your search
@@ -18,12 +18,15 @@
|
||||
- `rnd` — случайное значение по весам (`weights`), так делится трафик между вариантами;
|
||||
- неизвестное значение отбрасывается, отсутствующее — заменяется на `default`.
|
||||
|
||||
Ненастроенные параметры (`utm_source`, `keyword`, `subid` и любые другие) проходят как есть. Все метки уходят дальше
|
||||
в адрес сайта: сайт сохраняет их на воронку и шлёт в Keitaro.
|
||||
Ненастроенные параметры (`utm_source`, `keyword`, `subid` и любые другие) проходят как есть. Перед переходом
|
||||
Preland всегда формирует полный resolved-набор своих семи меток: явное допустимое значение остаётся, `rnd`
|
||||
разрешается по весам, отсутствующее получает `default`. Вместе с внешними рекламными параметрами этот набор
|
||||
уходит в `claim`, а затем сайт переносит его в `upscale`; ни один из семи параметров не должен пропадать только
|
||||
потому, что был назначен default.
|
||||
|
||||
| Метка | Что задаёт | Где |
|
||||
|---|---|---|
|
||||
| `indpic` | картинка-пример на преленде | `images/demo/<indpic>/` |
|
||||
| `indpic` | картинка-пример на преленде | `images/demo/` для `1`, `images/demo-N/` для `N > 1` |
|
||||
| `theme` | `light` / `dark` | преленд и сайт |
|
||||
| `degr` | пресет ухудшения превью «До» | сайт (#42) |
|
||||
| `registration` | `before` — PIN до оплаты, `after` — после | сайт, страница результата |
|
||||
@@ -76,6 +79,23 @@
|
||||
| `title` | нет | заголовок страницы («Улучшение изображения») |
|
||||
| `default_language` | нет | сейчас не действует: язык всегда `ru` |
|
||||
|
||||
### Демо-наборы
|
||||
|
||||
Preland хранит наборы ровно как Index, поэтому их можно переносить между проектами без переименования и
|
||||
перекладывания файлов:
|
||||
|
||||
```text
|
||||
images/demo/1/{source,result,thumb}.{jpg,webp,avif}
|
||||
images/demo/1/{source,result,thumb}_mob.avif
|
||||
...
|
||||
images/demo/5/...
|
||||
images/demo-2/1/...
|
||||
...
|
||||
images/demo-N/5/...
|
||||
```
|
||||
|
||||
`indpic=1` выбирает `images/demo/`, а `indpic=N` (`N > 1`) — `images/demo-N/`.
|
||||
|
||||
## Деплой на произвольный домен
|
||||
|
||||
**Требования.** PHP 8.0+ (боевой хостинг — 8.2), веб-сервер с `index.php` в роли индексного файла и **HTTPS**:
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?php
|
||||
|
||||
$demoBasePath = rtrim($assetsUriPrefix, '/') . "/images/demo/{$indpic}";
|
||||
$demoLocalPath = __DIR__ . "/../images/demo/{$indpic}";
|
||||
$demoDirName = 'demo' . ($indpic === '1' ? '' : '-' . $indpic);
|
||||
$demoBasePath = rtrim($assetsUriPrefix, '/') . "/images/{$demoDirName}";
|
||||
$demoLocalPath = __DIR__ . "/../images/{$demoDirName}";
|
||||
|
||||
$getAssetUrl = function (string $relativePath) use ($demoBasePath, $demoLocalPath): string {
|
||||
$fullPath = $demoLocalPath . '/' . ltrim($relativePath, '/');
|
||||
|
||||
@@ -7,7 +7,7 @@ $createApiUrl = ($apiHost ?? '') . '/api/images/public/create';
|
||||
$uploadPolicyApiUrl = ($apiHost ?? '') . '/api/images/public/upload-policy';
|
||||
$redirectUrlBase = $redirect_url_base ?? '';
|
||||
$redirectUrlUtm = $redirect_url_utm ?? '';
|
||||
$basePickerAccept = 'image/jpeg,image/png,image/gif,image/webp,image/bmp,image/avif,image/heic,image/heif,image/jxl,image/tiff,.jpg,.jpeg,.png,.gif,.webp,.bmp,.avif,.heic,.heif,.jxl,.tif,.tiff,.dng';
|
||||
$basePickerAccept = 'image/jpeg,image/png,image/gif,image/webp,image/bmp,image/avif,image/heic,image/heif,image/jxl,image/tiff,application/pdf,.pdf,.jpg,.jpeg,.png,.gif,.webp,.bmp,.avif,.heic,.heif,.jxl,.tif,.tiff,.dng';
|
||||
|
||||
?>
|
||||
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
# Preland stage: picker, UTM и структура примеров — план реализации
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** На `zoomstage.online` синхронизировать список файлов с Index, гарантировать полный resolved-набор UTM при claim-переходе и привести размещение demo-ассетов к Index.
|
||||
|
||||
**Architecture:** Preland остаётся единственным источником resolved UTM: `index.php` нормализует собственные семь меток, сохраняет внешние параметры и передаёт их в claim. Форма имеет полноценный синхронный `accept`, а API policy только подтверждает/актуализирует его. Демонстрационные файлы получают тот же layout, что и Index: `images/demo/<example>/` и `images/demo-N/<example>/`.
|
||||
|
||||
**Tech Stack:** PHP 8.2, inline JavaScript, Git, Gitea Actions staging deployment, Docker PHP checks.
|
||||
|
||||
**Spec:** пользовательское поручение от 2026-10-17 в текущем чате.
|
||||
|
||||
## Global Constraints
|
||||
|
||||
- Публиковать только ветку `staging`; `main` и production-домены не менять.
|
||||
- В переходе сохранять семь параметров `indpic`, `theme`, `degr`, `registration`, `bchoice`, `chb`, `tp` и все внешние scalar query-параметры, кроме `key`.
|
||||
- Поддерживаемые picker-форматы определяются тем же API contract, что и Index; drop остаётся server-side content gate.
|
||||
- Ассеты не конвертировать и не переименовывать; переместить без потери файлов.
|
||||
|
||||
## Review Focus
|
||||
|
||||
- Первый клик по picker до завершения `fetch(upload-policy)` всё равно предлагает PDF и raster-набор.
|
||||
- Type-in без UTM передаёт все семь default-значений в адрес claim.
|
||||
- `rnd` разрешается до редиректа и не утекает как `rnd`.
|
||||
- Внешняя `utm_source` и произвольный `subid` сохраняются в claim URL.
|
||||
- `indpic=2` читает ассеты из `images/demo-2/`, а `indpic=1` — из `images/demo/`.
|
||||
|
||||
### Task 1: Контракт picker и UTM
|
||||
|
||||
**Files:**
|
||||
- Modify: `components/form.php`, `tests/check-upload-admission.php`
|
||||
- Create: `tests/check-utm-redirect-contract.php`
|
||||
|
||||
- [ ] Написать проверки синхронного PDF/raster `accept` и полного type-in resolved URL; увидеть RED.
|
||||
- [ ] Добавить PDF в fallback `accept` и при необходимости явный единый builder query; увидеть GREEN.
|
||||
|
||||
### Task 2: Структура demo-ассетов
|
||||
|
||||
**Files:**
|
||||
- Move: `images/demo/1/*` → `images/demo/*`, `images/demo/2/*` → `images/demo-2/*`
|
||||
- Modify: `template.php`, `components/examples.php`
|
||||
- Create: `tests/check-demo-layout.php`
|
||||
|
||||
- [ ] Написать проверку Index-совместимого layout и путей рендеринга; увидеть RED.
|
||||
- [ ] Переместить файлы и заменить построение путей; увидеть GREEN.
|
||||
|
||||
### Task 3: Документация, stage-release и регрессия
|
||||
|
||||
**Files:**
|
||||
- Modify: `README.md`, `../known-base/Проекты/Преленд — anton-preland.md`, `../known-base/Инфраструктура/Версионируемый конфиг ZoomPixel Preland.md`
|
||||
|
||||
- [ ] Зафиксировать resolved UTM contract и asset layout.
|
||||
- [ ] Прогнать все Preland PHP checks в Docker, push только `staging`, проверить опубликованный stage HTML и assets.
|
||||
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 148 KiB |
|
Before Width: | Height: | Size: 298 KiB After Width: | Height: | Size: 298 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 523 KiB After Width: | Height: | Size: 523 KiB |
|
Before Width: | Height: | Size: 719 KiB After Width: | Height: | Size: 719 KiB |
|
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 163 KiB |
|
Before Width: | Height: | Size: 344 KiB After Width: | Height: | Size: 344 KiB |
|
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 303 KiB After Width: | Height: | Size: 303 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 332 KiB After Width: | Height: | Size: 332 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 325 KiB After Width: | Height: | Size: 325 KiB |
|
Before Width: | Height: | Size: 533 KiB After Width: | Height: | Size: 533 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 233 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 224 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 163 KiB |
|
Before Width: | Height: | Size: 344 KiB After Width: | Height: | Size: 344 KiB |
|
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 303 KiB After Width: | Height: | Size: 303 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 233 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 224 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |