AYLICRÉA Il tuto
AYLICRÉA

Tuto Site

Ricetta JSON

JSON autonome, cohérent, peignable par ShowPageSite. Remplacer tous les <…> par des uuid v7 uniques. Réutiliser les uuid style du tenant (data_api_big_style.json). Intention : back fill + wrap racine 100 % + column 60/90 (titre, image deco, CTA) + phrase wrap_text optionnelle.

1. Route + Page + Back + Action

{
  "p_route": [{
    "id": 0, "odr": 1,
    "uuid": "<R_HOME>",
    "enable": 1, "menu": 1, "gen": 0, "folder": 0, "push": 0,
    "uuid_folder": "", "origin": "", "ref": "",
    "transition": "fade",
    "name": { "fr": "accueil", "en": "home", "nl": "", "es": "", "it": "", "pt": "", "de": "" },
    "list_page": ["<P_HOME>"],
    "meta": {}, "pdf": {}
  }],
  "p_page": [{
    "id": 0, "odr": 1,
    "uuid": "<P_HOME>",
    "enable": 1, "gen": 0, "folder": 0,
    "type": "", "link": "", "uuid_link": "", "uuid_folder": "", "origin": "", "ref": "",
    "name": { "fr": "home", "en": "home", "nl": "", "es": "", "it": "", "pt": "", "de": "" },
    "width": 0, "height": 0,
    "background": "<B_HOME>",
    "image": {}
  }],
  "p_back": [{
    "id": 0, "odr": 1,
    "uuid": "<B_HOME>",
    "uuid_page": "<P_HOME>",
    "uuid_theme": "<THEME_SITE>",
    "uuid_gradient": "",
    "type": "", "origin": "",
    "color": [], "color_dark": [],
    "height_desktop": -1, "height_mobile": -1,
    "height_image_d": 0, "fit_image_d": 2,
    "height_image_m": 0, "fit_image_m": 2,
    "height_images_d": 0, "fit_images_d": 2,
    "height_images_m": 0, "fit_images_m": 2,
    "height_video_d": 0, "fit_video_d": 2,
    "height_video_m": 0, "fit_video_m": 2,
    "image": "", "image_m": "", "images": [], "images_m": [],
    "video": "", "video_m": "",
    "video_auto": 1, "video_btn": 0, "video_elapsed": 0,
    "test": []
  }],
  "p_action": [{
    "id": 0, "odr": 1,
    "uuid": "<A_CONTACT>",
    "name": "go-contact",
    "enable": 1,
    "type": "018ef76b-29d7-7892-b912-8dfa0c23f5f7",
    "data": "<R_CONTACT>",
    "list": []
  }]
}

<R_CONTACT> doit exister (route déjà en base, ou émise dans le même batch).

2. Views (table plate)

Commun : uuid_page: <P_HOME>, enable:1 desktop:1 mobile:1 layer:1 pop:0, type_m:"".

2.1 Wrap racine

{
  "id": 0, "odr": 1, "uuid": "<V_WRAP>",
  "uuid_page": "<P_HOME>", "uuid_folder": "",
  "layer": 1, "pop": 0,
  "type": "bca54f56-4e50-11ee-be56-0242ac120002",
  "type_m": "",
  "width": { "l": { "i": 100, "iT": "%" } },
  "height": { "l": { "i": 0 } },
  "axis_align": { "l": { "i": 2 } },
  "enable": 1, "desktop": 1, "mobile": 1
}

2.2 Column 60/90

{
  "id": 0, "odr": 1, "uuid": "<V_COL>",
  "uuid_page": "<P_HOME>", "uuid_folder": "<V_WRAP>",
  "layer": 1, "pop": 0,
  "type": "aee08b10-4e50-11ee-be56-0242ac120002",
  "width": { "l": { "i": 60, "iT": "%" }, "s": { "i": 90, "iT": "%" } },
  "height": { "l": { "i": 0 } },
  "axis_align": { "l": { "i": 0 } },
  "cross_align": { "l": { "i": 2 } },
  "pad": {
    "l": { "iT": 32, "iB": 32, "iL": 0, "iR": 0, "iTT": "px", "iTB": "px" },
    "s": { "iT": 16, "iB": 16, "iTT": "px", "iTB": "px" }
  },
  "uuid_theme": { "l": { "i": "<THEME_SITE>" } },
  "enable": 1, "desktop": 1, "mobile": 1
}

2.3 Titre odr 1

{
  "id": 0, "odr": 1, "uuid": "<V_TITLE>",
  "uuid_page": "<P_HOME>", "uuid_folder": "<V_COL>",
  "type": "8d669b32-e168-11ed-b5ea-0242ac120002",
  "width": { "l": { "i": 100, "iT": "%" } },
  "height": { "l": { "i": 0 } },
  "title": {
    "fr": "L’atelier qui digitalise votre métier",
    "en": "The workshop that digitises your trade",
    "nl": "", "es": "", "it": "", "pt": "", "de": ""
  },
  "style_title": "<STYLE_H1>",
  "pad": { "l": { "iB": 12, "eB": 12, "iTB": "px", "eTB": "px" } },
  "enable": 1, "desktop": 1, "mobile": 1, "layer": 1, "pop": 0
}

