वेब अनुप्रयोगों में उपयोगकर्ता को संदेश प्रदर्शित करना। PHP AJAX CRUD: CRUD संचालन के लिए MySQL डेटाबेस PHP स्क्रिप्ट में रिकॉर्ड बनाना, हटाना, संपादित करना

अवलोकन

जूमला में पहली बार निर्मित अधिसूचना प्रणाली, आपके ऐप को उपयोगकर्ता (या उपयोगकर्ताओं के समूह) को विभिन्न घटनाओं के बारे में सूचित रखने की अनुमति देती है। सूचनाओं को महत्वपूर्ण अलर्ट के रूप में सोचें जिन्हें पढ़ने और उन पर नज़र रखने में उपयोगकर्ता की रुचि होगी।
सूचनाएं हर जगह उत्पन्न की जा सकती हैं. आपके घटक या प्लगइन्स में और बाद में जोमसोशल अधिसूचना प्रणाली के अंदर प्रदर्शित किया जाएगा।
यह ट्यूटोरियल आपको दिखाएगा कि कैसे, लेकिन चूंकि हमारे पास किसी तीसरे पक्ष के घटक का विचार नहीं है जिसका हम उपयोग कर सकते हैं:) उदाहरण एक सामुदायिक प्लगइन पर किए जाएंगे जो onAfterProfileUpdate ईवेंट पर ट्रिगर किया जाएगा
यदि आप नहीं जानते कि एक प्लगइन कैसे बनाया जाए जो इस इवेंट पर ट्रिगर हो जाएगा, तो हम आपको इस गाइड की जांच करने का सुझाव देते हैं

वैसे भी इसे अपने घटक में लागू करना

जैसा कि इस ट्यूटोरियल के अवलोकन में कहा गया है, हम सामुदायिक प्लगइन का उपयोग करके सूचनाएं उत्पन्न करेंगे।
आप संभवतः अपने घटक, या अपने प्लगइन के अंदर सूचनाएं बनाना चाहेंगे। निम्नलिखित ट्यूटोरियल इनमें से किसी भी मामले में काम करेगा। आपको केवल यह निर्धारित करना होगा कि आपके कोड में किस बिंदु पर अधिसूचना बनाई जाएगी और बस जोमसोशल कोर लाइब्रेरीज़ फ़ाइल लोड करें।

आवश्यकता_एक बार JPATH_ROOT . "/components/com_community/libraries/core.php" ;

नीचे बताए गए ट्यूटोरियल का अनुसरण करना आपके एक्सटेंशन के लिए भी ठीक काम करेगा

विकास वातावरण तैयार करना

1. हम मान लेंगे कि आपने पहले ही समुदाय प्रकार का उदाहरण प्लगइन बना लिया है जो उपयोगकर्ता द्वारा अपनी प्रोफ़ाइल बदलने पर चालू हो जाएगा
यदि नहीं, तो आप यहां से खाली उदाहरण प्लगइन डाउनलोड कर सकते हैं, इसे जूमला में इंस्टॉल कर सकते हैं और प्लगइन को सक्षम कर सकते हैं। इसका नाम रखा गया है समुदाय - अधिसूचना उदाहरण
2. अपने डेटाबेस पर जाएँ और इन दोनों तालिकाओं को खाली कर दें, ताकि उनमें कोई भी रिकॉर्ड न रहे

ए) उपसर्ग_समुदाय_अधिसूचना
बी) उपसर्ग_समुदाय_मेलq

3. अपनी परीक्षण साइटों पर कम से कम दो (2) उपयोगकर्ता रखें और उनकी आईडी जानें

जूमला के पुराने संस्करणों में, उपयोगकर्ता आईडी हमेशा निर्दिष्ट संख्या (62, 42) से शुरू होती है। जूमला 3 में, यह संख्या यादृच्छिक होगी, इसलिए, हमारे परीक्षण वातावरण की तस्वीर क्योंकि यह निश्चित रूप से आपके अंत में अलग होगी।

पहली अधिसूचना

प्लगइन php फ़ाइल खोलें जो ROOT/plugins/community/example में स्थित होगी
फ़ंक्शन के भीतर onAfterProfileUpdate() को प्रतिस्थापित करें

CNotificationLibrary::जोड़ें ($cmd, $actor, $target, $subject, $body, $template, $params);

