Valori da condividere tra diverse pagine

  1. 3 years ago

    Salve
    sto utilizzando la trial di pubcoder per capire se mi può essere utile nella realizzazione di demo di app da mostrare ai clienti.

    Sto cercando di realizzare una cosa di per se molto semplice, ma non riesco a capire come si debba procedere perché, probabilmente, sto sbagliando approccio.

    Provo a semplificare molto.
    Quello che mi serve è una pagina con un certo numero di pulsanti. Ognuno di questi avrà una proprietà (l'alias, il testo, ecc.) univoca.
    Ho la necessità che al tap su un pulsante venga mostrata un'altra pagina in cui il testo del titolo dipende dal pulsante della pagina precedente.
    In pratica avrei la necessità di trasportare da una pagina all'altra delle variabili che consentano di mostrare alcune informazioni relative al pulsante sul quale ho fatto tap.

    Stavo provando ad utilizzare javascript ma ho avuto difficoltà nella gestione di una variabile globale che mantenesse il valore al cambio pagina.

    Ho immaginato che sia disponibile qualche wizard, ma non riesco a trovare nulla di adatto.
    Spero di essere stato chiaro

    grazie

  2. Angelo S

    1 Oct 2020 Administrator

    Buongiorno Giulio,
    per fare questo devi usare Javascript, ed in particolare il Local Storage

  3. Buongiorno Angelo
    Si, avevo già provato ad utilizzare localStorage, ma purtroppo non riesco a venirne a capo.
    Ho visto che anche sul forum è una domanda ricorrente, ma i link che invii non consentono (almeno a me) di capire dove sbaglio.
    Puoi mostrare un esempio anche banale di utilizzo?
    Anche semplicemente come impostare qualcosa di simile a questo nel codice del progetto o di una pagina?

    localStorage.setItem('myCat', 'Tom');

    e

    const cat = localStorage.getItem('myCat');

    E' evidente che sto sbagliando qualcosa, ma proprio non riesco a capire di cosa si tratta.

    Grazie mille

  4. Angelo S

    5 Oct 2020 Administrator

    Buongiorno Giulio,
    dovrebbe funzionare in realtà. Ho creato un progetto di esempio:
    https://www.dropbox.com/s/m880jcj6541yoct/LocalStorage%20Example.pubcoder?dl=0

    su che piattaforma stai facendo i test?

  5. ciao Angelo.
    Grazie mille per la risposta.
    In effetti ho risolto anche con il tuo progetto di esempio per puro caso. Mi spiego meglio.

    Una collega con la quale sto lavorando ha aperto prima di me il tuo esempio ed ha funzionato, ma quando l'ho aperto io ho avuto gli stessi problemi che avevo avuto in precedenza.

    A questo punto ho fatto una prova diversa. Anziché utilizzare come avevo fatto fino a quel momento "Anteprima" - "Anteprima veloce progetto", ho aperto direttamente nel browser ed ho scoperto che non solo funzionava il tuo progetto di esempio, ma funzionano anche tutte le prove precedenti che avevo fatto!
    Un po' mi rincuora perché stavo diventando pazzo ed invece la scelta era corretta, un po' mi amareggia per il tempo perso.

    A questo punto mi chiedo come mai. E' un bug di Pubcoder?

    La mia collega lavora su un mac ed ha la licenza regolare.
    Io ho un PC con Windows 10 e l'ultima versione (trial) di Pubcoder.

    Su che browser si basa l'anteprima veloce di Pubcoder?
    Possibile che dipenda da qualche impostazione del pc?
    Considera che non ho mai notato problemi di altro tipo.

  6. Angelo S

    6 Oct 2020 Administrator

    Ciao Giulio,
    l'anteprima veloce dovrebbe essere utilizzata solo per verificare la correttezza del layout, delle azioni e così via. Per test più approfonditi è sempre meglio verificare il funzionamento su quello che sarà l'output definitivo, visto che PubCoder ne supporta tanti (dall'EPUB all'XPUB, dall'HTML alle app) e ognuno ha le sue peculiarità (l'EPUB poi è un mondo a sé perché tutto dipende anche dal reader che verrà utilizzato).
    Per la cronaca, su Windows l'anteprima veloce di PubCoder si basa su IE, su Mac usa WebKit (al momento, per la precisione, UIWebView, quanto prima passeremo sulla più moderna WKWebView)

  7. Ciao Angelo.
    Grazie per la risposta. Adesso mi è tutto più chiaro.
    Proseguo con i test.

  8. 2 years ago

    Buongiorno Angelo,
    ho scaricato l'esempio per la gestione del local storage ma non ne sono venuto a capo...

    Sto cercando di realizzare una cosa di per se molto semplice, ma non riesco a capire come si debba procedere perché, probabilmente, sto sbagliando approccio.

    Cerco di spiegare il mio problema.

    In un ebook con diverse pagine devo nascondere/mostrare dei testi
    (quando clicco sul tasto "nascondi il testo" l'azione deve rimanere memorizzata anche per le pagine successive e viceversa per il tasto "mostra il testo")

    Ho pensato di inserire due pulsanti in tutte le pagine e di gestire l'azione tramite javascript e local storage utilizzando una classe "hide" legata o al testo o al div contenitore è possibile farlo?
    Funzionerebbe con un esportazione EPUB3?

    Grazie per la disponibilità

  9. A un pulsante (id=#obj186)

    ho assegnato il javascript:

    checkImgBtnClicked();

    function checkImgBtnClicked() {
    const clicked = localStorage.getItem('#obj186-clicked'); // if this is not set it will return null
    if (localStorage.getItem('#obj186-clicked')) {
    document.getElementById('hide').style.display ='none'; // to display
    } else {
    // add event listener for image button click(saveClicked function will be executed if user clicks on image button
    document.getElementById('#obj186').addEventListener('click', saveClicked);
    }
    }

    function saveClicked() {
    // set a flag in local storage that image button is clicked
    localStorage.setItem('#obj186-clicked', 'true');
    document.getElementById('hide').style.display ='none'; // to display
    }

  10. Angelo S

    23 Aug 2021 Administrator

    Ciao, in PubCoder non puoi settare direttamente l'id di un oggetto, quindi immagino che

    document.getElementById('hide').style.display ='none';

    non faccia nulla.

    Probabilmente hai assegnato a degli oggetti una classe "hide", in quel caso sostituisci quella riga con

    $(".hide").css("display", "none");
  11. Deleted 2 years ago by Angelo S
 

or Sign Up to reply!