2.4 Image deco odr 2

{
  "id": 0, "odr": 2, "uuid": "<V_IMG>",
  "uuid_page": "<P_HOME>", "uuid_folder": "<V_COL>",
  "type": "01965644-fa21-7cf9-9204-f71b2d3dd60d",
  "width": { "l": { "i": 100, "iT": "%" } },
  "height": { "l": { "i": 1.2, "iT": "ratio" } },
  "image": "<FILE_HERO>",
  "box_fit": 2, "box_fit_m": 2,
  "radius": {
    "l": {
      "iTL": 16, "iTR": 16, "iBL": 16, "iBR": 16,
      "eTL": 16, "eTR": 16, "eBL": 16, "eBR": 16,
      "iTTL": "px", "iTTR": "px", "iTBL": "px", "iTBR": "px",
      "eTTL": "px", "eTTR": "px", "eTBL": "px", "eTBR": "px"
    }
  },
  "pad": { "l": { "iB": 20, "eB": 20, "iTB": "px", "eTB": "px" } },
  "enable": 1, "desktop": 1, "mobile": 1, "layer": 1, "pop": 0
}

2.5 Bouton odr 3 — height 48 / 44 px, pas de radius JSON

{
  "id": 0, "odr": 3, "uuid": "<V_BTN>",
  "uuid_page": "<P_HOME>", "uuid_folder": "<V_COL>",
  "type": "a0dc89fe-5b86-4a9d-a8b6-d3e2f07b7757",
  "width": { "l": { "i": 220, "iT": "px" }, "s": { "i": 160, "iT": "px" } },
  "height": { "l": { "i": 48, "iT": "px" }, "s": { "i": 44, "iT": "px" } },
  "title": {
    "fr": "Nous contacter",
    "en": "Contact us",
    "nl": "", "es": "", "it": "", "pt": "", "de": ""
  },
  "style_title": "<STYLE_BTN>",
  "uuid_theme": { "l": { "i": "<THEME_CTA>" } },
  "uuid_action": ["<A_CONTACT>"],
  "enable": 1, "desktop": 1, "mobile": 1, "layer": 1, "pop": 0
}

2.6 Phrase highlight — wrap_text

{
  "uuid": "<V_PHRASE>",
  "uuid_page": "<P_HOME>",
  "uuid_folder": "<V_COL>",
  "type": "94ba3c60-6c02-4ecb-8e3d-77a8f7516e91",
  "width": { "l": { "i": 100, "iT": "%" } },
  "height": { "l": { "i": 0 } },
  "axis_align": { "l": { "i": 2 }, "s": { "i": 0 } },
  "enable": 1, "desktop": 1, "mobile": 1, "layer": 1, "pop": 0
}

Enfants odr 1 "Du " / 2 "terrain" + gradient / 3 " à la " / 4 "facture" + gradient — même uuid_folder: "<V_PHRASE>". Espaces dans le title. axis_align.i = 2 → phrase centrée (TextAlign, pas spaceBetween).

T0–T18 — boucle obligatoire

TContrôle
T0Arbre : 1 racine flow, 0 orphelin, 0 cycle, A_CONTACT.data = uuid route
T1Nested % desktop : toile 1200, wrap 100 % = 1200, col 60 % = 720, titre 100 % = 720
T2Nested % mobile : toile 400, col s 90 % = 360 (recette). Si 80 % → 320, enfant 50 % = 160
T3Pad réduit la zone enfant (5 %+5 % sur 720 → inner 648)
T4Ratio image : 720 / 1.2 = 600. height: 0 sur image sizeFixe interdit
T5Bouton 48/44 px. Ne pas copier ratio 0.7 (≈ 300 px)
T6type_m: "" → fallback type. Type inconnu → shrink
T7pos dans column → ignoré
T8pos.iL = -1 → left = -widthInit (hide)
T9center.i = 1, width 200, zone 1000 → left = right = 400
T10Copy rewrite : hôte impose la boîte, title overlay si non vide
T11action_link + data uuid route. action_open_page = no-op
T12View uuid_theme = objet. style_title = string. Back theme = string
T13Visibilité AND. loc_text: "en" + UI en → absent
T14wrap_text odr 6–12, espaces dans title, gradient sur 7/9/11
T15axis_align 3 wrap_text = left, pas spaceBetween. Stack défaut 5 ≠ gradient 4
T16box_fit 0–6 dans sizeFixe. image_pos 1 = gauche
T17pos sans e* = mort. left+right = stretch. pop + folder rempli = pos mort
T18radius sur id_button = Stadium inchangé. radius sur id_image = pas de clip (deco)
T17 : pos sans e* = mort. T18 : radius sur id_button = Stadium inchangé. Vert : tests 18/18 — JSON peignable.