Προς το περιεχόμενο

Dynamic site: Ajax + PHP Design question


drm

Προτεινόμενες αναρτήσεις

Δημοσ.

Έστω ένα δυναμικό site με php/mysql.

Θέλω να φορτώνω ενα μενοθ με προϊοντα από την db σε ένα <ol> </ol> tag

και θέλω να κάνω μπορώ να κάνω add/delete τα προϊόντα.

 

θέλω να το κάνω με Ajax...

 

οπότε βλέπω τρεις λύσεις...

 

1) Φτιαχνω το <ol> tag με php στο page load και μετα το χειρίζομαι με ajax (τα insert/deletes) κάνοντας ταυτόχρονα update to <ol>.innerHTML (με javascript) και την βάση δεδομένων.

 

2) Μετά από κάθε insert / delete ξαναφτιάχνω όλο το <ol> με php / ajax από την βάση.

 

3) Φτιάχνω κάποια ωραία αντικείμενα σε javascript, τα δημιουργώ on page load και τα συντηρώ καθώς ο χρήστης κάνει add/deletes στην βάση (μοιάζει πολύ με το 1)

 

4) Κάνω generate μεσα από την php javascript κώδικα (πχ έναν array με τα αντικείμενα) και τον ενσωματώνω είτε με echo είτε με eval στην σελίδα και μετά δημιουργώ τα πάντα με javascript

 

Ποια νομίζετε ότι είναι η καλύτερη τεχνική για ένα μεσαίου μεγέθους site.

Υπάρχει κάποια άλλη τεχνική (καλύτερη ?) αλλά πάντα με php/mysql ΧΩΡΙΣ java/flash ?

 

Κάθε σχετική απάντηση καλοδεχούμενη, όπως επίσης links σε σχετικά κείμενα

 

Ευχαριστώ πολύ για τον χρόνο που αφιερώσατε...

Δημοσ.

Σε παρόμοιες καταστάσεις εγώ κάνω το εξής:

 

Έχω ΠΑΝΤΑ ένα div (μοναδικό id) όπου εκεί μέσα έχω το δυναμικό μου περιεχόμενο ΑΛΛΑ και κάθε ας πούμε προϊόν είναι μέσα σε άλλο div (μοναδικό id).

 

Έτσι εάν θέλω να πάω να κάνω κάποια ενέργεια που αφορά ΜΟΝΟ ένα προϊόν τότε, κάνω AJAX και αλλάζω ΜΟΝΟ το περιεχόμενο εκείνου του προϊόντος (για αυτό χρησιμοποιώ div με μονδαικά id) ενώ σε περίπτωση που θέλω να κάνω κάποια ενέργεια που θα επηρεάζει ας πούμε ΟΛΑ τα προϊόντα τότε πάω και αλλάζω το πρώτο div που περιέχει όλα τα προϊόντα..

Δημοσ.

Θα πρότεινα ένα από τα δύο πρώτα και κυρίως το δεύτερο.

 

Αν κατάλαβα καλά τις λύσεις 3 και 4 εννοείς η βάση να ενημερώνεται στο τέλος (σε αντίθεση με τις 2 πρώτες λύσεις που η ενημέρωση γίνεται άμεσα).

 

Ούτως ή άλλως οι 2 πρώτες μου φαίνονται πιο πρακτικές.

Δημοσ.

Ευχαριστώ για τις απαντήσεις και τους δύο

 

 

@Uberalles_gr

Ερώτηση

 

Έστω ότι θες να προσθέσεις ένα νεο αντικείμενο,

Κάνεις το insert στην βάση.

 

Μετά πρέπει να κάνεις update το <div> που έχει όλα τα αντικείμενα:

α) Καλείς μία συνάρτηση που (μέ ajax) ξαναφτιάχνει όλο το <div>

ή

β) πάς και προσθέτεις με javascript μόνο στην αλλαγή στο <div> πχ

>
 var str = document.getElementById("ContainerDiv").innerHTML;
 document.getElementById("ContainerDiv").innerHTML = str + "<div id="Item_188">Αντικείμενο που μόλις προστέθηκε?</div>"

Δημοσ.

Όταν κάνεις UPDATE και DELETE δεν υπάρχει θέμα γιατί ξέρουμε ποιο είναι το div του προϊόντος και έτσι ότι μας γυρνάει η σελίδα που καλέσαμε με AJAX πάμε και το βάζουμε εκεί.

 

