← Torna ai documenti
VittRosPlat — Guida per sviluppatori
**Scopo:** ogni pagina deve includere solo:
- `lib/bootstrap.php` → inizializza ambiente (config, funzioni, sessione, DB)
- `lib/header.php` → header HTML + tema + CSS slice
- `lib/footer.php` → chiusura pagina e script comuni
Il resto (config statico/dinamico, funzioni comuni, tema) è centralizzato.
---
Architettura
flowchart TD
A[Pagina PHP es. modifica_post.php] --> B[lib/bootstrap.php]
B --> C[lib/functions.php]
B --> D[lib/config.php]
B --> E[lib/db_utilities.php]
A --> F[lib/header.php]
F --> G[vv_enqueue_theme_css()]
G --> H[css/theme-<nome>.css]
G --> I[css/theme-<nome>.d/vv-container.css + slice pagina]
A --> J[lib/footer.php]
Moduli principali
- **lib/bootstrap.php**
- include `functions.php` (helper generali)
- include `config.php` (costanti, ruoli, BASE_URL/FS, helper comuni)
- avvia sessione, carica `db_utilities.php`
- **lib/functions.php**
- helper generali (es. `vv_app_meta`, `getValoreConfigurazione`, `suggerisci_cartelle`, `debug_log`…)
- **lib/db_utilities.php**
- wrapper PDO (`db_select_row/all`, `draft_*`, ecc.)
- **lib/header.php**
- calcola `$BASE`, `$page_title`
- include badge/header slot se presenti
- richiama `vv_enqueue_theme_css()`
- **lib/footer.php**
- chiusura pagina, area script condivisi
- **css/theme-<nome>.css + css/theme-<nome>.d/**
- stile generale del tema + “slice” specifici per pagina (file con nome della pagina)
- includere in `{theme}.d/` anche `vv-container.css` (container/layout condivisi)
---
Tema attivo da DB
Il tema non è hardcoded: si legge da `last_conf`.
// functions.php
function getValoreConfigurazione($campo) {
$sql = "SELECT $campo FROM last_conf LIMIT 1";
$pdo = getPDO();
$stmt = $pdo->query($sql);
$row = $stmt ? $stmt->fetch() : null;
return $row[$campo] ?? null;
}
Nel bootstrap/header:
$tema_attivo = getValoreConfigurazione('tema_attivo') ?? 'default';
define('VV_THEME', 'theme-'.$tema_attivo); // es. theme-default, theme-birra
---
Nuovo file: `lib/helper.php`
- Helper **idempotenti** e **senza dipendenze DB**.
- Fornisce: `h()`, `vv_cache_bust_token()`, `vv_url()`, `vv_path()`, `vv_client_ip()`, `vv_resolve_theme()`, `vv_enqueue_theme_css()`, `vv_log()`.
- Può essere incluso presto nel bootstrap per garantire un set minimo di API in tutte le pagine/cron.
**Include consigliato nel bootstrap (prima di `config.php`):**
require_once __DIR__.'/helper.php';
---
Linee guida per le pagine
**In testa alla pagina:**
require_once __DIR__.'/lib/bootstrap.php';
require_once __DIR__.'/lib/header.php';
**Struttura contenuto:**
<main class="vv-container vv-container--with-top">
<div class="vv-scroll">
<!-- contenuto specifico pagina -->
</div>
</main>
**In coda:**
require_once __DIR__.'/lib/footer.php';
---
Convenzioni CSS del tema
- `css/theme-<nome>.css` è l’entrypoint generale.
- `css/theme-<nome>.d/` contiene moduli:
- `vv-container.css` → container/layout comune
- `<pagina>.css` o `<pagina>.cssr` → slice specifici: es. `diario_lista.css`
**Cambio tema:**
- Copia `theme-default.css` → `theme-birra.css`
- Copia `theme-default.d/` → `theme-birra.d/`
- Imposta `tema_attivo = 'birra'` in `last_conf`.
---
Safe-guards “ordine prima di tutto”
Anche se puntiamo all’ordine, aggiungiamo **idempotenza** per evitare fatal-error:
- tutti i file libreria usano `if (defined(...)) return;` o `function_exists`;
- gli helper comuni (in `helper.php`) non richiedono DB;
- usare `require_once` e prefissi `vv_` per evitare collisioni.
Esempio header di file:
if (defined('VITTROS_FUNCTIONS')) return;
define('VITTROS_FUNCTIONS', true);
---
TODO e pulizia
- [ ] Rimuovere hardcode `$body_classes = ['theme-default']` in `lib/header.php` e usare `VV_THEME`.
- [ ] Consolidare tutte le definizioni `.vv-container` dentro `css/theme-<nome>.d/vv-container.css`.
- [ ] Spostare in `helper.php` gli helper generici duplicati (escape, url, path, ip, cache-bust).
- [ ] Verificare il file anomalo `version_meta.php:` → rinominare in `version_meta.php` (il `:` finale è un refuso).
- [ ] Creare alias/redirect in VV per aprire questa documentazione da `/docs/`.
- [ ] Aggiungere esempi di “slot header” per pagine (es. `header_slot_modifica.php`).
---
Link rapido da VV alla documentazione
Nel progetto VV, aggiungi un link (nuova scheda):
<a href="https://mang3/docs/VittRosPlat.md" target="_blank" rel="noopener">📚 Developing Notes (VittRosPlat)</a>
(adatta l’URL alla tua pagina Documenti, es: `https://<host>/docs/VittRosPlat.md`)