• User •

    Grazie per il benvenuto e per la risposta.

    Scusa se sono stato poco chiaro, provo a spiegarmi.

    Ho una tabella (DB mysql) in cui memorizzo i seguenti dati:

    "prodotto", "macroprodotto", "magazzino", "quantità".

    Tramite PHP creo una pagina html che visualizza questi dati in forma tabellare.
    I dati visualizzati sono raggruppati per "macroprodotto", quindi il risultato sarà il seguente:

    _______________magazzino1 magazzino2 magazzino3
    macroprodotto A___quantità1__quantità2___quantità3
    +
    macroprodotto B___quantità1__quantità2___quantità3
    +

    Tra un macroprodotto e l'altro inserisco un pulsante (+) che dovrebbe attivare il dettaglio per prodotto del macroprodotto stesso come segue:

    _________________"magazzino1""magazzino2""magazzino3"
    "macroprodotto A"___quantità1____quantità2____quantità3

    __"prodotto1"_______quantità_____quantità_____quantità
    __"prodotto2"_______quantità_____quantità_____quantità
    __"prodotto3"_______quantità_____quantità_____quantità

    "macroprodotto B"___quantità_____quantità_____quantità
    +

    I records della tabella sono veramente tanti quindi non posso creare la pagina staticamente e nascondere o visualizzare parti della stessa perciò devo gestire il tutto dinamicamente.

    Con il il metodo DOM-based, per quel che ho potuto capire, posso creare le nuove righe della tabella ma non ho capito come leggere i dati dal DB e visualizzarli nelle strutture create.

    Con innerHtml riesco a farlo ma funziona solo su firefox mentre a me serve che funzioni su IE6 e IE7.

    Ho cercato qualche esempio a riguardo ma non ho ancora trovato nulla.

    Grazie in anticipo

    Saluti
    vnic96


  • Super User •

    Non riesco a capire come riescie a funzionare con innerHTML.
    InnerHTML serve per inserire del codice HTML in un nodo.
    Per esempio:

    
    document.getElementById("miodiv").innerHTML = '<strong>Esempio</strong>'
    
    

    Questo metodo non legge comunque i dati dal database.
    Per leggere i dati dal database devi effettuare una chiamata asincrona ad un'altra pagina. Questa richiesta va fatta tramite l'oggetto XMLHttpRequest.

    P.S.: Perchè non utilizzi un framework javascript, per esempio jQuery? Con poche righe faresti ciò che hai descritto.


  • User •

    Si, l'ho fatto proprio così ma non ho utilizzato div ma tbody.

    è possibile utilizzare un div all'interno di una tabella al posto del tbody in modo da poter appendere un gruppo di righe?


  • Super User •

    @vnic96 said:

    è possibile utilizzare un div all'interno di una tabella al posto del tbody in modo da poter appendere un gruppo di righe?

    No, non puoi.
    Però potresti appendere n righe, oppure una sola riga con una cella in cui è contenuto il div.


  • User •

    si ma così perdo l'allineamento con il resto della tabella.
    attualmente funziona così come dici tu (se ho ben capito il tuo msg) ma mi richiedono l'allineamento tra le righe del dettaglio e quelle che lo precedono


  • User •

    Potrei ovviare con xml.

    Potrei farmi un file xml per ogni macroprodotto e leggerlo con una funzione javascript e con il metodo dom potrei aggiungere e popolare le nuove righe.

    Non ho mai utilizzato xml, pensi possa essere troppo lento leggere un xml?


  • Super User •

    @vnic96 said:

    potrei ovviare con xml

    potrei farmi un file xml per ogni macroprodotto e leggerlo con una funzione javascript e con il metodo dom potrei aggiungere e popolare le nuove righe.

    Con il javascript non devi leggere obbligatoriamente un file xml, ma anche un file di testo o html.
    @vnic96 said:

    non ho mai utilizzato xml, pensi possa essere troppo lento leggere un xml?
    No, non è lento, anzi nelle web application più professionali viene usato xml o json.


  • User •

    grazie pe la pazienza

    appena possibile proverò a seguire questa strada

    Saluti
    vnic96


  • Super User •

    @vnic96 said:

    grazie pe la pazienza
    appena possibile proverò a seguire questa strada

    Figurati.
    Tieni in considerazione il suggerimento di utilizzare un framework come jQuery o altro equipollente. Ti semplifica di parecchio la vita.


  • User •

    rieccomi

    con javascript e xml funziona ma su IE7 è di una lentezza spaventosa!!

    IExplorer.exe occupa la cpu al 100% fino a quando non ha finito.

    Hai qualche suggerimento?

    Domani farò altre prove per capire se il problema è nella lettura del file xml o nella generazione della struttura tr/td che vado ad appendere al tbody


  • User •

    il problema sta nella costruzione della struttura. funziona perfettamente con FF ma con IE7 e' lentissima.

    ecco il codice

    
    var tbody = document.getElementById("details_"+tester);
    var prodotti = xml.getElementsByTagName("prodotto");
     for (var i = 0; i < prodotti.length; i++) {
         var e = prodotti*;//leggo i nodi
         var d1 = e.getElementsByTagName("D1")[0].firstChild.data;
         .
         .
         var dn = e.getElementsByTagName("Dn")[0].firstChild.data;
    
         row = tbody.insertRow(i + 1);
         row.insertCell(0).appendChild(document.createTextNode(""));
         row.insertCell(1).appendChild(document.createTextNode(""));             
         row.insertCell(2).appendChild(document.createTextNode(D1));
         row.insertCell(3).appendChild(document.createTextNode(""));
         row.insertCell(4).appendChild(document.createTextNode(D2));
         row.insertCell(5).appendChild(document.createTextNode(""));
         row.insertCell(6).appendChild(document.createTextNode(D3));
         row.insertCell(7).appendChild(document.createTextNode(""));
         row.insertCell(8).appendChild(document.createTextNode(D4));
         row.insertCell(9).appendChild(document.createTextNode(""));
         row.insertCell(10).appendChild(document.createTextNode(D5));
         row.insertCell(11).appendChild(document.createTextNode(""));
         row.insertCell(12).appendChild(document.createTextNode(D6));
         row.insertCell(13).appendChild(document.createTextNode(""));
         row.insertCell(14).appendChild(document.createTextNode(D7));
         row.insertCell(15).appendChild(document.createTextNode(""));
         row.insertCell(16).appendChild(document.createTextNode("D8"))
         row.insertCell(17).appendChild(document.createTextNode(""));
         row.insertCell(18).appendChild(document.createTextNode(D9));
         row.insertCell(19).appendChild(document.createTextNode(""));
         row.insertCell(20).appendChild(document.createTextNode(D10));
         row.insertCell(21).appendChild(document.createTextNode(""));
         row.insertCell(22).appendChild(document.createTextNode("D11"))
    }
    document.getElementById('img1_'+prod).style.display="none";
    document.getElementById('img2_'+prod).style.display="";
    document.getElementById('details_'+prod).style.display="";
    
    ```il bello e' che dovrei ancora aggiungere altre 26 colonne!!
    
    esiste un altro modo per creare le righe da aggiungere al tbody?
    
    grazie in anticipo
    
    Saluti
    vnic96

  • User •

    ho sostituito row.insertcell con createelement per tr e td

    cosi' sembra andare decisamente meglio.