Στην περίπτωση του INSERT μπορούμε να κάνουμε αυτό που είπες..

Δεν υπάρχει ΝΟΗΜΑ να ΞΑΝΑ φτιάξουμε όλα τα προϊόντα όταν μπορούμε να πάμε να προσθέσουμε στο τέλος αυτό που κάναμε INSERT.

 

Μία περίπτωση που θα χρειαστεί να ξανά χτίσεις όλα τα προϊόντα είναι π.χ. εάν θες να πας να τους αλλάξεις με ποια σειρά εμφανίζονται ή με βάση ποιο πεδίο θες να γίνονται sort.. Ιδέες λέω που ίσως εσύ στην δικιά σου εφαρμογή δεν θα χρειαστείς

Δημοσ.

Να κάνω και μια άλλη πρόταση

 

Ajax και json

 

ότι και να προσθέτεις ή τέλος πάντων μεταβάλλεις στη βάση θα επιστρέφεται το σύνολο των αντικειμένων σε μορφή array (γι αυτό json). Αυτό το βρίσκω χρήσιμο ώστε να είσαι σίγουρος 100% ότι κάθε φορά ο χρήστης βλέπει ότι βρίσκεται στη βάση. Και μετά κάθε φορά από το array που θα λαμβάνεις ανανεώνεις το γενικό div.

 

Ως drawback μπορείς να πεις ότι μεταφέρεις περισσότερα στοιχεία πήγανε έλα και κάνεις την ίδια δουλειά πολλές φορές αλλά σε μεσαίου μεγέθους site δε νομίζω ότι θα επηρεαστεί η απόδοσή του.

 

απλά μία πρόταση :-)

Δημοσ.

Τελικά για την ώρα καταλήγω σε κάτι σαν και αυτό που πρότεινε ο uberalles ...

 

Εχει φυσικα το μειονέκτημα που αναφέρει ο hartzoua αλλά για την ώρα νομίζω ότι μπορώ να το ανεχτώ... μελλοντικά θα βρώ κάποια λύση και σε αυτό (ίσως τακτικά updates - ίσως κάποο notification από τον server ότι κάτι άλλαξε...)

Δημοσ.

Το μειονέκτημα είναι ότι επειδή θα τραβάω τα data από τον server μόνο στο onpageload και μετά θα συντηρώ τις αλλαγές τοπικά (χωρίς να τραβάω συνέχεια από την db όλα τα αντικείμενα) ο κάθε client δεν θα ενημερώνεται για τις αλλαγές που έκαναν οι υπόλοιποι clients μέχρι να ξαναφωρτώσει την σελίδα...

 

Δεν λέω ότι δεν λύνεται, απλά ότι είναι ένα θέμα με την τρέχουσα σχεδίαση...

Δημοσ.

Ναι σε αυτό έχεις δίκιο εάν ακολουθήσεις την τακτική να ενημερώνεις το κάθε div ξεχωριστά γιατί εάν ενημερώνεις ΚΑΘΕ φορά το div που περιέχει όλα τα προϊόντα δεν θα έχεις πρόβλημα

Δημοσ.

Μετά από σκέψη και δοκιμές αποφάσισα να φτιάξω όλο το site σε javascript με εξαίρεση το db communication (php).

 

Νομίζω αυτό θα μου δώσει μεγαλύτερη ευελιξία αργότερα.

 

Για την ώρα η ιδέα είναι ότι έχω φτιάξει αντικείμενα σε javascript.

 

Μέσα από php δημιουργώ ένα string που περιέχει ένα new Item(...) για κάθε αντικείμενο και το κάνω eval - Ναι το ξέρω, θα μπορούσα με JSON... (θα το δω αργότερα - χρειάζομαι ένα πρωτότυπο άμεσα)

 

Από εκεί και πέρα κάθε αλλαγή (update, instert, delete) στέλνετε αυτόματα στην βάση (ajax/php) και ανανεώνεται το GUI του σιτε με javascript (χωρις reload).

 

Θα δώ πόσο μπορώ να τραβήξω αυτήν την ιδέα, αλλά μάλλον θα προσπαθήσω να φτάξω ένα σιτε που θα έχει μόνο μία σελίδα - όλα (user / item editing) θα γίνονται στην ίδια σελίδα μέσω φορμών που θα εμφανίζονται σε thickboxes...

 

Μόλις το site φτάσει σε κάποιο ικανοποιητικό επίπεδο θα ενημερώσω....

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...