Come implementare l'applicazione PHP multi-tema

0

Sto sviluppando un'applicazione che gestirà molti negozi virtuali e vorrei avere molti temi che l'utente può scegliere in qualsiasi momento. Vorrei sapere qual è l'ideologia principale per implementarlo. Lo svilupperò usando Symfony 2.

Stavo pensando di implementare viste e risorse per ogni tema

  • Risorse
    • viste
      • tema 1
        • Prodotto
          • list.html
          • Detail.html
          • ...
      • tema 2
        • Prodotto
          • list.html
          • Detail.html
          • ...
      • tema 3
        • Prodotto
          • list.html
          • Detail.html
          • ...
    • pubblica
      • risorse di tema 1
        • js
        • css
        • immagini
        • ...
      • risorse di tema 2
        • js
        • css
        • immagini
        • ...
      • risorse di tema 3
        • js
        • css
        • immagini
        • ...

E nel database ogni utente avrebbe le proprie preferenze (nome del tema, colore, ecc ...).

Sto cercando un'implementazione che mi permetta di aggiungere qualsiasi tipo di tema. Ad esempio, un tema, nella pagina principale l'icona del carrello andrà in una pagina del carrello e un altro tema, l'icona del carrello mostrerà una finestra che mostra i prodotti.

Qual è l'approccio migliore per implementare un'applicazione web multitema? Cosa mi manca?

    
posta dextervip 06.05.2013 - 02:45
fonte

2 risposte

1

Sono secondo a ciò che scrive Jim Martens. Purtroppo non posso ancora lasciare un commento a causa di un numero troppo basso di punti di replicazione qui sopra.

Consentitemi di aggiungere questo, tuttavia:

Qualche anno fa, circa 10 anni, in realtà, ho emulato il progetto CMS da cui joomla era biforcato da zero, con diverse funzionalità come un'interfaccia completamente multilingue o una base di codice estremamente semplificata con meno generalizzazione. Per semplificare il backend di temi, ho usato diversi CSS senza modificare il file di interfaccia - il layout, era nel mio index.php . L'ho fatto nel tempo, tuttavia, devo aggiungere alcune funzionalità su piccola scala per generare dinamicamente il CSS. La struttura è rimasta la stessa.

Se stai utilizzando un database per il tuo progetto, che presumo tu faccia, potresti aggiungere su una pagina un campo che indica quale tema usare per esso. Oppure puoi categorizzare l'albero dicendo, anziché quale tema usare, la pagina padre della pagina per ereditare quel valore da lì. Il nodo base di un ramo di pagine deve quindi - come voce di database - avere il campo con il nome del tema.

Un approccio facilmente gestibile sarebbe mantenere un file di layout separato per ramo di pagine e lasciare che ereditino lo stile e il layout dal rispettivo nodo genitore, quindi in pratica si sostituirà solo il contenuto in quei file. Il layout sarebbe stato corretto, anche lo stile. Se, tuttavia, hai bisogno di uno stile regolabile dinamicamente, ovvero senza ricaricare la pagina, fallo con JavaScript.

Potresti anche avere un singolo file con il layout di base, scrivere generatori di layout specifici e riscrivere i percorsi in GET tramite .htaccess su un httpd di Apache o nella configurazione di nginx. Ma questo è ovviamente più impegnativo, anche se facilmente scalabile.

    
risposta data 30.07.2013 - 14:14
fonte
0

Forse sto fraintendendo ciò che intendi con tema, ma un tema è uno stile per me. Quindi la struttura stessa rimane la stessa, ma lo stile visivo può cambiare. Per avere un'idea di cosa intendo, ecco alcuni link allo stesso sito con lo stesso contenuto, solo con stili diversi:

Per questo obiettivo non hai bisogno di viste differenti solo diversi CSS. Se si desidera modificare il comportamento dell'applicazione, in pratica, sarà necessario ricreare il codice (che aumenta la duplicazione). In caso di modifica del codice (anche JS fa parte di un'applicazione Web), è necessario modificare il codice collegato di tutti i temi.

Il tuo approccio mostrato si adatta meglio a un'applicazione multi-comportamento che offre diverse forme di interazione con esso. Per tale obiettivo avrai bisogno di JS diversi e di viste diverse (dato che anche l'HTML sarà diverso).

Dato che in pratica metti insieme la funzione e lo stile in un tema, ti consiglio di dividerlo. Avere diverse possibilità di stile solo con le modifiche CSS (usa un sacco di classi CSS nell'HTML in modo da poter cambiare l'aspetto visivo). Per le modifiche funzionali, dovresti consentire a un'opzione nell'applicazione di scegliere quale funzione deve essere utilizzata.

    
risposta data 30.07.2013 - 11:02
fonte