जैसा कि उदाहरण में दिखाया गया है, नोटिफिकेशन ऐड एपीआई में 7 पैरामीटर हैं

  • $cmd - अधिसूचना प्रकार है. आप इस फ़ाइल में सभी अधिसूचना प्रकार देख सकते हैं। ROOT/components/com_community/libraries/notificationtypes.php लाइन 53 से या उसके आसपास शुरू होता है। हम system_message अधिसूचना प्रकार का उपयोग करने की सलाह देते हैं।
  • $अभिनेता - वह व्यक्ति है जो कार्रवाई को अंजाम देता है
  • $target - वह व्यक्ति या लोगों का समूह है जो अधिसूचना प्राप्त करेगा
  • $विषय - अधिसूचना पॉपअप विंडो और ईमेल शीर्षक दोनों में अधिसूचना विषय है
  • $body - ईमेल अधिसूचना संदेश का मुख्य भाग है
  • $टेम्पलेट - यदि आपको उपयोग करने के लिए विशिष्ट टेम्पलेट की आवश्यकता है, तो आप इसे यहां परिभाषित कर सकते हैं। अन्यथा, यह पैरामीटर खाली हो सकता है
  • $params - कस्टम परिभाषित पैरामीटर
  • यह सब जानने के बाद, आइए हम उन वेरिएबल्स को परिभाषित करें जिनका हम उपयोग करेंगे
    अपना प्लगइन कोड इसमें बदलें:

    $user = CFactory::getUser(); $cmd = "system_messageing" ; // पहला पैरामीटर, गतिविधि का प्रकार $अभिनेता = $उपयोगकर्ता ->आईडी; //दूसरा पैरामीटर - $actor $target = "965" की आईडी प्राप्त करें; // तीसरा परम. अधिसूचना किसे प्राप्त होती है? हमारे देव परिवेश में, इसका व्यवस्थापक उपयोगकर्ता आईडी 965 के साथ है। आपके परिवेश में, आप संभवतः अपने ऑब्जेक्ट से या उपयोगकर्ताओं की श्रृंखला से आईडी प्राप्त करना चाहेंगे। $विषय = "अधिसूचना विषय" ; // दोनों का विषय, ईमेल और पॉपअप सूचनाएं $body = ; //ईमेल में मुख्य संदेश। $ टेम्पलेट = "" ; // यदि आपको विशिष्ट जोमसोशल टेम्पलेट फ़ाइल का उपयोग करने की आवश्यकता है, तो आप इसे यहां परिभाषित कर सकते हैं। $params = नया CParameter("" ); // हम एक अतिरिक्त पैराम्स ऑब्जेक्ट बनाना चाहते हैं, और इसे औपचारिक रूप से क्लास सीनोटिफिकेशन लाइब्रेरी को परिभाषित किए बिना डेटा असाइन करना चाहते हैं:: जोड़ें ( $cmd, $actor, $target, $subject, $body, $template, $params ) ;

    अब किसी भी यूजर से लॉगइन करें और प्रोफाइल जानकारी बदलें। क्या हुआ यह देखने के लिए आइए डेटाबेस पर जाएँ।
    prefix_community_notifications तालिका पर जाएँ और नया रिकॉर्ड देखें

    prefix_community_mailq तालिका पर जाएँ, और नया रिकॉर्ड देखें

    बधाई हो! - आपने सफलतापूर्वक अपना पहला नोटिफिकेशन बना लिया है जिसे ईमेल और आंतरिक जोमसोशल नोटिफिकेशन सिस्टम के माध्यम से भेज दिया गया है


    संभावित कोड ब्लोट

    उपरोक्त उदाहरण ठीक है, और यह काम करता है, लेकिन आम तौर पर इसे इस तरह उपयोग करने की अनुशंसा नहीं की जाती है। इसके बजाय, इसे इस तरह लिखा जा सकता है

    $अभिनेता = CFactory::getUser(); $params = नया CParameter("" ); CNotificationLibrary:: जोड़ें ("system_messageing", $actor -> "यह अधिसूचना का मुख्य संदेश है", "" , $params );

    यह बहुत साफ-सुथरा है और इसका पालन करना आसान है, जबकि मूल रूप से ऊपर दिखाए गए कोड के समान ही काम करता है।

    कस्टम अधिसूचना पैरामीटर

    एक अधिसूचना एपीआई को किसी भी ऐसे पैरामीटर के साथ बढ़ाया जा सकता है जिसे आप जोड़ना चाहते हैं।
    इन पैरामीटर्स को ईमेल टेम्प्लेट, अधिसूचना और निश्चित रूप से भाषा फ़ाइल में भेजा जा सकता है।

    $अभिनेता = CFactory::getUser(); $लिंक = "http://www.google.com" ; $params = नया CParameter("" ); $params -> सेट ("अभिनेता" , $अभिनेता -> getDisplayName() ); // (अभिनेता) टैग के रूप में उपयोग किया जा सकता है $params -> set ("actor_url" , "index.php?option=com_community&view=profile&userid=" . $actor -> id ) ; // (अभिनेता) टैग के लिए लिंक $params -> सेट ("यूआरएल", $लिंक); //संपूर्ण गतिविधि का यूआरएल। अधिसूचना विंडो में अवतार पर मँडराते समय उपयोग किया जाता है। आउटगोइंग ईमेल में (यूआरएल) टैग के रूप में भी इस्तेमाल किया जा सकता है। सुनिश्चित करें कि आपने $link वैरिएबल को परिभाषित किया है:) CNotificationLibrary:: जोड़ें ("system_messageing", $actor -> id, "965", "Notification Subject", "यह नोटिफिकेशन बॉडी संदेश है", "" , $params) ;

    • $params = नया Cparameter( ); - हम एक नया पैराम्स ऑब्जेक्ट बनाना चाहते हैं, और किसी क्लास को औपचारिक रूप से परिभाषित किए बिना, उसमें डेटा असाइन करना चाहते हैं।
    • $params->set('अभिनेता', $अभिनेता->getDisplayName()); - आपके नोटिफिकेशन में हमेशा एक एक्टर होना चाहिए। इस पैरामीटर को (अभिनेता) टैग के रूप में टेम्पलेट में पास किया जा सकता है। अधिसूचना विंडो में, यह उस उपयोगकर्ता को परिभाषित करता है जो कोई कार्रवाई करता है।
    • $params->set('actor_url', 'index.php?option=com_community&view=profile&userid=' . $actor->id); - अभिनेता यूआरएल आमतौर पर एक अभिनेता का यूआरएल होता है। अधिसूचना पॉपअप में, यह (अभिनेता) तत्व का लिंक जोड़ता है
    • $params->सेट('यूआरएल', $लिंक); - यह सबसे महत्वपूर्ण पैरामीटर है जिसे आपको हमेशा ठीक से सेट करना चाहिए। अधिसूचना विंडो में, इस पैरामीटर का उपयोग अवतार छवि पर किया जाता है। ईमेल अधिसूचना में, यह उस स्थान को प्रतिध्वनित करता है जहां गतिविधि हुई थी।

    इस उदाहरण के लिए, हम वेरिएबल $link को लैंड ऑन पर सेट करेंगे www.google.comतो आप देख सकते हैं कि यह कैसे काम करता है

    भाषा स्ट्रिंग जोड़ना और पैरामीटर का उपयोग करना

    हमारे द्वारा अभी सेट किए गए पैरामीटर हमारी भाषा फ़ाइलों में भी उपयोग के लिए उपलब्ध हैं।
    आइए " को परिवर्तित करके भाषा कुंजियों को परिभाषित करें CNotificationLibrary::जोड़ें()एपीआई

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

    भाषा फ़ाइल इस तरह दिखनी चाहिए

    PLG_COMMUNITY_EXAMPLE_SUBJECT = "(अभिनेता) ने प्रोफ़ाइल अपडेट की" PLG_COMMUNITY_EXAMPLE_BODY = "हाय एडमिन \n यह मेल आपको सूचित करने के लिए है कि (अभिनेता) ने प्रोफ़ाइल अपडेट की है \n\n यदि आप Google पर जाना चाहते हैं, तो यहां क्लिक करें \n a href=" _QQ_" (यूआरएल)"_QQ_">(यूआरएल)"

    इस उदाहरण में, हमने अधिसूचना और ईमेल टेम्प्लेट दोनों में डेटा पास करने के लिए टैग (अभिनेता) और (यूआरएल) का उपयोग किया है। आइए देखें कि वह कैसा दिखता है।
    अधिसूचना विंडो में अवतार पर मँडराते समय, ध्यान दें कि (यूआरएल) पैरामीटर अंदर आ गया है और अवतार पर Google पर लिंक जोड़ता है। यह जानबूझकर किया गया है, क्योंकि हमने इसे इसी तरह बनाया है :)


    ]

    उसी विंडो में, जब एक्टर लिंक पर होवर करें। यह वह हिस्सा है जहां (अभिनेता) उस उपयोगकर्ता को प्रतिध्वनित करता है जो कार्रवाई करता है, जबकि (अभिनेता_यूआरएल)" इस बात का ध्यान रखता है कि वस्तु ठीक से जुड़ी हुई है


    आइए देखें कि ईमेल कतार में क्या होता है


    और अंत में, वास्तविक ईमेल जो अंतिम उपयोगकर्ता को भेजा जाता है


    सफलता
    अब तक, हमने तीन (3) पैरामीटर बनाए हैं जिनका अधिसूचना विंडो और ईमेल में सफलतापूर्वक उपयोग किया जाता है।

  • (अभिनेता) - उपयोगकर्ता का उपयोगकर्ता नाम लौटाता है जो कार्रवाई करता है
  • (अभिनेता_यूआरएल) - देता है (अभिनेता) को विशेषता
  • (यूआरएल) - अनिवार्य नहीं है, लेकिन आपकी अधिसूचना में यह हमेशा होना चाहिए। यह मुख्य यूआरएल है जहां वह कार्रवाई होती है जिसके बारे में हमें सूचित किया जाता है।
  • इसी प्रकार, आप परिभाषित कर सकते हैं "

    • (लक्ष्य) - यदि आपको इसकी आवश्यकता है
    • (target_url) यदि आपको अपनी अधिसूचना में इसकी आवश्यकता है।
    • (शीर्षक) - आमतौर पर किसी ऑब्जेक्ट को संदर्भित करने के लिए उपयोग किया जाता है जो अधिसूचना उत्पन्न करता है। उदाहरण: "उपयोगकर्ता X ने एल्बम Y में नई फ़ोटो पोस्ट की।" एल्बम Y यहाँ शीर्षक है
    • (शीर्षक_यूआरएल) - पिछले वाले की तरह, किसी ऑब्जेक्ट का यूआरएल जिसने अधिसूचना उत्पन्न की।
    • (संदेश) - इस पैरामीटर का उपयोग जोमसोशल ईमेल के मुख्य भाग में संदेश को सेट (और प्रतिध्वनि) करने के लिए किया जा सकता है।
    3.3K

    उपयोगकर्ता को संदेश प्रदर्शित करना एक काफी सामान्य क्रिया है जिसे एक वेब एप्लिकेशन को करना चाहिए। यह प्रपत्रों को संसाधित करते समय हो सकता है, यह त्रुटि संदेश हो सकते हैं, संदेश जो आपको पंजीकरण करने के लिए कहते हैं जब कोई उपयोगकर्ता साइट के प्रतिबंधित हिस्से तक पहुंचने का प्रयास करता है, और कई अन्य मामलों में।

    अक्सर, संदेशों के निर्माण और आउटपुट को अलग-अलग HTTP अनुरोधों में विभाजित किया जाता है। एक नियम के रूप में, प्रपत्रों को संसाधित करने के बाद रीडायरेक्ट का उपयोग करना सुविधाजनक है (बैक और रीफ्रेश बटन के साथ समस्याओं से बचने के लिए), लेकिन साथ ही, संदेश बनाने का प्राकृतिक क्षण प्रपत्रों को संसाधित करने और साथ में क्रियाएं करने का क्षण होता है यह। क्यों? कल्पना करें कि संदेश का पाठ कुछ इस तरह दिखना चाहिए: "उत्पाद 'माउस पैड' के लिए ऑर्डर की गई इकाइयों की संख्या सफलतापूर्वक 7 से 12 में बदल दी गई है।" रीडायरेक्ट के बाद, शायद कार्यक्षमता के मामले में एक पूरी तरह से अलग पृष्ठ पर, यह निर्धारित करना एक अतिरिक्त सिरदर्द होगा कि पहले क्या किया गया था।

    अक्सर, फॉर्म को संसाधित करने वाले POST अनुरोध में संदेश प्रदर्शित होते हैं - यह अच्छा नहीं है, शब्द "यह पृष्ठ पुराना है" जीवन को बर्बाद कर देता है (जब उपयोगकर्ता बैक बटन आज़माने का निर्णय लेता है)।

    कोई व्यक्ति मैत्रीपूर्ण संदेशों को त्यागकर रीडायरेक्ट का उपयोग करता है।

    साथ ही जीवन को बेहतर बनाने का एक सरल और स्पष्ट तरीका भी है। स्पष्टता के बावजूद, किसी कारण से मैंने कभी किसी को इसका उपयोग करते नहीं देखा - कम से कम जब मैंने अन्य लोगों के स्रोतों को देखा।

    तो, हमारे पास एक समस्या है - संदेश को विभिन्न अनुरोधों में "लाइव" होना चाहिए। हमें संदेश के पाठ को उस पृष्ठ पर स्थानांतरित करने के लिए एक तंत्र की आवश्यकता है जो इसे प्रदर्शित करे। आपको संभवतः सत्रों के बारे में पहले से ही याद होगा।

    हाँ, सामान्यतः आप सही हैं। अन्य विधियाँ, उदाहरण के लिए वैश्विक चर के माध्यम से, उस स्थिति में डेटा को सहेजने की अनुमति नहीं देती हैं जब रीडायरेक्ट का उपयोग किया जाता है (मैक्सिम नौमेंको द्वारा नोट)। साथ ही, मैं आमतौर पर यह सुनिश्चित करता हूं कि एप्लिकेशन की प्रत्येक स्क्रीन में अन्य जानकारी के साथ-साथ उन संदेशों को प्रदर्शित करने की क्षमता हो जो पिछली स्क्रीन पर उत्पन्न हुए थे। यह सुविधाजनक है क्योंकि संदेशों को प्रदर्शित करने के लिए अलग-अलग स्क्रीन तैयार करने की आवश्यकता नहीं होती है और उपयोगकर्ता को दोबारा माउस क्लिक नहीं करना पड़ता है। लेकिन, वास्तव में, डिजाइनर को यहां सोचने की जरूरत है - उस क्षेत्र को उजागर करने के लिए जिसमें संदेश दिखाई देंगे।

    यह विचार बहुत सरल है और इसे कुछ कक्षाओं के साथ लागू किया जा सकता है।

    पहली बात जो मन में आती है वह एक संदेश वर्ग बनाना है, जो वास्तव में, हमारे सरल वर्ग आरेख में एक संदेश का प्रतिनिधित्व करेगा। संदेश सत्र में स्वयं को सहेजने में सक्षम होना चाहिए, साथ ही स्क्रीन पर भी प्रदर्शित होना चाहिए।

    वर्ग संदेश (/** * संदेश सामग्री। */ var $content; /** * संदेश पाठ को प्रारंभ करने के लिए कंस्ट्रक्टर। * * @param सामग्री संदेश सामग्री */ फ़ंक्शन संदेश ($ सामग्री) ($ यह-> सामग्री = $ सामग्री ; ) /** * सत्र के लिए एक संदेश लिखें। */ फ़ंक्शन भेजें() ( $_SESSION["session_messages"] = $this->content; ) /** * पृष्ठ पर एक संदेश आउटपुट करें। */ फ़ंक्शन toPage() ( echo " - " . $this->content . "
    "; } }

    सत्र तक पहुँचने के लिए $_SESSION वेरिएबल का उपयोग किया जाता है।

    ध्यान दें कि $_SESSION एक सरणी है, हम इस सरणी के केवल एक तत्व का उपयोग इंडेक्स 'session_message' के साथ कर रहे हैं।

    इस मामले में, हम "सरणी की सरणी" के साथ काम कर रहे हैं - जिसे हम 'session_message' तत्व में संग्रहीत करते हैं वह एक सरणी है, यह प्रेषित संदेशों की सूची है (बेशक, उनमें से कई हो सकते हैं)।

    यदि आपको थ्रेड नहीं मिल सका, तो सत्रों और सरणियों के लिए समर्पित मैनुअल के अनुभागों पर गौर करने का समय आ गया है।

    आपके पास एक प्रश्न हो सकता है. यहाँ कक्षाओं की आवश्यकता क्यों है? दो कार्यों से काम चलाना संभव होगा। लेकिन आइए आगे देखें। हमें विभिन्न प्रकार (जानकारी, त्रुटि, चेतावनी) वाले संदेश बनाने और संदेश प्राप्तकर्ताओं को निर्धारित करने की आवश्यकता हो सकती है।

    कृपया ध्यान दें कि फिलहाल ऑब्जेक्ट को ही सत्र में नहीं डाला गया है, बल्कि केवल संदेश टेक्स्ट को रखा गया है। ओओपी हमें बाद में इस पद्धति तक पहुंचने वाले क्लाइंट कोड को बदले बिना सेंड() पद्धति के व्यवहार को बदलने की अनुमति देता है (उदाहरण के लिए, भविष्य में हम सत्र में संपूर्ण संदेश ऑब्जेक्ट लिख सकते हैं यदि इसमें कई फ़ील्ड हैं)।

    आइए कल्पना करें कि हम फ़ंक्शंस का उपयोग करके ऐसा करेंगे। हमारे पास संभवतः एक message_send($txt) फ़ंक्शन होगा, और एक message_to_page($txt) फ़ंक्शन भी होगा। अब हमें विभिन्न प्रकार के संदेशों के लिए अलग-अलग व्यवहार करने की क्षमता जोड़ने की आवश्यकता है। फ़ंक्शन कॉल में परिवर्तन: message_send($txt, $kind), message_to_page($txt, $kind)। आपको ऐसे फ़ंक्शंस की खोज में सुधार करते हुए संपूर्ण एप्लिकेशन कोड को खंगालना होगा।

    संदेश को एक सहयोगी सरणी के रूप में प्रस्तुत करके स्थिति का पहले से अनुमान लगाकर इससे बचा जा सकता है: $msg['txt'], $msg['kind'], फिर फ़ंक्शन कॉल में केवल एक पैरामीटर होगा। क्या आप महसूस कर सकते हैं कि यह किस प्रकार एक वर्ग बनने का प्रयास कर रहा है?

    तो, ओओपी आपको हर चीज़ के बारे में पहले से न सोचने का अवसर देता है।

    अगली कक्षा - इनबॉक्स - केवल इसी के लिए डिज़ाइन की गई है।

    क्लास इनबॉक्स ( /** * प्राप्त संदेशों की सरणी। */ var $messages = array(); /** * कंस्ट्रक्टर में, हम सभी प्राप्त संदेश प्राप्त करते हैं * और उन्हें सत्र से हटा देते हैं। */ फ़ंक्शन इनबॉक्स() ( यदि (is_array($ _SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->संदेश = नया संदेश($संदेश[$i]); ) ) /* संदेश सरणी साफ़ करें */ $_SESSION["session_messages"] = array(); ) /** * इनबॉक्स की सामग्री को पृष्ठ पर प्रदर्शित करें। */ function toPage() ($co = sizeof($this->messages); if ($co > 0) ( echo "सिस्टम से संदेश:
    "; ) के लिए ($i = 0; $i< $co; $i++) { $this->संदेश[$i]->ToPage(); ) ) )

    आइए हमारे मैसेजिंग सिस्टम को आज़माएँ।

    आइए एक बहुत ही सरल उदाहरण बनाएं जो वर्तमान मिनट में सेकंड की संख्या की रिपोर्ट करके फॉर्म सबमिशन का जवाब देगा।

    हमने सभी कार्यों को कक्षाओं के अंदर सरणियों और सत्रों के साथ छिपा दिया, और अंतिम कोड सरल और सुंदर दिखता है।

    अपने वेब सर्वर पर एक निर्देशिका बनाएं, फिर उसमें ये तीन फ़ाइलें बनाएं और स्क्रिप्ट आज़माएं। कृपया ध्यान दें कि बैक और रिफ्रेश बटन के साथ कोई समस्या नहीं है।

    अब कल्पना करें कि आप एक जटिल पोर्टल बना रहे हैं, जहां, एक नियम के रूप में, पृष्ठों पर कई ब्लॉक हैं, और प्रत्येक में एक अलग एप्लिकेशन हो सकता है।

    यहां हमें दो कठिनाइयों का सामना करना पड़ता है:

    * मैं चाहता हूं कि संदेशों की सूची पृष्ठ के एक विशिष्ट भाग में दिखाई दे, और आपको इसके लिए पहले से ही एक अच्छी जगह मिल गई है।
    समस्या यह है कि आपको ठीक उसी समय $inbox->toPage() कमांड चलाने की आवश्यकता है जो पृष्ठ पर संदेशों की सूची की स्थिति के अनुरूप हो। यदि हम इस सूची की स्थिति बदलना चाहते हैं तो हमें कोड में जाना होगा, लेकिन इसके लिए पोर्टल फ़्रेम को लगातार बदलना अच्छा नहीं है। सबसे अच्छा समाधान संदेशों के आउटपुट को एक अलग मॉड्यूल के रूप में बनाना होगा, जिसे हम केवल इतना जानते हैं कि इसे फ्रेमवर्क से कनेक्ट करने की आवश्यकता है।
    यानी, मॉड्यूल लॉन्च करने के सख्त क्रम से खुद को मुक्त करें। दरअसल, चूंकि इनबॉक्स आउटपुट का परिणाम सिस्टम के संचालन पर निर्भर नहीं करता है (इस चरण में हमारे पास पहले से ही सत्र का सारा डेटा है), तो अतिरिक्त जटिलता क्यों?
    * संदेश सूची की उपस्थिति (डिज़ाइन) को बनाए रखने के लिए, आपको HTML कोड का ध्यान रखना होगा, जो संदेश और इनबॉक्स कक्षाओं के toPage() तरीकों में हार्डकोड किया गया है। आमतौर पर, डिज़ाइन बदलने के लिए आपको PHP कोड बदलना होगा।

    पहली समस्या को हल करने का प्रयास करने के लिए, आप एक बफर बना सकते हैं जो इनबॉक्स आउटपुट के परिणाम को संग्रहीत करता है।

    शायद हमारे पास अभी भी कई समान (इनबॉक्स में) चीजें होंगी, और हमें एक बफर सिस्टम बनाने की जरूरत है। यह भ्रमित न करने के लिए कि किसका आउटपुट किसका है, हम संभवतः बफ़र्स का नामकरण करेंगे। हम उस क्रम को कहीं संग्रहीत करेंगे जिसके अनुसार बफ़र्स आउटपुट होना चाहिए - परिवर्तनों को आसान बनाने के लिए अधिमानतः एक बाहरी फ़ाइल में।

    समाधान का यह प्रयास हमें पहले से ही XML को मध्यवर्ती डेटा संग्रहीत करने के साधन के रूप में उपयोग करने का विचार देता है। और XSLT शैलियों का उपयोग करने से दूसरी समस्या को हल करने में मदद मिलेगी।

    मैं इस पर ध्यान नहीं दूँगा कि XML क्या है और XSLT क्या है। यदि आप इन चीज़ों से परिचित नहीं हैं, तो zvon.org तलाश शुरू करने के लिए एक अच्छी जगह है।

    विचार HTML कोड नहीं, बल्कि toPage() विधियों में एक XML संरचना उत्पन्न करना है। पृष्ठ दस्तावेज़ XML कोड के साथ एक स्ट्रिंग के रूप में बनाया जाएगा (यह "बफ़र" के रूप में काम करेगा), और स्क्रिप्ट के अंतिम चरण में हम XSL परिवर्तन का उपयोग करेंगे।

    सबसे पहले, आइए कल्पना करें कि कोड के मुख्य भाग का परिणाम क्या होना चाहिए।

    मिनट 57 सेकंड: 45

    यह क्या है इसका अनुमान लगाना काफी आसान है - दो संदेश और एक फॉर्म। कृपया ध्यान दें कि PHP स्क्रिप्ट को केवल ऐसी स्ट्रिंग तैयार करने की आवश्यकता है - यह बहुत सरल है। इसके अलावा, मुख्य टैग का क्रम महत्वपूर्ण नहीं है - उदाहरण के लिए, आप उन्हें पहले रख सकते हैं, जो प्रोग्रामर के लिए सुविधाजनक होगा। इसे कैसे क्रियान्वित करें. आप, कुछ भी बदले बिना, आउटपुट बफ़रिंग, HTML कोड के बजाय आउटपुट XML का उपयोग कर सकते हैं, और अंत में आउटपुट को केवल एक स्ट्रिंग में कैप्चर कर सकते हैं। लेकिन तब हम लचीलापन खो देंगे - उदाहरण के लिए, कभी-कभी आप डिबगिंग जानकारी को सीधे पृष्ठ पर आउटपुट करना चाहते हैं (इको का उपयोग करके)। उसी समय, PHP डेवलपर्स एक DOM मॉड्यूल पर काम कर रहे हैं जो ट्री दस्तावेज़ बनाने और पास करने का अधिक उन्नत तरीका प्रदान करता है। यदि हम DOM को लागू करना चाहते हैं, तो हमें DOM तत्वों के निर्माण के लिए स्ट्रिंग्स के आउटपुट को बदलते हुए, पूरे एप्लिकेशन को फिर से डिज़ाइन करना होगा। इसलिए, मैं वस्तुओं के XML प्रतिनिधित्व को वस्तुओं के भीतर ही संग्रहीत करना पसंद करता हूं, क्रमिक रूप से एक सामान्य XML दस्तावेज़ को असेंबल करता हूं। यह उतना मुश्किल नहीं है, बस इसमें थोड़े से संशोधन की जरूरत है। आप देखेंगे कि यह तकनीक XML डेटा संग्रहीत करने के किसी विशिष्ट तरीके से सख्ती से बंधी नहीं है, और यह आपको थोड़े से प्रयास के साथ DOM का उपयोग करने के लिए संक्रमण करने की अनुमति देगा। सबसे पहले, ध्यान दें कि हमारी प्रत्येक वस्तु में एक toPage() विधि है। इस समानता से हमें एक नया सामान्य अभिभावक वर्ग शुरू करने के बारे में सोचना चाहिए। प्रत्येक वर्ग जो किसी पृष्ठ के लिए XML दस्तावेज़ के टुकड़े बना सकता है, उसे उस वर्ग से प्राप्त होने दें जो ऑब्जेक्ट के XML प्रतिनिधित्व का ध्यान रखेगा। चलिए इसे आउटपुटेबल कहते हैं।

    क्लास आउटपुटेबल (/** * XML कंटेनर (स्ट्रिंग)। */ var $output = ""; /** * कंटेनर की सामग्री दें और कंटेनर को साफ़ करें। * * @XML डेटा के साथ एक स्ट्रिंग लौटाएं */ फ़ंक्शन getOutput () ( $ out = $this->output; $this->output = ""; return $out; ) /** * कंटेनर की सामग्री में एक भाग जोड़ें। * * @param जोड़ने के लिए स्ट्रिंग को स्ट्रिंग करें * / फ़ंक्शन एपेंडआउटपुट($स्ट्रिंग) ($यह ->आउटपुट .= $स्ट्रिंग . "एन"; ) /** * "सार" विधि। */ फ़ंक्शन टूपेज() ( ) )

    टॉपेज () विधि को खाली कर दिया गया है - इस मामले में यह एक संकेतक के रूप में आवश्यक है कि बाहरी "मैत्रियोश्का" वर्गों को आंतरिक वर्ग के साथ कैसे संवाद करना चाहिए। हालाँकि, हम यहां एक डिफ़ॉल्ट कार्यान्वयन की पेशकश कर सकते हैं यदि हमने देखा कि ऐसी कई वस्तुएं हैं जो पृष्ठ पर खुद को उसी तरह प्रदर्शित करती हैं।

    संदेश और इनबॉक्स कक्षाएं थोड़ी बदल जाएंगी - उन्हें अब आउटपुटेबल से प्राप्त होना चाहिए, और toPage() विधियां भी बदल जाएंगी
    संदेश.php

    क्लास संदेश आउटपुट योग्य (/** * संदेश सामग्री। */ var $content; /** * संदेश पाठ को प्रारंभ करने के लिए कंस्ट्रक्टर। * * @param सामग्री संदेश सामग्री */ फ़ंक्शन संदेश ($ सामग्री) ($ यह-> सामग्री) का विस्तार करता है = $content; ) /** * सत्र के लिए एक संदेश लिखें। */ फ़ंक्शन भेजें() ( $_SESSION["session_messages"] = $this->content; ) /** * पृष्ठ पर एक संदेश आउटपुट करें। * / फ़ंक्शन toPage() ($this->appendOutput(''.$this->content.''); ) )

    क्लास इनबॉक्स आउटपुटेबल (/** * प्राप्त संदेशों की सरणी का विस्तार करता है। */ var $messages = array(); /** * कंस्ट्रक्टर में, हम सभी प्राप्त संदेश प्राप्त करते हैं * और उन्हें सत्र से हटा देते हैं। */ फ़ंक्शन इनबॉक्स( ) ( यदि (is_array ($_SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->संदेश = नया संदेश($संदेश[$i]); ) ) /* संदेश सरणी साफ़ करें */ $_SESSION["session_messages"] = array(); ) /** * इनबॉक्स की सामग्री को पृष्ठ पर प्रदर्शित करें। */ फ़ंक्शन toPage() ($co = sizeof($this->messages); $this->appendOutput(""); for ($i = 0; $i< $co; $i++) { $this->संदेश[$i]->toPage(); $this->appendOutput($this->messages[$i]->getOutput()); ) $this->appendOutput(""); ) )

    आउटपुट विधि बदल गई है - अब, सीधे पृष्ठ पर आउटपुट करने के बजाय, बाहरी प्रतिनिधित्व कुछ समय के लिए आउटपुटेबल में संग्रहीत किया जाता है, जो प्रत्येक ऑब्जेक्ट में "बैठता है"। एपेंडऑटपुट() विधि इको() निर्माण के प्रतिस्थापन के रूप में कार्य करती है। किसी ऑब्जेक्ट का आउटपुट प्राप्त करने के लिए getOutput() विधि का उपयोग किया जाता है।

    अब देखते हैं कि कोड का क्लाइंट भाग क्या है, जो पहले की तरह ही समस्या का समाधान करेगा।
    Index.php

    मुख्य नवाचार $global_content ऑब्जेक्ट में है, जिसका नाम स्वयं ही बोलता है। इस मामले में, यह आउटपुटेबल वर्ग से संबंधित है; वास्तविक जीवन के कार्यों में, आप संभवतः पृष्ठ सामग्री के लिए एक अलग वर्ग बनाएंगे।

    यदि आप बारीकी से देखें, तो स्क्रिप्ट की सामग्री व्यावहारिक रूप से नहीं बदली है - वही इनबॉक्स, वही टूपेज()। एक निर्देश जोड़ा गया जो पृष्ठ सामग्री में संदेश सूची की सामग्री प्रदर्शित करता है। विविधता के लिए, अब दो संदेश उत्पन्न होते हैं।

    परिणाम देखने के लिए, जो कुछ बचा है वह XSL टेम्पलेट तैयार करना है।
    style.xsl

    एक्सएसएलटी उदाहरण

    संदेश

    हमने क्या हासिल किया है?

    सबसे पहले, आप अधिक आत्मविश्वास से जटिल परियोजनाओं को अपना सकते हैं - मॉड्यूल की वास्तविक स्वतंत्रता सुनिश्चित की जाती है। जिस क्रम में परिणाम पृष्ठ पर रखे जाते हैं उसे अब बाहरी XSL टेम्पलेट का उपयोग करके नियंत्रित किया जाता है और यह उस क्रम पर निर्भर नहीं करता है जिसमें मॉड्यूल चलाए जाते हैं।

    कोई भी मॉड्यूल जो अपने कार्य के परिणामस्वरूप XML डेटा उत्पन्न करता है, उसका उपयोग किसी प्रोजेक्ट में किया जा सकता है। वैसे, यह टेम्प्लेट इंजनों के फायदों में से एक है, जिसमें डेटा निर्माण में एक विशिष्ट इंजन के कॉलिंग तरीकों (असाइन आदि) का अनुक्रम शामिल होता है, जिसके लिए कोई सामान्य मानक नहीं है।

    एक अन्य लाभ डिबगिंग में आसानी है। यदि आप स्क्रिप्ट चलाते हैं, तो आप देखेंगे कि प्रत्येक पृष्ठ में डिबग आउटपुट होता है - एक XML प्रोटोटाइप जो डिबगिंग अनुप्रयोगों को बहुत सरल बनाता है।

    आपको कुछ और सोचने की ज़रूरत है कि संदेश ऑब्जेक्ट कैसे बनाएं। क्लाइंट कोड में सीधे new का उपयोग करना हमेशा सुविधाजनक नहीं होता है। लेकिन शायद यह एक अलग लेख का विषय है.

    अंत में, संभावनाओं के बारे में सरपट दौड़ना:

    * महत्वपूर्ण संदेशों की सूची के लिए पॉप-अप विंडो
    * संदेशों में "प्रेषक पृष्ठ" और "गंतव्य पृष्ठ"।
    * डेटाबेस में संदेश लॉग करना
    * बटन "मेरे कार्यों का इतिहास दिखाएँ"
    * सत्रों के भीतर उपयोगकर्ता क्रियाओं का सांख्यिकीय विश्लेषण
    * वेब अनुप्रयोगों में "बुद्धिमान सहायक"।

    केपी और बीयूएस में, संस्करण 11.5 से शुरू होकर, उन संस्करणों में जिनमें सोशल नेटवर्क शामिल है, एक नया मॉड्यूल "वेब मैसेंजर" सामने आया है।
    सभी के लिए जारी होने से पहले, मॉड्यूल ने हमारे "सोशल इंट्रानेट" पर आग का बपतिस्मा लिया, जिसमें 8 अपडेट एकत्र किए गए


    छह महीने के विकास में हमने बहुत कुछ किया है

    हमने पिछले इंटरफ़ेस को पूरी तरह से छोड़ दिया और लोकप्रिय इंस्टेंट मैसेंजर के अनुभव के आधार पर एक नया इंटरफ़ेस बनाया।
    पेज के भीतर संवाद विंडो खुलने लगी, उसमें चेहरे दिखाई देने लगे, संदेशों को रंग कोडित किया गया और एक ही समय में कई लोगों के साथ आसानी से बातचीत करना संभव हो गया।

    इतिहास विंडो एक अलग विषय है, हर कोई लंबे समय से इतिहास की खोज करना चाहता था, अब आखिरकार हमारे पास यह है, हम त्वरित नेविगेशन के लिए वहां एक कैलेंडर जोड़ने की योजना बना रहे हैं।

    हमने विभिन्न प्रकार के संदेशों के साथ एक अधिसूचना केंद्र बनाया, उनकी प्राप्ति के इतिहास को देखने की क्षमता प्रदान की, और डेवलपर्स के लिए सूचनाओं को जोड़ने और वापस बुलाने के लिए एक सरल एपीआई प्रदान की।

    और यह सब आपकी साइट के प्रत्येक पृष्ठ पर उपलब्ध है!

    दुर्भाग्य से, जो कुछ भी योजना बनाई गई थी, उसे लागू नहीं किया गया

    पहलाहमारे पास संदेशों को अपनी तालिकाओं में अनुवाद करने का समय नहीं था।
    इस तरह के परिवर्तन से "सोशल नेटवर्क" मॉड्यूल को छोड़ना संभव हो जाएगा, जिससे संपादकों की पसंद में अधिक स्वतंत्रता मिलेगी, और समूह चैट शुरू करना भी संभव होगा।

    दूसरा, यह सच्चे "तत्काल" संचार का कार्यान्वयन है। अब मॉड्यूल नियमित पूलिंग का उपयोग करता है, प्रत्येक एन-सेकेंड में एक बार सर्वर को पोल करता है, पोलिंग अवधि संचार की गतिविधि के आधार पर भिन्न होती है।
    हम एक अलग सेवा लिखने की योजना बना रहे हैं जो निरंतर कनेक्शन बनाए रखेगी और आवश्यकतानुसार डेटा अपडेट भेजेगी (मैसेंजर के लिए, लाइव फ़ीड आदि के लिए)।

    तीसरा, हम इंटरफ़ेस को थोड़ा बदलने, अलग-अलग संपर्क सूची और संवाद विंडो को त्यागने और उन्हें एक पूरे में संयोजित करने की योजना बना रहे हैं, जो भविष्य में हमें मैसेंजर को एक मोबाइल एप्लिकेशन में स्थानांतरित करने की अनुमति देगा।

    अभी तक कोई दस्तावेज़ नहीं है और यह शरद ऋतु तक प्रकट नहीं होगा, क्योंकि... मॉड्यूल सक्रिय रूप से विकसित किया जा रहा है और हम एपीआई को बदलने की क्षमता छोड़ना चाहते हैं।
    हालाँकि, मैं एपीआई के उस हिस्से के साथ काम करने के उदाहरण प्रकाशित करने का प्रयास करूंगा जिस पर काम पहले ही पूरा हो चुका है और आप उन्हें अपने मॉड्यूल में सुरक्षित रूप से उपयोग कर सकते हैं।

    सूचनाओं के साथ कार्य करना (संस्करण 11.5.2 से शुरू होने वाले आईएम के लिए प्रासंगिक)

    हमने तीन प्रकार की सूचनाएं लागू की हैं:
    - वैयक्तिकृत अधिसूचना;
    - सिस्टम से अधिसूचना;
    - पुष्टि की आवश्यकता वाली अधिसूचना;

    एपीआई का उपयोग करने से पहले, आपको यह जांचना होगा कि सिस्टम पर मॉड्यूल स्थापित है या नहीं:

    यदि (IsModuleInstalled("im") && CModule::IncludeModule("im")) ( ) ?>

    वैयक्तिकृत अधिसूचना


    यदि संदेशों को NOTIFY_TAG पर सेट किया गया है, तो उपयोगकर्ता उन्हें समूहीकृत करेगा।

    सिस्टम से अधिसूचना


    $arMessageFields = array(// प्राप्तकर्ता "TO_USER_ID" => $USER->GetId(), // प्रेषक (>0 हो सकता है) "FROM_USER_ID" => 0, // अधिसूचना प्रकार "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, // मॉड्यूल जिसने एक अधिसूचना "NOTIFY_MODULE" => "im", // समूहीकरण के लिए प्रतीकात्मक टैग भेजने का अनुरोध किया है (केवल एक संदेश प्रदर्शित किया जाएगा), यदि यह आवश्यक नहीं है, तो पैरामीटर "NOTIFY_TAG" => "IM_CONFIG_NOTICE" सेट न करें। // साइट पर अधिसूचना पाठ (एचटीएमएल और बीबी कोड उपलब्ध) "NOTIFY_MESSAGE" => "[बी] ध्यान दें: आपको "त्वरित संदेश और अधिसूचना" मॉड्यूल की सेटिंग्स में सोशल नेटवर्क के लिए सही पथ की जांच और निर्दिष्ट करना होगा" , // ईमेल (या एक्सएमपीपी) द्वारा भेजा जाने वाला अधिसूचना पाठ, यदि कोई अंतर नहीं है, तो पैरामीटर सेट न करें //"NOTIFY_MESSAGE_OUT" => ""); CIMNotify::जोड़ें($arMessageFields); ?>

    अधिसूचना की पुष्टि की आवश्यकता है (पुष्टि करें)


    $arMessageFields = array(// प्राप्तकर्ता "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 बजे", // ईमेल (या एक्सएमपीपी) द्वारा भेजने के लिए अधिसूचना पाठ, यदि कोई अंतर नहीं है, तो पैरामीटर "NOTIFY_MESSAGE_OUT" सेट न करें => "उपयोगकर्ता एवगेनी शेलेंकोव आपको बैठक में भाग लेने के लिए आमंत्रित करता है" तत्काल संदेश और सूचनाएं" #BR# जो 03/15/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" => " इनकार", "VALUE" => "N", "TYPE" => "रद्द करें" /*, "URL " => "http://test.ru/?confirm=N" */),), // पत्र भेजने वाले टेम्पलेट का प्रतीकात्मक कोड, यदि निर्दिष्ट नहीं है, तो इसे अधिसूचना टेम्पलेट "NOTIFY_EMAIL_TEMPLATE" => " के साथ भेजा जाता है CALENDAR_INVITATION"); CIMNotify::जोड़ें($arMessageFields); ?>

    इस प्रकार की अधिसूचना के साथ काम करने के लिए, केवल एक संदेश भेजना ही पर्याप्त नहीं है; आपको इसकी सेवा भी देनी होगी।

    सेवा
    दो विकल्प हैं, सबसे सरल विकल्प लिंक का अनुसरण करना है (यदि आप NOTIFY_BUTTONS में चौथा पैरामीटर सेट करते हैं)।
    लिंक का अनुसरण करने के बाद, आपको अपने कोड में निम्नलिखित कोड को कॉल करना होगा:
    ध्यान दें: टैग के नाम पर पूरा ध्यान दें; जब आप डिलीट कहते हैं, तो उस टैग वाले सभी संदेश हटा दिए जाएंगे।
    एकाधिक संदेश भेजते समय, इसे ध्यान में रखा जाना चाहिए ताकि एक उपयोगकर्ता द्वारा किसी कार्रवाई के निष्पादन से गलती से सभी के लिए अधिसूचना न हट जाए (उन स्थानों को छोड़कर जहां ऐसे तर्क की आवश्यकता होती है)।

    दूसरा विकल्प इवेंट में है.
    सबसे पहले, आपको निर्भरता पंजीकृत करने की आवश्यकता है

    अपने कार्यों के अंदर मत भूलना निवेदन स्वीकारेंऔर अनुरोध अस्वीकार करेंअधिसूचना को हटाने का कारण बनें CIMNotify::DeleteByTag()

    अभी के लिए बस इतना ही, मैं टिप्पणियों में आपके सुझावों, सफल कार्यान्वयन की प्रतीक्षा कर रहा हूँ!
    यदि आप मापदंडों के साथ एक सरणी में 11.5.2 के रिलीज़ होने से पहले एपीआई को आज़माना चाहते हैं, तो आपको अतिरिक्त रूप से "MESSAGE_TYPE" => IM_MESSAGE_SYSTEM निर्दिष्ट करना होगा, साथ ही बटन में लिंक वाला विकल्प पुष्टिकरण सूचनाओं के लिए काम नहीं करेगा। लेकिन इंतजार करना बेहतर है; अद्यतन 11.5.2 23 मई को आने वाला है।

    प्रलाप कांपने से बेहतर एक बुरी लकीर...

    PHP AJAX CRUD: MySQL डेटाबेस में रिकॉर्ड बनाना, हटाना, संपादित करना

    इस लेख में, हम PHP का उपयोग करके MySQL डेटाबेस में रिकॉर्ड जोड़ने, संपादित करने और हटाने के तरीके के बारे में सीखेंगे। हमने एक JQuery हैंडलर का उपयोग किया जो सर्वर-साइड स्क्रिप्ट पर AJAX अनुरोध भेजता है। हैंडलर रिकॉर्ड्स की सूची अपडेट करता है।

    निर्माण, विलोपन, संपादन के लिए अनुरोध भेजने के लिए AJAX फॉर्म

    रिकॉर्ड जोड़ते समय, फॉर्म AJAX अनुरोध के माध्यम से PHP स्क्रिप्ट में डेटा भेजता है। यदि जोड़ सफल होता है, तो प्रविष्टियों की सूची पुनः लोड की जाती है।

    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); ) function cancelEdit(message,id) ( $("#message_" + id + " .message-content") .html(संदेश); ​​$("#frmAdd").show(); ) फ़ंक्शन कॉलक्रूडएक्शन(एक्शन,आईडी) ( $("#loaderIcon").show(); var queryString; स्विच(एक्शन) (केस "ऐड ": queryString = "action='+action+'&txtmessage='+ $('#txtmessage').val(); ब्रेक; केस 'संपादित करें': queryString='action='+action+'&message_id='+ id +' &txtmessage='+ $('#txtmessage_'+id).val(); breaking; केस 'delete': queryString = 'action='+action+'&message_id='+ id; breaking; ) jQuery.ajax(( url: "crud_action.php", डेटा:queryString, प्रकार: "POST", सफलता:फ़ंक्शन(डेटा)( स्विच(एक्शन) (केस "ऐड": $("#comment-list-box").append(data); ब्रेक; केस "संपादित करें": $("#message_" + id + " .message-content").html(data); $("#frmAdd").show(); तोड़ना; मामला "हटाएं": $("#message_"+id).fadeOut(); तोड़ना; ) $("#txtmessage").val(""); $('#loaderIcon').hide(); ), त्रुटि: फ़ंक्शन ()() )); )

    सीआरयूडी संचालन के लिए PHP स्क्रिप्ट

    निम्नलिखित कोड डेटाबेस के विरुद्ध क्वेरी निष्पादित करता है। यह PHP स्क्रिप्ट, CRUD क्रिया करने के बाद, AJAX प्रतिक्रिया के परिणामस्वरूप रिकॉर्ड को अपडेट करती है।

    require_once('dbcontroller.php'); $db_handle = नया DBController(); $क्रिया = $_POST["क्रिया"]; if(!empty($action)) ( Switch($action) ( केस "add": $result = mysql_query("INSERT INTO comment(message) VALUES("".$_POST["txtmessage"].")") ; if($result)($insert_id = mysql_insert_id(); echo " Edit Delete " . $_POST["txtmessage"] . " "; ) breaking; केस "edit": $result = mysql_query("अद्यतन टिप्पणी सेट संदेश = ""।$_POST["txtmessage"]।"" WHERE id='.$_POST["message_id"]); if($result) echo $_POST["txtmessage"]; breaking; केस "delete": if ( !खाली($_POST["message_id"])) ( mysql_query("टिप्पणी से हटाएं जहां id='.$_POST["message_id"]); ) ब्रेक; ) )

    इस पाठ्यक्रम में इस बिंदु पर, हमारे प्लगइन की नींव रखी गई है, एक कस्टम हुक परिभाषित किया गया है, और हुक कैसे काम करता है यह दिखाने के लिए एक सतत संदेश संलग्न किया गया है।

    कि हम नहींकिया, उन्होंने उपयोगकर्ता द्वारा दर्ज किए गए डेटा के अनुसार संदेशों के प्रकार और उनके प्रदर्शन को लागू नहीं किया।

    लेकिन शुरू करने से पहले, हमें विभिन्न संदेश प्रकारों के लिए समर्थन, एक क्लास इंटरफ़ेस जो प्रत्येक संदेश प्रकार का समर्थन करेगा, और ऐसे संदेशों को संग्रहीत करने के लिए आवश्यक डेटा संरचना जोड़ने की आवश्यकता है।

    आरंभ करने के लिए तैयार हैं?

    मैं ट्यूटोरियल जारी रखने के लिए उत्सुक हूं, लेकिन स्रोत कोड पर ध्यान देने से पहले हमें कुछ चीजों पर विचार करने की आवश्यकता है। सुनिश्चित करें कि आपके सिस्टम पर निम्नलिखित सॉफ़्टवेयर स्थापित है:

    • PHP 5.6.25 और MySQL 5.6.28
    • अपाचे या Nginx
    • वर्डप्रेस 4.6.1
    • आपका पसंदीदा आईडीई या संपादक

    और यदि आप ऑल-इन-वन समाधान ढूंढ रहे हैं, तो MAMP आज़माना न भूलें।

    हम आगे बढ़ चुके हैं

    जैसा कि पहले उल्लेख किया गया है, हम इस पाठ्यक्रम के बिल्कुल मध्य में हैं। यदि आप पहले पाठों में से कोई भी चूक गए हैं, तो यहां हमने अब तक क्या कवर किया है:

  • पहले ट्यूटोरियल में, हमने अपना प्लगइन बनाने के लिए न्यूनतम बुनियादी बातों पर ध्यान केंद्रित किया और आरंभ करने के लिए आपको क्या करना होगा।
  • दूसरे भाग में, हम प्लगइन के साथ आगे बढ़े, वर्डप्रेस में बुनियादी प्रशासन पृष्ठ में थोड़ा सा जोड़ा। हमने एक कस्टम हुक भी सौंपा है जिसका हम उपयोग करते हैं और इसे सर्वर साइड पर चलाया है। हम अपनी सेटिंग मैसेंजर के लिए बुनियादी पैरामीटर भी सेट करते हैं।
  • और प्रशिक्षण के अंतिम चरण में हम इसी पर विचार करेंगे:

  • हम इसे एक साथ जोड़ देंगे, इसे क्रियान्वित होते देखेंगे और प्लगइन को डाउनलोड के लिए सार्वजनिक रूप से उपलब्ध करा देंगे।
  • फिलहाल हमारे पास दूसरे काम भी हैं और हम उन पर फोकस करेंगे.

    चलिए काम पर वापस आते हैं

    चूँकि हमने काम करना शुरू कर दिया है (और जैसा कि पिछले पाठों में बताया गया है), हम इस भाग में कार्यों के आगे कार्यान्वयन के लिए प्रतिबद्ध हैं:

    इस ट्यूटोरियल में हम सफलता और विफलता संदेशों के लिए समर्थन जोड़कर, साथ ही सुरक्षा मुद्दों पर ध्यान देकर अपनी सेटिंग्स मैसेंजर को विकसित करना जारी रखेंगे।

    पिछले लेख में, हमने सेटिंग्स मैसेंजर में शुरुआत की थी, लेकिन केवल एक ऐसी सुविधा स्थापित करने के बिंदु तक जो उपयोगकर्ता पृष्ठ लोड होने के दौरान लगातार एक सफलता अधिसूचना प्रदर्शित करेगी।

    इस ट्यूटोरियल में हम त्रुटि, चेतावनी और सफलता संदेशों के लिए समर्थन जोड़ेंगे। फिर मैसेंजर कैसे काम करेगा इसका अंदाजा लगाने के लिए हम उन्हें स्क्रीन पर प्रदर्शित करेंगे।

    इसके अतिरिक्त, हम एक और बदलाव करने जा रहे हैं जो उपयोगकर्ता के विवेक पर सूचनाओं को खारिज करने के लिए समर्थन जोड़ देगा।

    यह इस पाठ के लिए आवश्यक कार्य की संपूर्ण योजना है। चलो शुरू करो।

    सेटिंग्स मैसेंजर एक्सटेंशन

    याद रखें, सेटिंग्स मैसेंजर का पूरा उद्देश्य वर्डप्रेस एडमिन पैनल के संदर्भ में संदेशों को प्रदर्शित करने के लिए कस्टम संदेशों, कस्टम हुक और मूल वर्डप्रेस एपीआई के साथ काम करने के हमारे तरीके को परिभाषित करना है।

    ऐसा करने के लिए, हम पिछले पाठ में किए गए कार्य का विस्तार करेंगे और यहां से शुरुआत करेंगे।

    सफल संदेश

    चूँकि हमने पिछले पाठ में सफल संदेशों के साथ शुरुआत की थी, आइए उन्हें जारी रखें। अब हमारे पास एक हार्ड-कोडित विधि है जो एकल चाल प्रदर्शित करती है: