Εμφάνιση μηνυμάτων προς τον χρήστη σε διαδικτυακές εφαρμογές. PHP AJAX CRUD: δημιουργία, διαγραφή, επεξεργασία εγγραφών στη βάση δεδομένων MySQL Σενάριο PHP για λειτουργίες CRUD

ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ

Το ενσωματωμένο σύστημα ειδοποιήσεων, για πρώτη φορά στο Joomla, επιτρέπει στην εφαρμογή σας να ενημερώνει τον χρήστη (ή την ομάδα χρηστών) για διάφορα διαφορετικά συμβάντα. Σκεφτείτε τις ειδοποιήσεις ως σημαντικές ειδοποιήσεις που ο χρήστης θα ενδιαφερόταν να διαβάσει και παρακολουθήστε τις.
Οι ειδοποιήσεις μπορούν να δημιουργηθούν παντού. Στο στοιχείο ή στις προσθήκες σας και αργότερα εμφανίζεται στο σύστημα ειδοποιήσεων JomSocial.
Αυτό το σεμινάριο θα σας δείξει πώς, αλλά επειδή δεν έχουμε ιδέα για οποιοδήποτε στοιχείο τρίτου μέρους που θα μπορούσαμε να χρησιμοποιήσουμε:) τα παραδείγματα θα γίνουν σε μια προσθήκη κοινότητας που θα ενεργοποιηθεί στο συμβάν onAfterProfileUpdate
Εάν δεν ξέρετε πώς να δημιουργήσετε μια προσθήκη που θα ενεργοποιηθεί σε αυτό το συμβάν, σας προτείνουμε να ελέγξετε αυτόν τον οδηγό

Εφαρμόζοντάς το στο στοιχείο σας ούτως ή άλλως

Όπως αναφέρθηκε στην επισκόπηση αυτού του σεμιναρίου, θα δημιουργήσουμε ειδοποιήσεις χρησιμοποιώντας την προσθήκη κοινότητας.
Πιθανότατα θα θέλετε να δημιουργήσετε ειδοποιήσεις μέσα στο στοιχείο σας ή στην προσθήκη σας. Το παρακάτω σεμινάριο θα λειτουργήσει σε οποιαδήποτε από αυτές τις περιπτώσεις. Χρειάζεται μόνο να προσδιορίσετε σε ποιο σημείο του κώδικά σας θα δημιουργηθεί η ειδοποίηση και απλώς να φορτώσετε το αρχείο JomSocial Core Libraries.

απαιτούν_άπαξ JPATH_ROOT . "/components/com_community/libraries/core.php" ;

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

Προετοιμασία Αναπτυξιακού Περιβάλλοντος

1. Θα υποθέσουμε ότι έχετε ήδη δημιουργήσει παράδειγμα προσθήκης τύπου κοινότητας που θα ενεργοποιηθεί όταν ο χρήστης αλλάξει το προφίλ του
Εάν όχι, μπορείτε να κατεβάσετε κενό παράδειγμα προσθήκης από το , να το εγκαταστήσετε στο Joomla και να ενεργοποιήσετε το πρόσθετο. Ονομάζεται Κοινότητα - Παράδειγμα ειδοποιήσεων
2. Πλοηγηθείτε στη βάση δεδομένων σας και αδειάστε αυτούς τους δύο πίνακες, ώστε να μην έχουν καθόλου εγγραφές

Α) prefix_community_notification
β) prefix_community_mailq

3. Έχετε τουλάχιστον δύο (2) χρήστες στους ιστότοπους δοκιμών σας και γνωρίζετε τα αναγνωριστικά τους

Σε προηγούμενες εκδόσεις του Joomla, τα αναγνωριστικά χρήστη ξεκινούσαν πάντα από τον καθορισμένο αριθμό (62, 42) Στο Joomla 3, αυτός ο αριθμός θα είναι τυχαίος, επομένως, η εικόνα του περιβάλλοντος δοκιμών μας επειδή σίγουρα θα είναι διαφορετική στο τέλος σας.

Η Πρώτη Ειδοποίηση

Ανοίξτε το αρχείο php της προσθήκης που θα βρίσκεται στο ROOT/plugins/community/παράδειγμα
Μέσα στη συνάρτηση onAfterProfileUpdate() αντικαταστήστε το

CNotificationLibrary::add ( $cmd , $actor , $target , $subject , $body , $template , $params ) ;

Όπως φαίνεται στο παράδειγμα, το notification add api έχει 7 παραμέτρους

  • $cmd - είναι ο τύπος ειδοποίησης. Μπορείτε να δείτε όλους τους τύπους ειδοποιήσεων σε αυτό το αρχείο. ROOT/components/com_community/libraries/notificationtypes.php ξεκινώντας από ή γύρω από τη γραμμή 53. Συνιστούμε να χρησιμοποιήσετε τον τύπο ειδοποίησης system_messaging.
  • $actor - είναι το άτομο που πραγματοποιεί τη δράση
  • $target - είναι το άτομο ή η ομάδα ατόμων που θα λάβει ειδοποίηση
  • $subject - είναι το θέμα της ειδοποίησης, τόσο στο αναδυόμενο παράθυρο ειδοποίησης όσο και στον τίτλο του email
  • $body - είναι το σώμα του μηνύματος ειδοποίησης μέσω email
  • $template - εάν χρειάζεστε συγκεκριμένο πρότυπο για χρήση, μπορείτε να το ορίσετε εδώ. Διαφορετικά, αυτή η παράμετρος μπορεί να είναι κενή
  • $params - προσαρμοσμένες καθορισμένες παράμετροι
  • Γνωρίζοντας όλα αυτά, ας ορίσουμε τις μεταβλητές που θα χρησιμοποιήσουμε
    Αλλάξτε τον κωδικό της προσθήκης σας σε:

    $user = CFactory::getUser(); $cmd = "system_messaging" ; // πρώτη παράμετρος, τύπος δραστηριότητας $actor = $user -> id ; //second param - λάβετε το αναγνωριστικό του $actor $target = "965" ; // τρίτη παράμ. Ποιοι λαμβάνουν ειδοποίηση; Στο περιβάλλον προγραμματιστή μας, ο διαχειριστής του χρήστη με αναγνωριστικό 965. Στο περιβάλλον σας, πιθανότατα θα θέλετε να λάβετε το αναγνωριστικό από το αντικείμενό σας ή από μια σειρά χρηστών. $subject = " Θέμα ειδοποίησης " ; // Θέμα και των δύο, ειδοποιήσεις email και αναδυόμενων παραθύρων $body = ; //Κύριο μήνυμα σε email. $template = " " ; // Εάν χρειάζεται να χρησιμοποιήσετε συγκεκριμένο αρχείο προτύπου jomsocial, μπορείτε να το ορίσετε εδώ. $params = new CPparameter("" ) ; // Θέλουμε να δημιουργήσουμε ένα επιπλέον αντικείμενο παραμέτρων και να του εκχωρήσουμε δεδομένα, χωρίς να χρειάζεται να ορίσουμε επίσημα μια κλάση CNotificationLibrary:: add ( $cmd , $actor , $target , $subject , $body , $template , $params ) ;

    Τώρα συνδεθείτε με οποιονδήποτε χρήστη και αλλάξτε τις πληροφορίες του προφίλ. Ας πάμε στη βάση δεδομένων για να δούμε τι έγινε.
    Μεταβείτε στον πίνακα prefix_community_notifications και παρατηρήστε τη νέα εγγραφή

    Μεταβείτε στον πίνακα prefix_community_mailq και δείτε τη νέα εγγραφή

    Συγχαρητήρια! - Δημιουργήσατε με επιτυχία την πρώτη σας ειδοποίηση, η οποία έχει αποσταλεί μέσω email και εσωτερικού συστήματος ειδοποιήσεων JomSocial


    Δυνητικός κωδικός Bloat

    Το παραπάνω παράδειγμα είναι εντάξει, και λειτουργεί, αλλά γενικά δεν συνιστάται η χρήση του έτσι. Αντίθετα, θα μπορούσε να γραφτεί έτσι

    $actor = CFactory::getUser(); $params = new CPparameter("" ) ; CNotificationLibrary:: add ( "system_messaging" , $actor -> "This is the notification body message" , "" , $params ) ;

    Αυτό είναι πολύ πιο καθαρό και πιο εύκολο να ακολουθηθεί, ενώ βασικά κάνει απολύτως το ίδιο πράγμα με έναν κωδικό που φαίνεται παραπάνω.

    Προσαρμοσμένες παράμετροι ειδοποίησης

    Ένα API ειδοποιήσεων μπορεί να επεκταθεί με οποιαδήποτε παράμετρο θέλετε να προσθέσετε.
    Αυτές οι παράμετροι μπορούν να μεταβιβαστούν είτε σε πρότυπο email, ειδοποιήσεις και, φυσικά, σε αρχείο γλώσσας.

    $actor = CFactory::getUser(); $link = "http://www.google.com" ; $params = new CPparameter("" ) ; $params -> set ("actor" , $actor -> getDisplayName () ); // μπορεί να χρησιμοποιηθεί ως ετικέτα (actor) $params -> set ("actor_url" , "index.php?option=com_community&view=profile&userid=" . $actor -> id ) ; // Σύνδεσμος για την ετικέτα (actor) $params -> set ("url" , $link ) ; //url ολόκληρης της δραστηριότητας. Χρησιμοποιείται όταν τοποθετείτε το δείκτη του ποντικιού πάνω από το avatar στο παράθυρο ειδοποιήσεων. Μπορεί να χρησιμοποιηθεί ως ετικέτα (url) και σε εξερχόμενα email. Βεβαιωθείτε ότι έχετε ορίσει τη μεταβλητή $link:) CNotificationLibrary:: add ( "system_messaging" , $actor -> id , "965" , "Notification Subject" , "This is the notification body message" , "" , $params ) ;

    • $params = νέο CPπαράμετρο( ); - Θέλουμε να δημιουργήσουμε ένα νέο αντικείμενο params και να του εκχωρήσουμε δεδομένα, χωρίς να χρειάζεται να ορίσουμε επίσημα μια κλάση.
    • $params->set("actor", $actor->getDisplayName()); - Η ειδοποίησή σας πρέπει να έχει πάντα έναν ηθοποιό. Αυτή η παράμετρος μπορεί να μεταβιβαστεί στο πρότυπο ως ετικέτα (actor). Στο παράθυρο ειδοποίησης, ορίζει τον χρήστη που πραγματοποιεί μια ενέργεια.
    • $params->set("actor_url", "index.php?option=com_community&view=profile&userid=" . $actor->id); - Το URL του ηθοποιού είναι συνήθως το url ενός ηθοποιού. Στο αναδυόμενο παράθυρο ειδοποίησης, προσθέτει τη σύνδεση στο στοιχείο (actor).
    • $params->set("url", $link); - Αυτή είναι η πιο σημαντική παράμετρος που πρέπει πάντα να ρυθμίζετε σωστά. Στο παράθυρο ειδοποιήσεων, αυτή η παράμετρος χρησιμοποιείται πάνω από την εικόνα του avatar. Στην ειδοποίηση μέσω email, αντηχεί την τοποθεσία όπου έλαβε χώρα η δραστηριότητα.

    Για αυτό το παράδειγμα, θα ορίσουμε τη μεταβλητή $link σε lands on www.google.comώστε να μπορείτε να δείτε πώς λειτουργεί

    Προσθήκη συμβολοσειράς γλώσσας και χρήση παραμέτρων

    Έχοντας τις παραμέτρους που μόλις ορίσαμε είναι διαθέσιμες για χρήση και στα αρχεία γλώσσας μας.
    Ας ορίσουμε τα πλήκτρα γλώσσας αλλάζοντας το " CNotificationLibrary::add() API

    CNotificationLibrary::add("system_messaging" , $actor -> id , "965" , JText::sprintf("PLG_COMMUNITY_EXAMPLE_SUBJECT" ) , JText::sprintf("PLG_COMMUNITY_EXAMPLE_BODY), "$,")"

    Το αρχείο γλώσσας θα πρέπει να μοιάζει με αυτό

    PLG_COMMUNITY_EXAMPLE_SUBJECT = "(ηθοποιός) ενημερωμένο προφίλ" PLG_COMMUNITY_EXAMPLE_BODY = "Γεια σας Διαχειριστή \n Αυτό είναι το μήνυμα ηλεκτρονικού ταχυδρομείου για να σας ενημερώσουμε ότι το προφίλ (actor) ενημερώθηκε \n\n Εάν θέλετε να μεταβείτε στο Google, κάντε κλικ εδώ \n a href=" _QQ_" (url)"_QQ_">(url)"

    Σε αυτό το παράδειγμα, χρησιμοποιήσαμε την ετικέτα (actor) και (url) για να μεταβιβάσουμε τα δεδομένα και στα δύο πρότυπα ειδοποιήσεων και email. Ας δούμε πώς φαίνεται.
    Στο παράθυρο ειδοποιήσεων όταν τοποθετείτε τον δείκτη του ποντικιού πάνω από το avatar, παρατηρήστε την παράμετρο (url) που ενεργοποιήθηκε και προσθέτει τον σύνδεσμο στο google πάνω από το avatar. Είναι σκόπιμα, γιατί το κάναμε έτσι :)


    ]

    Στο ίδιο παράθυρο, όταν τοποθετείτε το δείκτη του ποντικιού πάνω από τον σύνδεσμο ηθοποιού. Αυτό είναι το μέρος όπου (actor) απηχούσε τον χρήστη που πραγματοποιεί μια ενέργεια, ενώ ο (actor_url)" φρόντισε ότι το αντικείμενο είναι σωστά συνδεδεμένο


    Ας δούμε τι συμβαίνει στην ουρά email


    Και τέλος, το πραγματικό email που αποστέλλεται στον τελικό χρήστη


    Επιτυχία
    Μέχρι τώρα, δημιουργήσαμε τρεις (3) παραμέτρους που χρησιμοποιούνται με επιτυχία στο παράθυρο ειδοποιήσεων και στα email.

  • (actor) - Επιστρέφει το όνομα χρήστη του χρήστη που πραγματοποιεί την ενέργεια
  • (actor_url) - Δίνει το απόδοση στον (ηθοποιό)
  • (url) - Δεν είναι υποχρεωτικό, αλλά θα πρέπει να το έχετε πάντα στην ειδοποίησή σας. Είναι το κύριο url στο οποίο συνέβη η ενέργεια για την οποία ειδοποιούμαστε.
  • Ομοίως, μπορείτε να ορίσετε "

    • (στόχος) - αν το χρειάζεστε
    • (target_url) εάν το χρειάζεστε στην ειδοποίησή σας.
    • (τίτλος) - Χρησιμοποιείται συνήθως για να αναφέρεται σε ένα αντικείμενο που δημιούργησε ειδοποίηση. Παράδειγμα: "Ο χρήστης X δημοσίευσε νέα φωτογραφία στο Άλμπουμ Y." Το άλμπουμ Υ είναι ο τίτλος εδώ
    • (title_url) - Όπως και με τα προηγούμενα, το url ενός αντικειμένου που δημιούργησε ειδοποίηση.
    • (μήνυμα) - Αυτή η παράμετρος μπορεί να χρησιμοποιηθεί για να ορίσετε (και να επαναλάβετε) το μήνυμα στο σώμα του μηνύματος ηλεκτρονικού ταχυδρομείου JomSocial.
    3,3Κ

    Η εμφάνιση μηνυμάτων στον χρήστη είναι μια αρκετά συνηθισμένη ενέργεια που πρέπει να εκτελεί μια εφαρμογή Ιστού. Μπορεί να προκύψει κατά την επεξεργασία φορμών, μπορεί να είναι μηνύματα σφάλματος, μηνύματα που σας λένε να εγγραφείτε όταν ένας χρήστης προσπαθεί να αποκτήσει πρόσβαση σε ένα περιορισμένο τμήμα του ιστότοπου και σε πολλές άλλες περιπτώσεις.

    Πολύ συχνά, η δημιουργία και η έξοδος των μηνυμάτων χωρίζονται σε διαφορετικά αιτήματα HTTP. Κατά κανόνα, είναι βολικό να χρησιμοποιείτε μια ανακατεύθυνση μετά την επεξεργασία φορμών (για να αποφύγετε προβλήματα με τα κουμπιά Πίσω και Ανανέωση), αλλά ταυτόχρονα, η φυσική στιγμή για τη δημιουργία ενός μηνύματος είναι ακριβώς η στιγμή της επεξεργασίας φορμών και της εκτέλεσης ενεργειών που συνοδεύουν το. Γιατί; Φανταστείτε ότι το κείμενο του μηνύματος θα πρέπει να μοιάζει κάπως έτσι: "Ο αριθμός των μονάδων που παραγγέλθηκαν για το στοιχείο "Mouse Pad" άλλαξε με επιτυχία από 7 σε 12." Μετά από μια ανακατεύθυνση, ίσως σε μια εντελώς διαφορετική σελίδα από πλευράς λειτουργικότητας, θα είναι ένας επιπλέον πονοκέφαλος να προσδιορίσετε τι έγινε πριν.

    Τις περισσότερες φορές, τα μηνύματα εμφανίζονται στο αίτημα POST που επεξεργάζεται τη φόρμα - αυτό δεν είναι καλό, οι λέξεις "αυτή η σελίδα είναι ξεπερασμένη" καταστρέφουν τη ζωή (όταν ο χρήστης αποφασίσει να δοκιμάσει το κουμπί Πίσω).

    Κάποιος χρησιμοποιεί μια ανακατεύθυνση, εγκαταλείποντας φιλικά μηνύματα.

    Ταυτόχρονα, υπάρχει ένας απλός και προφανής τρόπος για να κάνετε τη ζωή καλύτερη. Παρά το προφανές, για κάποιο λόγο δεν είδα ποτέ κανέναν να το χρησιμοποιεί - τουλάχιστον όταν κοίταξα τις πηγές άλλων ανθρώπων.

    Έτσι, έχουμε ένα πρόβλημα - το μήνυμα πρέπει να "ζει" σε διαφορετικά αιτήματα. Χρειαζόμαστε έναν μηχανισμό για να μεταφέρουμε το κείμενο του μηνύματος στη σελίδα που πρέπει να το εμφανίσει. Πιθανότατα θυμηθήκατε ήδη τις συνεδρίες.

    Ναι, γενικά έχεις δίκιο. Άλλες μέθοδοι, για παράδειγμα μέσω μιας καθολικής μεταβλητής, δεν επιτρέπουν την αποθήκευση δεδομένων στην περίπτωση που χρησιμοποιείται ανακατεύθυνση (σημείωση του Maxim Naumenko). Επιπλέον, συνήθως φροντίζω ότι κάθε οθόνη στην εφαρμογή έχει τη δυνατότητα, μαζί με άλλες πληροφορίες, να εμφανίζει μηνύματα που δημιουργήθηκαν σε προηγούμενες οθόνες. Αυτό είναι βολικό γιατί δεν χρειάζεται να προετοιμαστούν ξεχωριστές οθόνες για την εμφάνιση μηνυμάτων και ο χρήστης δεν χρειάζεται να κάνει ξανά κλικ με το ποντίκι. Αλλά, πραγματικά, ο σχεδιαστής πρέπει να σκεφτεί εδώ - να τονίσει την περιοχή στην οποία θα εμφανίζονταν τα μηνύματα.

    Η ιδέα είναι πολύ απλή και μπορεί να εφαρμοστεί με μερικά μαθήματα.

    Το πρώτο πράγμα που μας έρχεται στο μυαλό είναι να δημιουργήσουμε μια κλάση Message, η οποία στην πραγματικότητα θα αντιπροσωπεύει ένα μήνυμα στο απλό διάγραμμα τάξης μας. Το μήνυμα πρέπει να μπορεί να αποθηκευτεί στη συνεδρία, καθώς και να εμφανίζεται στην οθόνη.

    class Message ( /** * Περιεχόμενο μηνύματος. */ var $content; /** * Κατασκευαστής για την προετοιμασία του κειμένου του μηνύματος. * * @param περιεχόμενο μηνύματος */ function Message($content) ( $this->content = $ περιεχόμενο ; ) /** * Γράψτε ένα μήνυμα στην περίοδο λειτουργίας. toPage() ( echo " - " . $this->content . "
    "; } }

    Η μεταβλητή $_SESSION χρησιμοποιείται για πρόσβαση στη συνεδρία.

    Σημειώστε ότι το $_SESSION είναι ένας πίνακας, χρησιμοποιούμε μόνο ένα στοιχείο αυτού του πίνακα με το ευρετήριο «session_message».

    Σε αυτήν την περίπτωση, έχουμε να κάνουμε με μια «συστοιχία συστοιχιών» - αυτό που αποθηκεύουμε στο στοιχείο «session_message» είναι ένας πίνακας, αυτή είναι η λίστα των μηνυμάτων που μεταδίδονται (φυσικά, μπορεί να υπάρχουν πολλά από αυτά).

    Εάν δεν μπορέσατε να βρείτε το νήμα, ήρθε η ώρα να ανατρέξετε στις ενότητες του εγχειριδίου που είναι αφιερωμένες σε περιόδους σύνδεσης και πίνακες.

    Μπορεί να έχετε μια ερώτηση. Γιατί χρειάζονται μαθήματα εδώ; Θα ήταν δυνατό να τα βγάλετε πέρα ​​με δύο λειτουργίες. Ας δούμε όμως περαιτέρω. Ίσως χρειαστεί να δημιουργήσουμε μηνύματα με διαφορετικούς τύπους (πληροφορίες, σφάλμα, προειδοποίηση) και να καθορίσουμε τους παραλήπτες των μηνυμάτων.

    Λάβετε υπόψη ότι αυτή τη στιγμή δεν τοποθετείται το ίδιο το αντικείμενο στη συνεδρία, αλλά μόνο το κείμενο του μηνύματος. Το OOP μας επιτρέπει να αλλάξουμε αργότερα τη συμπεριφορά της μεθόδου send() χωρίς να αλλάξουμε τον κώδικα πελάτη που έχει πρόσβαση σε αυτήν τη μέθοδο (για παράδειγμα, στο μέλλον μπορούμε να γράψουμε ολόκληρο το αντικείμενο Message στη συνεδρία εάν έχει πολλά πεδία).

    Ας φανταστούμε ότι θα το κάναμε αυτό χρησιμοποιώντας συναρτήσεις. Θα είχαμε πιθανώς μια συνάρτηση message_send($txt) και επίσης μια συνάρτηση message_to_page($txt). Τώρα πρέπει να προσθέσουμε τη δυνατότητα να έχουμε διαφορετική συμπεριφορά για διαφορετικούς τύπους μηνυμάτων. Αλλαγή κλήσεων συναρτήσεων: message_send ($txt, $kind), message_to_page ($txt, $kind). Θα πρέπει να χτενίσετε ολόκληρο τον κωδικό της εφαρμογής αναζητώντας τέτοιες λειτουργίες, κάνοντας διορθώσεις.

    Αυτό μπορεί να αποφευχθεί με την πρόβλεψη της κατάστασης εκ των προτέρων παρουσιάζοντας το μήνυμα ως συσχετιστικό πίνακα: $msg['txt'], $msg['kind'], τότε θα υπάρχει μόνο μία παράμετρος στις κλήσεις συναρτήσεων. Μπορείτε να νιώσετε πώς αυτό προσπαθεί να γίνει τάξη;

    Έτσι, το OOP σας δίνει την ευκαιρία να έχετε την πολυτέλεια να μην σκέφτεστε τα πάντα εκ των προτέρων.

    Η επόμενη τάξη - Inbox - έχει σχεδιαστεί ακριβώς για αυτό.

    class Inbox ( /** * Πίνακας ληφθέντων μηνυμάτων. */ var $messages = array(); /** * Στον κατασκευαστή, λαμβάνουμε όλα τα ληφθέντα μηνύματα * και τα διαγράφουμε από τη συνεδρία. */ συνάρτηση Inbox() ( if (is_array($ _SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); για ($i = 0; $i< $co; $i++) { $this->messages = new Message($messages[$i]); ) ) /* διαγραφή του πίνακα μηνυμάτων */ $_SESSION["session_messages"] = array(); ) /** * Εμφάνιση των περιεχομένων των Εισερχομένων στη σελίδα. */ συνάρτηση toPage() ( $co = sizeof($this->messages); if ($co > 0) ( echo "Μήνυμα από το σύστημα:
    "; ) για ($i = 0; $i< $co; $i++) { $this->μηνύματα[$i]->ToPage(); ) ))

    Ας δοκιμάσουμε το σύστημα ανταλλαγής μηνυμάτων μας.

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

    Αποκρύψαμε όλη την εργασία με πίνακες και συνεδρίες μέσα στις τάξεις και ο τελικός κώδικας φαίνεται απλός και όμορφος.

    Δημιουργήστε έναν κατάλογο στον διακομιστή ιστού σας, στη συνέχεια δημιουργήστε αυτά τα τρία αρχεία σε αυτόν και δοκιμάστε το σενάριο. Λάβετε υπόψη ότι δεν υπάρχουν προβλήματα με τα κουμπιά Πίσω και Ανανέωση.

    Τώρα φανταστείτε ότι δημιουργείτε μια πολύπλοκη πύλη, όπου, κατά κανόνα, υπάρχουν πολλά μπλοκ στις σελίδες και το καθένα μπορεί να περιέχει μια ξεχωριστή εφαρμογή.

    Εδώ συναντάμε δύο δυσκολίες:

    * Θα ήθελα η λίστα των μηνυμάτων να εμφανίζεται σε ένα συγκεκριμένο μέρος της σελίδας και έχετε ήδη βρει ένα καλό μέρος για αυτό.
    Το πρόβλημα είναι ότι πρέπει να εκτελέσετε την εντολή $inbox->toPage() ακριβώς τη στιγμή που θα αντιστοιχεί στη θέση της λίστας των μηνυμάτων στη σελίδα. Αν θέλουμε να αλλάξουμε τη θέση αυτής της λίστας, θα πρέπει να μπούμε στον κώδικα, αλλά δεν είναι καλό να αλλάζουμε συνεχώς το πλαίσιο της πύλης για αυτό. Η καλύτερη λύση θα ήταν να γίνει η έξοδος των μηνυμάτων με τη μορφή μιας ξεχωριστής ενότητας, την οποία γνωρίζουμε μόνο ότι πρέπει να συνδεθεί με το πλαίσιο.
    Δηλαδή, απελευθερωθείτε από την αυστηρή σειρά εκκίνησης των μονάδων. Πράγματι, εφόσον το αποτέλεσμα της εξόδου του Inbox δεν εξαρτάται από τη λειτουργία του συστήματος (σε αυτό το βήμα έχουμε ήδη όλα τα δεδομένα στη συνεδρία), τότε γιατί η επιπλέον πολυπλοκότητα;
    * Για να διατηρήσετε την εμφάνιση (σχεδίαση) της λίστας μηνυμάτων, πρέπει να φροντίσετε τον κώδικα HTML, ο οποίος είναι κωδικοποιημένος στις μεθόδους toPage() των κλάσεων Message και Inbox. Συνήθως, θα πρέπει να αλλάξετε τον κώδικα PHP για να αλλάξετε τη σχεδίαση.

    Για να προσπαθήσετε να λύσετε το πρώτο πρόβλημα, μπορείτε να δημιουργήσετε ένα buffer που αποθηκεύει το αποτέλεσμα της εξόδου Inbox.

    Ίσως θα έχουμε ακόμα αρκετά παρόμοια (με τα Εισερχόμενα) πράγματα και πρέπει να δημιουργήσουμε ένα σύστημα προσωρινής αποθήκευσης. Για να μην μπερδεύουμε ποιανού η έξοδος είναι ποιανού, μάλλον θα καταλήξουμε στην ονομασία των buffers. Θα αποθηκεύσουμε κάπου την ακολουθία σύμφωνα με την οποία θα πρέπει να εξάγονται τα buffer - κατά προτίμηση σε ένα εξωτερικό αρχείο για να διευκολύνουμε τις αλλαγές.

    Αυτή η προσπάθεια λύσης μας δίνει ήδη την ιδέα να χρησιμοποιήσουμε την XML ως μέσο αποθήκευσης ενδιάμεσων δεδομένων. Και η χρήση στυλ XSLT θα βοηθήσει στην επίλυση του δεύτερου προβλήματος.

    Δεν θα σταθώ στο τι είναι XML και τι XSLT. Εάν δεν είστε εξοικειωμένοι με αυτά τα πράγματα, το zvon.org είναι ένα καλό μέρος για να αρχίσετε να ψάχνετε.

    Η ιδέα είναι να δημιουργηθεί όχι κώδικας HTML, αλλά μια δομή XML στις μεθόδους toPage(). Το έγγραφο της σελίδας θα δημιουργηθεί ως συμβολοσειρά με κώδικα XML (θα χρησιμεύσει ως "buffer") και στο τελευταίο στάδιο του σεναρίου θα χρησιμοποιήσουμε έναν μετασχηματισμό XSL.

    Αρχικά, ας φανταστούμε ποιο θα πρέπει να είναι το αποτέλεσμα του κύριου μέρους του κώδικα.

    λεπτό 57 δευτερόλεπτο: 45

    Τι είναι είναι πολύ εύκολο να μαντέψει κανείς - δύο μηνύματα και μια φόρμα. Λάβετε υπόψη ότι το σενάριο PHP χρειάζεται μόνο να προετοιμάσει μια τέτοια συμβολοσειρά - είναι πολύ απλό. Επιπλέον, η σειρά των κύριων ετικετών δεν είναι σημαντική - μπορείτε να τα βάλετε πρώτα, για παράδειγμα, όπως θα είναι βολικό για τον προγραμματιστή. Πώς να το εφαρμόσετε. Μπορείτε, χωρίς να αλλάξετε τίποτα, να χρησιμοποιήσετε buffering εξόδου, να εξάγετε XML αντί για κώδικα HTML και στο τέλος απλά να συλλάβετε την έξοδο σε μια συμβολοσειρά. Αλλά τότε θα χάσουμε την ευελιξία - για παράδειγμα, μερικές φορές θέλετε να εξάγετε πληροφορίες εντοπισμού σφαλμάτων απευθείας στη σελίδα (χρησιμοποιώντας ηχώ). Ταυτόχρονα, οι προγραμματιστές PHP εργάζονται σε μια λειτουργική μονάδα DOM που προσφέρει έναν πιο προηγμένο τρόπο δημιουργίας και διαβίβασης εγγράφων δέντρων. Αν θέλουμε να υλοποιήσουμε το DOM, θα πρέπει να επανασχεδιάζουμε ολόκληρη την εφαρμογή, αλλάζοντας την έξοδο των συμβολοσειρών στη δημιουργία στοιχείων DOM. Επομένως, προτιμώ να αποθηκεύω την αναπαράσταση XML των αντικειμένων μέσα στα ίδια τα αντικείμενα, συναρμολογώντας διαδοχικά ένα κοινό έγγραφο XML. Δεν είναι τόσο δύσκολο, απλά χρειάζεται μια μικρή τροποποίηση. Θα δείτε ότι αυτή η τεχνική δεν συνδέεται αυστηρά με έναν συγκεκριμένο τρόπο αποθήκευσης δεδομένων XML και αυτό θα σας επιτρέψει να κάνετε τη μετάβαση στη χρήση του DOM με λίγη προσπάθεια. Πρώτα απ 'όλα, παρατηρήστε ότι κάθε αντικείμενο μας έχει μια μέθοδο toPage(). Αυτή η ομοιότητα θα πρέπει να μας κάνει να σκεφτούμε την εισαγωγή μιας νέας κοινής τάξης γονέων. Αφήστε κάθε κλάση που μπορεί να δημιουργήσει κομμάτια ενός εγγράφου XML για μια σελίδα να κληρονομήσει από μια κλάση που θα φροντίσει για την XML αναπαράσταση του αντικειμένου. Ας το ονομάσουμε Outputable.

    class Outputable ( /** * XML container (string). */ var $output = ""; /** * Δώστε τα περιεχόμενα του κοντέινερ και καθαρίστε το κοντέινερ. * * @return μια συμβολοσειρά με δεδομένα XML */ συνάρτηση getOutput () ( $ out = $this->output; $this->output = ""; return $out; ) /** * Προσθέστε ένα τμήμα στα περιεχόμενα του κοντέινερ. * * @param συμβολοσειρά της συμβολοσειράς για προσθήκη * / συνάρτηση appendOutput($string) ( $this ->output .= $string . "n"; ) /** * Μέθοδος "Abstract". */ function toPage() ( ) )

    Η μέθοδος toPage() γίνεται κενή - σε αυτήν την περίπτωση χρειάζεται ως ένδειξη του τρόπου με τον οποίο οι εξωτερικές κλάσεις "matryoshka" πρέπει να επικοινωνούν με την εσωτερική κλάση. Ωστόσο, θα μπορούσαμε να προσφέρουμε μια προεπιλεγμένη υλοποίηση εδώ, αν παρατηρούσαμε ότι υπάρχουν πολλά αντικείμενα που εμφανίζονται στη σελίδα με τον ίδιο τρόπο.

    Οι κλάσεις Message και Inbox θα αλλάξουν ελαφρώς - θα πρέπει τώρα να μεταβιβαστούν και οι δύο από το Outputable και οι μέθοδοι toPage() θα αλλάξουν επίσης
    Message.php

    class Message extensions Outputable ( /** * Περιεχόμενο μηνύματος. */ var $content; /** * Κατασκευαστής για την προετοιμασία του κειμένου του μηνύματος. * * @param περιεχόμενο μηνύματος */ λειτουργία Μήνυμα($content) ( $this->content = $content; ) /** * Γράψτε ένα μήνυμα στη συνεδρία. / συνάρτηση toPage() ( $this->appendOutput("".$this->content.""); ) )

    class Inbox extends Outputable ( /** * Συστοιχία ληφθέντων μηνυμάτων. */ var $messages = array(); /** * Στον κατασκευαστή, λαμβάνουμε όλα τα ληφθέντα μηνύματα * και τα αφαιρούμε από τη συνεδρία. */ function Inbox( ) ( if (is_array ($_SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); για ($i = 0; $i< $co; $i++) { $this->messages = new Message($messages[$i]); ) ) /* διαγραφή του πίνακα μηνυμάτων */ $_SESSION["session_messages"] = array(); ) /** * Εμφάνιση των περιεχομένων των Εισερχομένων στη σελίδα. */ συνάρτηση toPage() ( $co = sizeof($this->messages); $this->appendOutput(""); για ($i = 0; $i< $co; $i++) { $this->μηνύματα[$i]->toPage(); $this->appendOutput($this->messages[$i]->getOutput()); ) $this->appendOutput(""); ) )

    Η μέθοδος εξόδου έχει αλλάξει - τώρα, αντί για απευθείας έξοδο στη σελίδα, η εξωτερική αναπαράσταση αποθηκεύεται προς το παρόν στο Outputable, το οποίο «κάθεται» σε καθένα από τα αντικείμενα. Η μέθοδος appendOutput() χρησιμεύει ως αντικατάσταση της κατασκευής echo(). Για να λάβουμε την έξοδο ενός αντικειμένου, χρησιμοποιείται η μέθοδος getOutput().

    Τώρα ας δούμε ποιο είναι το τμήμα πελάτη του κώδικα, το οποίο θα λύσει το ίδιο πρόβλημα με πριν.
    index.php

    Η κύρια καινοτομία βρίσκεται στο αντικείμενο $global_content, το όνομα του οποίου μιλάει από μόνο του. Σε αυτήν την περίπτωση, ανήκει στην κατηγορία Outputable· σε πραγματικές εργασίες, πιθανότατα θα δημιουργήσατε μια ξεχωριστή τάξη για το περιεχόμενο της σελίδας.

    Αν κοιτάξετε προσεκτικά, το περιεχόμενο του σεναρίου ουσιαστικά δεν έχει αλλάξει - τα ίδια εισερχόμενα, το ίδιο toPage(). Προστέθηκε μια οδηγία που εμφανίζει τα περιεχόμενα της λίστας μηνυμάτων στο περιεχόμενο της σελίδας. Για ποικιλία, τώρα δημιουργούνται δύο μηνύματα.

    Για να δούμε το αποτέλεσμα, το μόνο που μένει είναι να προετοιμάσουμε το πρότυπο XSL.
    στυλ.xsl

    Παράδειγμα XSLT

    μήνυμα

    Τι έχουμε πετύχει;

    Πρώτα απ 'όλα, μπορείτε να αναλάβετε με μεγαλύτερη σιγουριά σύνθετα έργα - διασφαλίζεται η πραγματική ανεξαρτησία των ενοτήτων. Η σειρά με την οποία τοποθετούνται τα αποτελέσματα στη σελίδα ελέγχεται πλέον χρησιμοποιώντας ένα εξωτερικό πρότυπο XSL και δεν εξαρτάται από τη σειρά με την οποία εκτελούνται οι λειτουργικές μονάδες.

    Οποιαδήποτε μονάδα που δημιουργεί δεδομένα XML ως αποτέλεσμα της εργασίας της μπορεί να χρησιμοποιηθεί σε ένα έργο. Παρεμπιπτόντως, αυτό είναι ένα από τα πλεονεκτήματα σε σχέση με τις μηχανές προτύπων, στις οποίες η δημιουργία δεδομένων αποτελείται από μια ακολουθία μεθόδων κλήσης (ανάθεση κ.λπ.) ενός συγκεκριμένου κινητήρα, για τον οποίο δεν υπάρχει κοινό πρότυπο.

    Ένα άλλο πλεονέκτημα είναι η ευκολία εντοπισμού σφαλμάτων. Εάν εκτελέσετε το σενάριο, θα παρατηρήσετε ότι κάθε σελίδα περιέχει έξοδο εντοπισμού σφαλμάτων - ένα πρωτότυπο XML που απλοποιεί σε μεγάλο βαθμό τις εφαρμογές εντοπισμού σφαλμάτων.

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

    Τέλος, ένα γκάλοπ για τις προοπτικές:

    * Αναδυόμενα παράθυρα για μια λίστα με σημαντικά μηνύματα
    * "σελίδες αποστολέα" και "σελίδες προορισμού" σε μηνύματα
    * καταγραφή μηνυμάτων στη βάση δεδομένων
    * κουμπί "εμφάνιση ιστορικού των ενεργειών μου"
    * στατιστική ανάλυση των ενεργειών των χρηστών εντός συνεδριών
    * «έξυπνοι βοηθοί» σε διαδικτυακές εφαρμογές

    Στο KP και το BUS, ξεκινώντας από την έκδοση 11.5, σε εκδόσεις που περιλαμβάνουν κοινωνικό δίκτυο, εμφανίστηκε μια νέα ενότητα "Web messenger".
    Πριν κυκλοφορήσει σε όλους, η ενότητα βάπτισε το πυρ στο "Social Intranet", συλλέγοντας έως και 8 ενημερώσεις


    Σε έξι μήνες ανάπτυξης, έχουμε κάνει πολλά

    Εγκαταλείψαμε εντελώς την προηγούμενη διεπαφή και δημιουργήσαμε μια νέα, βασισμένη στην εμπειρία των δημοφιλών άμεσων μηνυμάτων.
    Το παράθυρο διαλόγου άρχισε να ανοίγει μέσα στη σελίδα, εμφανίστηκαν πρόσωπα σε αυτό, τα μηνύματα ήταν χρωματικά κωδικοποιημένα και κατέστη δυνατή η εύκολη συνομιλία με πολλά άτομα ταυτόχρονα.

    Το παράθυρο ιστορικού είναι ένα ξεχωριστό θέμα, όλοι ήθελαν από καιρό να έχουν μια αναζήτηση ιστορικού, τώρα το έχουμε επιτέλους, σχεδιάζουμε να προσθέσουμε ένα ημερολόγιο εκεί για γρήγορη πλοήγηση.

    Δημιουργήσαμε ένα κέντρο ειδοποιήσεων με διαφορετικούς τύπους μηνυμάτων, παρέχουμε τη δυνατότητα προβολής του ιστορικού της παραλαβής τους και στους προγραμματιστές ένα απλό API για την προσθήκη και την ανάκληση ειδοποιήσεων.

    Και όλα αυτά είναι διαθέσιμα σε κάθε σελίδα του site σας!

    Δυστυχώς δεν υλοποιήθηκαν όλα όσα είχαν προγραμματιστεί

    ΠρώταΑυτό που δεν είχαμε χρόνο να κάνουμε ήταν να μεταφράσουμε τα μηνύματα στα τραπέζια μας.
    Μια τέτοια μετάβαση θα επέτρεπε την εγκατάλειψη της ενότητας «κοινωνικού δικτύου», η οποία θα έδινε μεγαλύτερη ελευθερία στην επιλογή των συντακτών και θα ήταν επίσης δυνατή η εισαγωγή ομαδικών συνομιλιών.

    Δεύτερος, αυτή είναι η υλοποίηση της αληθινής «άμεσης» επικοινωνίας. Τώρα η μονάδα χρησιμοποιεί κανονική συγκέντρωση, ψηφοφορία στον διακομιστή μία φορά κάθε n-δευτερόλεπτα, η περίοδος ψηφοφορίας ποικίλλει ανάλογα με τη δραστηριότητα της επικοινωνίας.
    Σκοπεύουμε να γράψουμε μια ξεχωριστή υπηρεσία που θα διατηρεί σταθερές συνδέσεις και θα στέλνει ενημερώσεις δεδομένων όπως απαιτείται (για το messenger, για τη ζωντανή ροή κ.λπ.).

    Τρίτος, σχεδιάζουμε να αλλάξουμε ελαφρώς τη διεπαφή, να εγκαταλείψουμε τη ξεχωριστή λίστα επαφών και το παράθυρο διαλόγου και να τα συνδυάσουμε σε ένα ενιαίο σύνολο, το οποίο στο μέλλον θα μας επιτρέψει να μετακινήσουμε το messenger σε μια εφαρμογή για κινητά.

    Δεν υπάρχει ακόμα τεκμηρίωση και δεν θα εμφανιστεί μέχρι το φθινόπωρο, γιατί... Η ενότητα αναπτύσσεται ενεργά και θέλουμε να αφήσουμε τη δυνατότητα αλλαγής του API.
    Ωστόσο, θα προσπαθήσω να δημοσιεύσω παραδείγματα εργασίας με εκείνο το τμήμα του API στο οποίο η εργασία έχει ήδη ολοκληρωθεί και μπορείτε να τα χρησιμοποιήσετε με ασφάλεια στις ενότητες σας.

    Εργασία με ειδοποιήσεις (σχετική για άμεσο μήνυμα που ξεκινά από την έκδοση 11.5.2)

    Έχουμε εφαρμόσει τρεις τύπους ειδοποιήσεων:
    - εξατομικευμένη ειδοποίηση
    - ειδοποίηση από το σύστημα.
    - ειδοποίηση που απαιτεί επιβεβαίωση·

    Πριν χρησιμοποιήσετε το API, πρέπει να ελέγξετε εάν η μονάδα είναι εγκατεστημένη στο σύστημα:

    if (IsModuleInstalled("im") && CModule::IncludeModule("im")) ( ) ?>

    Εξατομικευμένη ειδοποίηση


    Εάν τα μηνύματα έχουν οριστεί σε NOTIFY_TAG, τότε ο χρήστης θα τα ομαδοποιήσει.

    Ειδοποίηση από το σύστημα


    $arMessageFields = πίνακας(// παραλήπτης "TO_USER_ID" => $USER->GetId(), // αποστολέας (μπορεί να είναι >0) "FROM_USER_ID" => 0, // τύπος ειδοποίησης "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, // μονάδα που ζήτησε την αποστολή ειδοποίησης "NOTIFY_MODULE" => "im", // συμβολική ετικέτα για ομαδοποίηση (θα εμφανίζεται μόνο ένα μήνυμα), εάν αυτό δεν απαιτείται, μην ορίσετε την παράμετρο "NOTIFY_TAG" => "IM_CONFIG_NOTICE", // κείμενο ειδοποίησης στον ιστότοπο (διαθέσιμοι κωδικοί html και BB) "NOTIFY_MESSAGE" => "[b]Προσοχή: πρέπει να ελέγξετε και να καθορίσετε τη σωστή διαδρομή προς το κοινωνικό δίκτυο στις ρυθμίσεις της ενότητας "Άμεσα μηνύματα και ειδοποιήσεις"" , // κείμενο ειδοποίησης που θα σταλεί με email (ή XMPP ), εάν δεν υπάρχουν διαφορές, μην ορίσετε την παράμετρο //"NOTIFY_MESSAGE_OUT" => ""); CIMNotify::Add($arMessageFields); ?>

    Ειδοποίηση που απαιτεί επιβεβαίωση (επιβεβαίωση)


    $arMessageFields = πίνακας(// παραλήπτης "TO_USER_ID" => $USER->GetId(), // αποστολέας "FROM_USER_ID" => 2, // τύπος ειδοποίησης "NOTIFY_TYPE" => IM_NOTIFY_CONFIRM, // λειτουργική μονάδα που ζήτησε την αποστολή της μη ειδοποίησης "NOTIFY_MODULE " => "ημερολόγιο", // συμβολική ετικέτα για ομαδοποίηση (θα εμφανίζεται μόνο ένα μήνυμα), εάν αυτό δεν απαιτείται, μην ορίσετε την παράμετρο "NOTIFY_TAG" => "CALENDAR|INVITE|123|".$ USER->GetId() , // κείμενο ειδοποίησης στον ιστότοπο (διαθέσιμοι κωδικοί html και BB) "NOTIFY_MESSAGE" => "Σας προσκαλώ να συμμετάσχετε στη συνάντηση "Άμεσα μηνύματα και ειδοποιήσεις" που θα πραγματοποιηθεί στις 15 Μαρτίου, 2012 στις 14:00", // κείμενο ειδοποίησης για αποστολή μέσω email (ή XMPP), εάν δεν υπάρχουν διαφορές, μην ορίσετε την παράμετρο "NOTIFY_MESSAGE_OUT" => "Ο χρήστης Evgeny Shelenkov σας προσκαλεί να λάβετε μέρος στη συνάντηση "Instant μηνύματα και ειδοποιήσεις» #BR# που θα πραγματοποιηθεί στις 15/03/2012 στις 14:00.#BR # #BR# Αποδοχή: http://test.ru/calend.php?CONFIRM=Y&CID=123 #BR# Απόρριψη: http://test.ru/calend.php?CONFIRM=N&CID=123", // πίνακας που περιγράφει τα κουμπιά ειδοποίησης "NOTIFY_BUTTONS" => Πίνακας(// 1. όνομα κουμπιού, 2. τιμή, 3. πρότυπο κουμπιού , 4. μετάβαση στη διεύθυνση αφού πατήσετε (προαιρετική παράμετρος) Array("TITLE" => "Accept", " VALUE" => "Y", "TYPE" => "accept" /*, "URL" => " http://test.ru/?confirm=Y" */), Array("TITLE" => "Refuse", "VALUE" => "N", "TYPE" => "cancel" /*, "URL " => "http://test.ru/?confirm=N" */),), // συμβολικός κωδικός του προτύπου αποστολής επιστολής, εάν δεν προσδιορίζεται, αποστέλλεται με το πρότυπο ειδοποίησης "NOTIFY_EMAIL_TEMPLATE" => " CALENDAR_INVITATION"); CIMNotify::Add($arMessageFields); ?>

    Για να δουλέψετε με αυτόν τον τύπο ειδοποίησης, δεν αρκεί απλώς να στείλετε ένα μήνυμα· πρέπει επίσης να το εξυπηρετήσετε.

    Υπηρεσία
    Υπάρχουν δύο επιλογές, η πιο απλή είναι να ακολουθήσετε τον σύνδεσμο (αν ορίσετε την 4η παράμετρο στο NOTIFY_BUTTONS).
    Αφού ακολουθήσετε τον σύνδεσμο, πρέπει να καλέσετε τον ακόλουθο κωδικό στον κωδικό σας:
    Προσοχή: δώστε ιδιαίτερη προσοχή στο όνομα των ετικετών· όταν καλείτε τη διαγραφή, όλα τα μηνύματα με αυτήν την ετικέτα θα διαγράφονται.
    Κατά την αποστολή πολλαπλών μηνυμάτων, αυτό πρέπει να λαμβάνεται υπόψη, ώστε η εκτέλεση μιας ενέργειας από έναν χρήστη να μην διαγράφει κατά λάθος την ειδοποίηση σε όλους (εκτός από μέρη όπου απαιτείται τέτοια λογική).

    Η δεύτερη επιλογή είναι σε εκδηλώσεις.
    1. πρέπει να καταχωρήσετε την εξάρτηση

    Μην ξεχνάτε τις λειτουργίες σας Επιβεβαίωσε το αίτημαΚαι Απόρριψη Αιτήματοςπροκαλέσει τη διαγραφή της ειδοποίησης CIMNotify::DeleteByTag()

    Αυτά προς το παρόν, περιμένω τις προτάσεις σας στα σχόλια, επιτυχημένες υλοποιήσεις!
    Εάν θέλετε να δοκιμάσετε το API πριν από την κυκλοφορία της 11.5.2 σε έναν πίνακα με παραμέτρους, πρέπει επιπλέον να καθορίσετε "MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, επίσης η επιλογή με κουμπιά σύνδεσης δεν θα λειτουργήσει για επιβεβαίωση ειδοποιήσεων. Αλλά είναι καλύτερα να περιμένετε· η ενημέρωση 11.5.2 αναμένεται να κυκλοφορήσει στις 23 Μαΐου.

    Καλύτερα κακό σερί παρά παραλήρημα...

    PHP AJAX CRUD: δημιουργία, διαγραφή, επεξεργασία εγγραφών στη βάση δεδομένων MySQL

    Σε αυτό το άρθρο, θα μάθουμε πώς μπορείτε να προσθέσετε, να επεξεργαστείτε και να διαγράψετε εγγραφές σε μια βάση δεδομένων MySQL χρησιμοποιώντας PHP. Χρησιμοποιήσαμε έναν χειριστή JQuery που στέλνει ένα αίτημα AJAX σε ένα σενάριο από την πλευρά του διακομιστή. Ο χειριστής ενημερώνει τη λίστα των εγγραφών.

    Φόρμα AJAX για αποστολή αιτημάτων για δημιουργία, διαγραφή, επεξεργασία

    Κατά την προσθήκη μιας εγγραφής, η φόρμα στέλνει δεδομένα στο σενάριο PHP μέσω ενός αιτήματος AJAX. Εάν η προσθήκη είναι επιτυχής, η λίστα με τις καταχωρήσεις φορτώνεται ξανά.

    JQuery AJAX συναρτήσεις για το ερώτημα της βάσης δεδομένων CRUD

    Στη συνάρτηση JQuery AJAX έχουμε θήκες μεταγωγέων προσθήκης επεξεργασίας και διαγραφής. Αυτές οι περιπτώσεις δημιουργούν διαφορετικές συμβολοσειρές δεδομένων ερωτημάτων και απαντήσεων ανάλογα με τις ενέργειες της βάσης δεδομένων.

    συνάρτηση showEditBox(id) ( $("#frmAdd").hide(); var currentMessage = $("#message_" + id + ".message-content").html(); var editMarkUp = ""+currentMessage+" SaveCancel"; $("#message_" + id + " .message-content").html(editMarkUp); ) λειτουργία cancelEdit(message,id) ($("#message_" + id + " .message-content") .html(message); $("#frmAdd").show(); ) συνάρτηση callCrudAction(action,id) ( $("#loaderIcon").show(); var queryString; switch(action) ( case "add ": queryString = "action="+action+"&txtmessage="+ $("#txtmessage").val(); break; case "edit": queryString = "action="+action+"&message_id="+ id + " &txtmessage="+ $("#txtmessage_"+id).val(); break; case "delete": queryString = "action="+action+"&message_id="+ id; break; ) jQuery.ajax(( url: "crud_action.php", data:queryString, τύπος: "POST", success:function(data)( switch(action) ( case "add": $("#comment-list-box").append(data); break; case "edit": $("#message_" + id + " .message-content").html(data); $("#frmAdd").show(); Διακοπή; case "delete": $("#message_"+id).fadeOut(); Διακοπή; ) $("#txtmessage").val(""); $("#loaderIcon").hide(); ), error:function ()() )); )

    Σενάριο PHP για λειτουργίες CRUD

    Ο παρακάτω κώδικας εκτελεί ερωτήματα στη βάση δεδομένων. Αυτό το σενάριο PHP, αφού εκτελέσει μια ενέργεια CRUD, ενημερώνει τις εγγραφές ως αποτέλεσμα της απόκρισης AJAX.

    require_once("dbcontroller.php"); $db_handle = νέος ελεγκτής DBC(); $action = $_POST["action"]; if(!empty($action)) ( switch($action) ( case "add": $result = mysql_query("INSERT INTO comment(message) VALUES("".$_POST["txtmessage"].")" ) ; if($result)($insert_id = mysql_insert_id(); echo " Επεξεργασία Διαγραφής " . $_POST["txtmessage"] . " "; ) break; case "edit": $result = mysql_query("UPDATE set comment message = "".$_POST["txtmessage"]."" WHERE id=".$_POST["message_id"]); if($result) echo $_POST["txtmessage"]; break; case "delete": if ( !empty($_POST["message_id"])) ( mysql_query("DELETE FROM comment WHERE id=".$_POST["message_id"]); ) break; ) )

    Σε αυτό το σημείο σε αυτό το μάθημα, έχει τεθεί η βάση του πρόσθετου μας, έχει οριστεί ένα προσαρμοσμένο άγκιστρο και έχει επισυναφθεί ένα μόνιμο μήνυμα για να δείξει πώς λειτουργεί το άγκιστρο.

    Ότι εμείς Δενδεν υλοποίησαν τους τύπους των μηνυμάτων και την εμφάνισή τους σύμφωνα με τα δεδομένα που εισήγαγε ο χρήστης.

    Αλλά πριν ξεκινήσουμε, πρέπει να προσθέσουμε υποστήριξη για διαφορετικούς τύπους μηνυμάτων, μια διεπαφή κλάσης που θα υποστηρίζει κάθε τύπο μηνύματος και τη δομή δεδομένων που απαιτείται για την αποθήκευση τέτοιων μηνυμάτων.

    Είστε έτοιμοι να ξεκινήσετε;

    Ανυπομονώ να συνεχίσω το σεμινάριο, αλλά υπάρχουν μερικά πράγματα που πρέπει να εξετάσουμε πριν βουτήξουμε με το κεφάλι στον πηγαίο κώδικα. Βεβαιωθείτε ότι έχετε εγκατεστημένο το ακόλουθο λογισμικό στο σύστημά σας:

    • PHP 5.6.25 και MySQL 5.6.28
    • Apache ή Nginx
    • WordPress 4.6.1
    • IDE ή επεξεργαστής που προτιμάτε

    Και αν ψάχνετε για μια λύση all-in-one, μην ξεχάσετε να δοκιμάσετε το MAMP.

    Έχουμε προχωρήσει σε

    Όπως αναφέρθηκε προηγουμένως, βρισκόμαστε ακριβώς στη μέση αυτής της πορείας. Εάν χάσατε κάποιο από τα πρώτα μαθήματα, δείτε τι έχουμε καλύψει μέχρι τώρα:

  • Στο πρώτο σεμινάριο, επικεντρωθήκαμε στα ελάχιστα βασικά για τη δημιουργία της προσθήκης μας και σε αυτά που πρέπει να έχετε για να ξεκινήσετε.
  • Στο δεύτερο μέρος, προχωρήσαμε περαιτέρω με το πρόσθετο, προσθέτοντας λίγο στη βασική σελίδα διαχείρισης στο WordPress. Εκχωρήσαμε επίσης ένα προσαρμοσμένο άγκιστρο που χρησιμοποιούμε και το τρέξαμε από την πλευρά του διακομιστή. Ορίζουμε επίσης τις βασικές παραμέτρους για το Settings Messenger μας.
  • Και αυτό θα εξετάσουμε στο τελικό στάδιο της εκπαίδευσης:

  • Θα τα συνδυάσουμε όλα μαζί, θα το δούμε σε δράση και θα κάνουμε την προσθήκη δημόσια διαθέσιμη για λήψη.
  • Αυτήν τη στιγμή έχουμε άλλα καθήκοντα και θα επικεντρωθούμε σε αυτά.

    Ας επιστρέψουμε στη δουλειά

    Δεδομένου ότι έχουμε στραφεί στην εργασία (και όπως αναφέρθηκε σε προηγούμενα μαθήματα), δεσμευόμαστε για περαιτέρω υλοποίηση των εργασιών σε αυτό το μέρος:

    Σε αυτό το σεμινάριο θα συνεχίσουμε να αναπτύσσουμε το Settings Messenger προσθέτοντας υποστήριξη για μηνύματα επιτυχίας και αποτυχίας, καθώς και αγγίζοντας θέματα ασφάλειας.

    Στο προηγούμενο άρθρο, ξεκινήσαμε με το Settings Messenger, αλλά μόνο στο σημείο να ρυθμίσουμε μια λειτουργία που θα εμφανίζει συνεχώς μια ειδοποίηση επιτυχίας κατά τη φόρτωση της σελίδας χρήστη.

    Σε αυτό το σεμινάριο θα προσθέσουμε υποστήριξη για μηνύματα σφάλματος, προειδοποίησης και επιτυχίας. Στη συνέχεια θα τα εμφανίσουμε στην οθόνη για να πάρουμε μια ιδέα για το πώς θα λειτουργεί ο messenger.

    Επιπλέον, πρόκειται να κάνουμε άλλη μια αλλαγή που θα προσθέσει υποστήριξη για την απόρριψη ειδοποιήσεων κατά την κρίση του χρήστη.

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

    Ρυθμίσεις επέκταση Messenger

    Θυμηθείτε, το όλο νόημα του Settings Messenger είναι να ορίσουμε τον τρόπο εργασίας μας με προσαρμοσμένα μηνύματα, προσαρμοσμένα άγκιστρα και το εγγενές API του WordPress για την εμφάνιση μηνυμάτων στο πλαίσιο του πίνακα διαχείρισης του WordPress.

    Για να το κάνουμε αυτό, θα επεκτείνουμε τη δουλειά που έγινε στο τελευταίο μάθημα και θα ξεκινήσουμε από εδώ.

    Επιτυχημένα μηνύματα

    Αφού ξεκινήσαμε με επιτυχημένα μηνύματα στο προηγούμενο μάθημα, ας συνεχίσουμε με αυτά. Τώρα έχουμε μια σκληρά κωδικοποιημένη μέθοδο που εμφανίζει ένα μόνο κόλπο: