Oggetti riutilizzabili in html

di il
4 risposte

Oggetti riutilizzabili in html

Salve a tutti,
sono un novizio web designer e sto creando il mio primo sito "serio".

La struttura delle pagine è molto semplice:
navbar
logo
contenuto della pagina (layout e contenuti cambiano da pagina a pagina)
contatti

Dato che il sito è in continua evoluzione e succede ogni tanto di dover aggiungere o rimuovere un tasto alla navbar o modificare i contatti, al momento sono costretto a cambiare l'html di ogni singola pagina precedentemente creata.

Volevo sapere se ci fosse un modo per creare un "oggetto" html (passatemi il termine) che venga richiamato da ogni singola pagina in maniera tale che se dovessi apportare una modifica al suddetto oggetto, non dovrei apportarla anche a tutte le pagine poichè richiamerebbero l'oggetto già modificato.

Ho pensato di creare un file di testo dove inserire il codice html della navbar (o della sezione contatti) e creare uno script javascript che legga il file e inserisca il codice html in uno span. Le eventuali modifiche sarebbe apportate al file di testo.

É una soluzione che potrebbe funzionare o ci sono metodi migliori?

Grazie in anticipo

4 Risposte

  • Re: Oggetti riutilizzabili in html

    Se capisco bene grosso modo vuol fare un...sitarello php
  • Re: Oggetti riutilizzabili in html

    Scusi, può spiegarsi meglio?
  • Re: Oggetti riutilizzabili in html

    Potresti provare a mettere il menu in un iframe
  • Re: Oggetti riutilizzabili in html

    Sicuramente è più comodo fare questo genere di lavori nel server con PHP o linguaggi simili, ma se questo non è possibile, ci sono almeno due modi di farlo in javascript (senza librerie).

    Web Components
    Queste API sono il metodo ufficiale per creare dei componenti HTML (in pratica quello che chiedi tu) da Javascript. Se si guarda la documentazione possono sembrare abbastanza complicati, ma nel tuo caso la seguente implementazione è più che sufficiente:

    File barraNavigazione.js:
    
    window.customElements.define('site-nav', class extends HTMLElement {
        constructor() { super(); }
        connectedCallback() {
            // INSERISCI IL TUO HTML QUI
            this.innerHTML = `
                <nav>
                    <a class="menu-item">Home</a>
                    <a class="menu-item">Chi siamo</a>
                </nav>
            `;
        }
    });
    
    In questo file definisci l'oggetto "site-nav". Nella funzione "connectedCallback" inserisci dell'HTML dentro all'oggetto. Per utilizzarlo è sufficente inserire nel codice html il tag <site-nav></site-nav>

    File index.html:
    
    <html>
        <head>
            <script src="./barraNavigazione.js"></script>
        </head>
        <body>
            <site-nav></site-nav>
        </body>
    </html>
    
    Ci sono molte altre cose da scoprire sui web components, se cerchi online troverai molte informazioni

    Fetch
    Come dicevi anche tu, è possibile salvare il codice html in un file (per l'esempio qui sotto, "site-nav.html") e poi caricarlo attraverso javascript. Per farlo puoi usare un codice simile a questo:
    
    (async function () {
        let data = await fetch('./site-nav.html');
        document.body.innerHTML = await data.text();
    })();
    
    Ovviamente questa è un'implementazione molto semplice dato che inserisce l'html direttamente nel body.

    Sia Fetch che i WebComponents sono supportati dai principali browser, ma se hai bisogno di supportare dei vecchi browser (o il famigerato Internet Explorer) potrebbe essere meglio se adatti l'esempio riportato sopra in modo da fargli usare una XMLHTTPRequest invece di una richiesta Fetch.

    Spero di esserti stato utile
Devi accedere o registrarti per scrivere nel forum
4 risposte