കർശനമായ ആഡ് സന്ദേശം php. PHP AJAX CRUD: MySQL ഡാറ്റാബേസിൽ റെക്കോർഡുകൾ സൃഷ്ടിക്കുക, ഇല്ലാതാക്കുക, എഡിറ്റ് ചെയ്യുക. CRUD പ്രവർത്തനങ്ങൾക്കുള്ള PHP സ്ക്രിപ്റ്റ്

അവലോകനം

ബിൽറ്റ്-ഇൻ നോട്ടിഫിക്കേഷൻ സിസ്റ്റം, ജൂംലയിൽ ആദ്യമായി, വിവിധ പരിപാടികളെക്കുറിച്ച് ഉപയോക്താവിനെ (അല്ലെങ്കിൽ ഉപയോക്താക്കളുടെ ഗ്രൂപ്പിനെ) അറിയിക്കാൻ നിങ്ങളുടെ ആപ്പിനെ അനുവദിക്കുന്നു. ഉപയോക്താവിന് വായിക്കാനും അത് ട്രാക്ക് ചെയ്യാനും താൽപ്പര്യമുള്ള പ്രധാനപ്പെട്ട അലേർട്ടുകളായി അറിയിപ്പുകളെ കരുതുക.
എല്ലായിടത്തും അറിയിപ്പുകൾ സൃഷ്ടിക്കാൻ കഴിയും. നിങ്ങളുടെ ഘടകത്തിലോ പ്ലഗിന്നുകളിലോ പിന്നീട് JomSocial അറിയിപ്പ് സിസ്റ്റത്തിനുള്ളിൽ പ്രദർശിപ്പിക്കും.
എങ്ങനെയെന്ന് ഈ ട്യൂട്ടോറിയൽ നിങ്ങളെ കാണിക്കും, എന്നാൽ ഞങ്ങൾക്ക് ഉപയോഗിക്കാനാകുന്ന ഒരു മൂന്നാം കക്ഷി ഘടകത്തെക്കുറിച്ച് ഞങ്ങൾക്ക് ധാരണയില്ലാത്തതിനാൽ:) ഉദാഹരണങ്ങൾ ഒരു കമ്മ്യൂണിറ്റി പ്ലഗിനിൽ ചെയ്യും, അത് onAfterProfileUpdate ഇവൻ്റിൽ പ്രവർത്തനക്ഷമമാകും.
ഈ ഇവൻ്റിൽ പ്രവർത്തനക്ഷമമാക്കുന്ന ഒരു പ്ലഗിൻ എങ്ങനെ സൃഷ്ടിക്കണമെന്ന് നിങ്ങൾക്കറിയില്ലെങ്കിൽ, ഈ ഗൈഡ് പരിശോധിക്കാൻ ഞങ്ങൾ നിർദ്ദേശിക്കുന്നു

എന്തായാലും നിങ്ങളുടെ ഘടകത്തിൽ ഇത് നടപ്പിലാക്കുന്നു

ഈ ട്യൂട്ടോറിയലിൻ്റെ അവലോകനത്തിൽ പറഞ്ഞിരിക്കുന്നതുപോലെ, ഞങ്ങൾ കമ്മ്യൂണിറ്റി പ്ലഗിൻ ഉപയോഗിച്ച് അറിയിപ്പുകൾ സൃഷ്ടിക്കും.
നിങ്ങളുടെ ഘടകത്തിനോ പ്ലഗിനോ ഉള്ളിൽ അറിയിപ്പുകൾ സൃഷ്ടിക്കാൻ നിങ്ങൾ മിക്കവാറും ആഗ്രഹിക്കും. ഇനിപ്പറയുന്ന ട്യൂട്ടോറിയൽ ഈ കേസുകളിലേതെങ്കിലും പ്രവർത്തിക്കും. നിങ്ങളുടെ കോഡിലെ ഏത് ഘട്ടത്തിലാണ് അറിയിപ്പ് സൃഷ്‌ടിക്കപ്പെടുകയെന്ന് മാത്രം നിർണ്ണയിക്കുകയും JomSocial Core Libraries ഫയൽ ലോഡ് ചെയ്യുകയും വേണം.

ഒരിക്കൽ JPATH_ROOT . "/components/com_community/libraries/core.php" ;

ചുവടെ വിശദീകരിച്ചിരിക്കുന്ന ട്യൂട്ടോറിയൽ പിന്തുടരുന്നത് നിങ്ങളുടെ വിപുലീകരണത്തിനും നന്നായി പ്രവർത്തിക്കും

വികസന പരിസ്ഥിതി തയ്യാറാക്കൽ

1. നിങ്ങൾ ഇതിനകം തന്നെ കമ്മ്യൂണിറ്റി ടൈപ്പ് ഉദാഹരണ പ്ലഗിൻ സൃഷ്ടിച്ചിട്ടുണ്ടെന്ന് ഞങ്ങൾ അനുമാനിക്കും, അത് ഉപയോക്താവ് പ്രൊഫൈൽ മാറ്റുമ്പോൾ പ്രവർത്തനക്ഷമമാക്കും
ഇല്ലെങ്കിൽ, നിങ്ങൾക്ക് ശൂന്യമായ ഉദാഹരണ പ്ലഗിൻ ഡൗൺലോഡ് ചെയ്യാം, അത് ജൂംലയിൽ ഇൻസ്റ്റാൾ ചെയ്ത് പ്ലഗിൻ പ്രവർത്തനക്ഷമമാക്കുക. അതിന് പേരിട്ടിരിക്കുന്നു കമ്മ്യൂണിറ്റി - അറിയിപ്പുകളുടെ ഉദാഹരണം
2. നിങ്ങളുടെ ഡാറ്റാബേസിലേക്ക് നാവിഗേറ്റുചെയ്‌ത് ഈ രണ്ട് ടേബിളുകളും ശൂന്യമാക്കുക, അതിനാൽ അവർക്ക് രേഖകളൊന്നും ഇല്ല

A) prefix_community_notification
b) prefix_community_mailq

3. നിങ്ങളുടെ ടെസ്റ്റ് സൈറ്റുകളിൽ കുറഞ്ഞത് രണ്ട് (2) ഉപയോക്താക്കളെങ്കിലും ഉണ്ടായിരിക്കുകയും അവരുടെ ഐഡികൾ അറിയുകയും ചെയ്യുക

ജൂംലയുടെ മുൻ പതിപ്പുകളിൽ, യൂസർ ഐഡി'കൾ എല്ലായ്‌പ്പോഴും നിർദ്ദിഷ്ട നമ്പറിൽ നിന്നാണ് (62, 42) ആരംഭിക്കുന്നത്, ജൂംല 3-ൽ, ഈ നമ്പർ ക്രമരഹിതമായിരിക്കും, അതിനാൽ, ഞങ്ങളുടെ ടെസ്റ്റിംഗ് പരിതസ്ഥിതിയുടെ ചിത്രം നിങ്ങളുടെ അവസാനം തീർച്ചയായും വ്യത്യസ്തമായിരിക്കും.

ആദ്യ അറിയിപ്പ്

ROOT/plugins/കമ്മ്യൂണിറ്റി/ഉദാഹരണത്തിൽ സ്ഥിതി ചെയ്യുന്ന പ്ലഗിൻ php ഫയൽ തുറക്കുക
onAfterProfileUpdate() എന്ന ഫംഗ്‌ഷനിൽ മാറ്റിസ്ഥാപിക്കുക

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

ഉദാഹരണത്തിൽ കാണിച്ചിരിക്കുന്നതുപോലെ, നോട്ടിഫിക്കേഷൻ ആഡ് എപിഐയ്ക്ക് 7 പാരാമീറ്ററുകൾ ഉണ്ട്

  • $cmd - അറിയിപ്പ് തരമാണ്. ഈ ഫയലിൽ നിങ്ങൾക്ക് എല്ലാ അറിയിപ്പുകളുടെയും തരങ്ങൾ കാണാൻ കഴിയും. ROOT/components/com_community/libraries/notificationtypes.php ആരംഭിക്കുന്നത്, അല്ലെങ്കിൽ 53 വരിയിൽ നിന്നാണ്. system_messaging അറിയിപ്പ് തരം ഉപയോഗിക്കാൻ ഞങ്ങൾ ശുപാർശ ചെയ്യുന്നു.
  • $actor - പ്രവർത്തനം നടത്തുന്ന വ്യക്തിയാണ്
  • $target - അറിയിപ്പ് ലഭിക്കുന്ന വ്യക്തി അല്ലെങ്കിൽ ആളുകളുടെ കൂട്ടമാണ്
  • $subject - നോട്ടിഫിക്കേഷൻ വിഷയമാണ്, രണ്ടിലും, അറിയിപ്പ് പോപ്പ്അപ്പ് വിൻഡോയിലും ഇമെയിൽ ശീർഷകത്തിലും
  • $body - ഇമെയിൽ അറിയിപ്പ് സന്ദേശത്തിൻ്റെ ബോഡിയാണ്
  • $ടെംപ്ലേറ്റ് - നിങ്ങൾക്ക് ഉപയോഗിക്കാൻ പ്രത്യേക ടെംപ്ലേറ്റ് വേണമെങ്കിൽ, നിങ്ങൾക്കത് ഇവിടെ നിർവചിക്കാം. അല്ലെങ്കിൽ, ഈ പരാമീറ്റർ ശൂന്യമായിരിക്കും
  • $params - ഇഷ്ടാനുസൃത നിർവചിച്ച പാരാമീറ്ററുകൾ
  • ഇതെല്ലാം അറിഞ്ഞുകൊണ്ട്, നമ്മൾ ഉപയോഗിക്കുന്ന വേരിയബിളുകൾ നിർവചിക്കാം
    നിങ്ങളുടെ പ്ലഗിൻ കോഡ് ഇതിലേക്ക് മാറ്റുക:

    $user = CFactory ::getUser(); $cmd = "system_messaging" ; // ആദ്യ പാരം, പ്രവർത്തനത്തിൻ്റെ തരം $actor = $user -> id ; //രണ്ടാം പാരം - $actor $target = "965" എന്നതിൻ്റെ ഐഡി നേടുക ; // മൂന്നാം പാരം. ആർക്കൊക്കെ അറിയിപ്പ് ലഭിക്കും? ഞങ്ങളുടെ ദേവ് പരിതസ്ഥിതിയിൽ, ഐഡി 965 ഉള്ള അതിൻ്റെ അഡ്‌മിൻ ഉപയോക്താവ്. നിങ്ങളുടെ പരിതസ്ഥിതിയിൽ, നിങ്ങളുടെ ഒബ്‌ജക്റ്റിൽ നിന്നോ ഉപയോക്താക്കളുടെ നിരയിൽ നിന്നോ ഐഡി ലഭിക്കാൻ നിങ്ങൾ ആഗ്രഹിച്ചേക്കാം. $subject = "അറിയിപ്പ് വിഷയം" ; // രണ്ടിൻ്റെയും വിഷയം, ഇമെയിൽ, പോപ്പ്അപ്പ് അറിയിപ്പുകൾ $body = ; //ഇമെയിലുകളിൽ ബോഡി സന്ദേശം. $ടെംപ്ലേറ്റ് = "" ; // നിങ്ങൾക്ക് പ്രത്യേക ജോംസോഷ്യൽ ടെംപ്ലേറ്റ് ഫയൽ ഉപയോഗിക്കണമെങ്കിൽ, നിങ്ങൾക്കത് ഇവിടെ നിർവചിക്കാം. $params = പുതിയ CPparameter("" ); // ഒരു ക്ലാസ് CNotificationLibrary:: ചേർക്കുക ($cmd , $actor , $target , $subject , $body , $template , $params ) ;

    ഇപ്പോൾ ഏതെങ്കിലും ഉപയോക്താവുമായി ലോഗിൻ ചെയ്ത് പ്രൊഫൈൽ വിവരങ്ങൾ മാറ്റുക. എന്താണ് സംഭവിച്ചതെന്ന് കാണാൻ നമുക്ക് ഡാറ്റാബേസിലേക്ക് പോകാം.
    prefix_community_notifications ടേബിളിലേക്ക് നാവിഗേറ്റ് ചെയ്ത് പുതിയ റെക്കോർഡ് നിരീക്ഷിക്കുക

    prefix_community_mailq പട്ടികയിലേക്ക് നാവിഗേറ്റ് ചെയ്യുക, പുതിയ റെക്കോർഡ് കാണുക

    അഭിനന്ദനങ്ങൾ! - ഇമെയിൽ വഴിയും ഇൻ്റേണൽ JomSocial അറിയിപ്പ് സിസ്റ്റം വഴിയും അയച്ച നിങ്ങളുടെ ആദ്യ അറിയിപ്പ് നിങ്ങൾ വിജയകരമായി സൃഷ്ടിച്ചു.


    സാധ്യതയുള്ള കോഡ് ബ്ലോട്ട്

    മുകളിലുള്ള ഉദാഹരണം നല്ലതാണ്, ഇത് പ്രവർത്തിക്കുന്നു, പക്ഷേ പൊതുവെ അത് അങ്ങനെ ഉപയോഗിക്കാൻ ശുപാർശ ചെയ്യുന്നില്ല. പകരം ഇങ്ങനെ എഴുതാമായിരുന്നു

    $actor = CFactory ::getUser(); $params = പുതിയ CPparameter("" ); CNotificationLibrary:: add ( "system_messaging" , $actor -> "ഇതാണ് അറിയിപ്പ് ബോഡി സന്ദേശം" , "" , $params ) ;

    അടിസ്ഥാനപരമായി മുകളിൽ കാണിച്ചിരിക്കുന്ന ഒരു കോഡിൻ്റെ അതേ കാര്യം ചെയ്യുമ്പോൾ ഇത് കൂടുതൽ വൃത്തിയുള്ളതും പിന്തുടരാൻ എളുപ്പവുമാണ്.

    ഇഷ്‌ടാനുസൃത അറിയിപ്പ് പാരാമീറ്ററുകൾ

    നിങ്ങൾ ചേർക്കാൻ ആഗ്രഹിക്കുന്ന ഏത് പാരാം ഉപയോഗിച്ചും ഒരു അറിയിപ്പ് API വിപുലീകരിക്കാൻ കഴിയും.
    ഈ പാരാകൾ ഇമെയിൽ ടെംപ്ലേറ്റിലേക്കും അറിയിപ്പിലേക്കും തീർച്ചയായും ഭാഷാ ഫയലിലേക്കും കൈമാറാൻ കഴിയും.

    $actor = CFactory ::getUser(); $link = "http://www.google.com" ; $params = പുതിയ CPparameter("" ); $params -> സെറ്റ് ("ആക്ടർ" , $actor -> getDisplayName () ); // (ആക്ടർ) ടാഗ് ആയി ഉപയോഗിക്കാം $params -> സെറ്റ് ("actor_url" , "index.php?option=com_community&view=profile&userid=" . $actor -> id ) ; // (നടൻ) ടാഗിനായുള്ള ലിങ്ക് $params -> സെറ്റ് ("url" , $link ) ; //മുഴുവൻ പ്രവർത്തനത്തിൻ്റെയും url. അറിയിപ്പ് വിൻഡോയിൽ അവതാറിന് മുകളിൽ ഹോവർ ചെയ്യുമ്പോൾ ഉപയോഗിക്കുന്നു. ഔട്ട്‌ഗോയിംഗ് ഇമെയിലുകളിലും (url) ടാഗ് ആയി ഉപയോഗിക്കാം. നിങ്ങൾ $link വേരിയബിൾ നിർവചിച്ചിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക:) CNotificationLibrary:: ചേർക്കുക ( "system_messaging" , $actor -> id , "965" , "അറിയിപ്പ് വിഷയം" , "ഇതാണ് അറിയിപ്പ് ബോഡി സന്ദേശം" , "" , $params ) ;

    • $params = പുതിയ CPparameter( ); - ഒരു ക്ലാസ് ഔപചാരികമായി നിർവചിക്കാതെ തന്നെ ഒരു പുതിയ പാരാ ഒബ്‌ജക്റ്റ് സൃഷ്‌ടിക്കാനും അതിലേക്ക് ഡാറ്റ അസൈൻ ചെയ്യാനും ഞങ്ങൾ ആഗ്രഹിക്കുന്നു.
    • $params->set("ആക്ടർ", $actor->getDisplayName()); - നിങ്ങളുടെ അറിയിപ്പിൽ എപ്പോഴും ഒരു നടൻ ഉണ്ടായിരിക്കണം. ഈ പാരാം ടെംപ്ലേറ്റിലേക്ക് (നടൻ) ടാഗ് ആയി നൽകാം. അറിയിപ്പ് വിൻഡോയിൽ, ഒരു പ്രവർത്തനം നടത്തുന്ന ഉപയോക്താവിനെ ഇത് നിർവചിക്കുന്നു.
    • $params->set("actor_url", "index.php?option=com_community&view=profile&userid=" . $actor->id); - നടൻ്റെ URL സാധാരണയായി ഒരു നടൻ്റെ url ആണ്. അറിയിപ്പ് പോപ്പ്അപ്പിൽ, അത് (നടൻ) ഘടകത്തിലേക്കുള്ള ലിങ്ക് ചേർക്കുന്നു
    • $params->set("url", $link); - നിങ്ങൾ എല്ലായ്പ്പോഴും ശരിയായി സജ്ജീകരിക്കേണ്ട ഏറ്റവും പ്രധാനപ്പെട്ട പാരാമീറ്ററാണിത്. അറിയിപ്പ് വിൻഡോയിൽ, അവതാർ ഇമേജിൽ ഈ പാരാം ഉപയോഗിക്കുന്നു. ഇമെയിൽ അറിയിപ്പിൽ, പ്രവർത്തനം നടന്ന സ്ഥലത്തെ അത് പ്രതിധ്വനിക്കുന്നു.

    ഈ ഉദാഹരണത്തിനായി, ഞങ്ങൾ വേരിയബിൾ $link-ലേക്ക് ലാൻഡ്സ് ഓൺ സജ്ജീകരിക്കും www.google.comഅതിനാൽ ഇത് എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് നിങ്ങൾക്ക് കാണാൻ കഴിയും

    ഭാഷാ സ്ട്രിംഗ് ചേർത്ത് പാരാമുകൾ ഉപയോഗിക്കുക

    ഞങ്ങൾ ഇപ്പോൾ സജ്ജമാക്കിയ പാരാമുകൾ നമ്മുടെ ഭാഷാ ഫയലുകളിലും ഉപയോഗിക്കാൻ ലഭ്യമാണ്.
    "" മാറ്റിക്കൊണ്ട് ഭാഷാ കീകൾ നിർവചിക്കാം CNotificationLibrary::add() API

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

    ഭാഷാ ഫയൽ ഇതുപോലെ ആയിരിക്കണം

    PLG_COMMUNITY_EXAMPLE_SUBJECT = "(നടൻ) അപ്‌ഡേറ്റ് ചെയ്ത പ്രൊഫൈൽ" PLG_COMMUNITY_EXAMPLE_BODY = "ഹായ് അഡ്മിൻ \n (നടൻ) അപ്‌ഡേറ്റ് ചെയ്ത പ്രൊഫൈൽ നിങ്ങളെ അറിയിക്കാനുള്ള മെയിലാണിത് \n\n നിങ്ങൾക്ക് Google-ലേക്ക് പോകണമെങ്കിൽ, ഇവിടെ ക്ലിക്ക് ചെയ്യുക \n a href="_QQ_" (url)"_QQ_">(url)"

    ഈ ഉദാഹരണത്തിൽ, അറിയിപ്പ്, ഇമെയിൽ ടെംപ്ലേറ്റുകൾ എന്നിവയിലേക്ക് ഡാറ്റ കൈമാറാൻ ഞങ്ങൾ ടാഗ് (ആക്ടർ), (url) എന്നിവ ഉപയോഗിച്ചു. അത് എങ്ങനെ കാണപ്പെടുന്നുവെന്ന് നോക്കാം.
    അറിയിപ്പ് വിൻഡോയിൽ അവതാറിന് മുകളിൽ ഹോവർ ചെയ്യുമ്പോൾ, (url) പാരാം കിക്ക് ഇൻ ചെയ്‌ത് ഗൂഗിൾ ഓവർ അവതാറിലേക്ക് ലിങ്ക് ചേർക്കുന്നത് ശ്രദ്ധിക്കുക. ഇത് മനപ്പൂർവ്വമാണ്, കാരണം ഞങ്ങൾ അത് അങ്ങനെ ഉണ്ടാക്കി :)


    ]

    അതേ വിൻഡോയിൽ, ആക്ടർ ലിങ്കിൽ ഹോവർ ചെയ്യുമ്പോൾ. ഒരു പ്രവർത്തനം നടത്തുന്ന ഉപയോക്താവിനെ (നടൻ) പ്രതിധ്വനിപ്പിക്കുന്ന ഭാഗമാണിത്, അതേസമയം (actor_url)" ഒബ്‌ജക്‌റ്റ് ശരിയായി ലിങ്ക് ചെയ്‌തിട്ടുണ്ടോ എന്ന് ശ്രദ്ധിക്കുക


    ഇമെയിൽ ക്യൂവിൽ എന്താണ് സംഭവിക്കുന്നതെന്ന് നോക്കാം


    ഒടുവിൽ, അന്തിമ ഉപയോക്താവിന് അയച്ച യഥാർത്ഥ ഇമെയിൽ


    വിജയം
    ഇതുവരെ, അറിയിപ്പ് വിൻഡോയിലും ഇമെയിലുകളിലും വിജയകരമായി ഉപയോഗിക്കുന്ന മൂന്ന് (3) പാരാമീറ്ററുകൾ ഞങ്ങൾ സൃഷ്ടിച്ചു.

  • (അഭിനേതാവ്) - പ്രവർത്തനം നടത്തുന്ന ഉപയോക്താവിൻ്റെ ഉപയോക്തൃനാമം നൽകുന്നു
  • (actor_url) - നൽകുന്നു ആട്രിബ്യൂട്ട് (നടൻ)
  • (url) - നിർബന്ധമല്ല, എന്നാൽ നിങ്ങളുടെ അറിയിപ്പിൽ അത് എപ്പോഴും ഉണ്ടായിരിക്കണം. ഞങ്ങൾക്ക് അറിയിപ്പ് ലഭിക്കുന്ന പ്രധാന url ആണ് ഇത്.
  • അതുപോലെ, നിങ്ങൾക്ക് നിർവചിക്കാം "

    • (ലക്ഷ്യം) - നിങ്ങൾക്ക് വേണമെങ്കിൽ
    • (target_url) നിങ്ങളുടെ അറിയിപ്പിൽ ആവശ്യമെങ്കിൽ.
    • (ശീർഷകം) - അറിയിപ്പ് സൃഷ്ടിച്ച ഒരു വസ്തുവിനെ പരാമർശിക്കാൻ സാധാരണയായി ഉപയോഗിക്കുന്നു. ഉദാഹരണം: "ഉപയോക്താവ് X ആൽബം Y-ൽ പുതിയ ഫോട്ടോ പോസ്റ്റ് ചെയ്തു." ആൽബം Y ആണ് ഇവിടെ ശീർഷകം
    • (title_url) - മുമ്പത്തേത് പോലെ, അറിയിപ്പ് സൃഷ്ടിച്ച ഒബ്‌ജക്റ്റിൻ്റെ url.
    • (സന്ദേശം) - JomSocial ഇമെയിലിൻ്റെ ബോഡിയിൽ സന്ദേശം സജ്ജീകരിക്കാൻ (എക്കോ) ഈ പാരാം ഉപയോഗിക്കാം.

    അവസാനം, ഞാൻ മനസ്സിലാക്കി: നിങ്ങളുടെ ഭാര്യയെക്കാൾ മികച്ച ഒരാളെ നിങ്ങൾക്ക് കണ്ടെത്താൻ കഴിയില്ല. ഇനി ഭാര്യയെ കണ്ടെത്തുക മാത്രമാണ് ഇനിയുള്ളത്

    PHP AJAX CRUD: MySQL ഡാറ്റാബേസിൽ റെക്കോർഡുകൾ സൃഷ്ടിക്കുക, ഇല്ലാതാക്കുക, എഡിറ്റ് ചെയ്യുക

    ഈ ലേഖനത്തിൽ, PHP ഉപയോഗിച്ച് ഒരു MySQL ഡാറ്റാബേസിൽ റെക്കോർഡുകൾ ചേർക്കുന്നതും എഡിറ്റ് ചെയ്യുന്നതും ഇല്ലാതാക്കുന്നതും എങ്ങനെയെന്ന് നമ്മൾ പഠിക്കും. ഒരു സെർവർ സൈഡ് സ്ക്രിപ്റ്റിലേക്ക് AJAX അഭ്യർത്ഥന അയയ്‌ക്കുന്ന ഒരു JQuery ഹാൻഡ്‌ലർ ഞങ്ങൾ ഉപയോഗിച്ചു. ഹാൻഡ്ലർ റെക്കോർഡുകളുടെ ലിസ്റ്റ് അപ്ഡേറ്റ് ചെയ്യുന്നു.

    സൃഷ്ടിക്കുന്നതിനും ഇല്ലാതാക്കുന്നതിനും എഡിറ്റുചെയ്യുന്നതിനുമുള്ള അഭ്യർത്ഥനകൾ അയയ്ക്കുന്നതിനുള്ള AJAX ഫോം

    ഒരു റെക്കോർഡ് ചേർക്കുമ്പോൾ, ഫോം ഒരു AJAX അഭ്യർത്ഥന വഴി PHP സ്ക്രിപ്റ്റിലേക്ക് ഡാറ്റ അയയ്ക്കുന്നു. കൂട്ടിച്ചേർക്കൽ വിജയകരമാണെങ്കിൽ, എൻട്രികളുടെ ലിസ്റ്റ് വീണ്ടും ലോഡുചെയ്യും.

    CRUD ഡാറ്റാബേസ് അന്വേഷണത്തിനായി JQuery AJAX പ്രവർത്തിക്കുന്നു

    JQuery AJAX ഫംഗ്‌ഷനിൽ നമുക്ക് സ്വിച്ച് കേസുകൾ ചേർക്കുകയും എഡിറ്റ് ചെയ്യുകയും ഇല്ലാതാക്കുകയും ചെയ്യുന്നു. ഈ കേസുകൾ ഡാറ്റാബേസ് പ്രവർത്തനങ്ങളെ ആശ്രയിച്ച് വ്യത്യസ്‌ത ചോദ്യങ്ങളും പ്രതികരണ ഡാറ്റാ സ്‌ട്രിംഗുകളും സൃഷ്‌ടിക്കുന്നു.

    ഫംഗ്ഷൻ showEditBox(id) ($("#frmAdd").hide(); var currentMessage = $("#message_" + id + ".message-content").html(); var editMarkUp = ""+currentMessage+" സംരക്ഷിക്കുക .html(സന്ദേശം); $("#frmAdd").show(); ) function 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, type: "POST", success:function(data)( switch(action) ( case "add": $("#comment-list-box").append(data); break; case "edit": $("#message_" + id + " .message-content").html(data); $("#frmAdd").show(); ബ്രേക്ക്; കേസ് "delete": $("#message_"+id).fadeOut(); ബ്രേക്ക്; ) $("#txtmessage").val(""); $("#loaderIcon").hide(); ), പിശക്: പ്രവർത്തനം ()() ); )

    CRUD പ്രവർത്തനങ്ങൾക്കുള്ള PHP സ്ക്രിപ്റ്റ്

    ഇനിപ്പറയുന്ന കോഡ് ഡാറ്റാബേസിനെതിരായ അന്വേഷണങ്ങൾ നടത്തുന്നു. ഈ PHP സ്ക്രിപ്റ്റ്, ഒരു CRUD പ്രവർത്തനം നടത്തിയ ശേഷം, AJAX പ്രതികരണത്തിൻ്റെ ഫലമായി റെക്കോർഡുകൾ അപ്ഡേറ്റ് ചെയ്യുന്നു.

    ആവശ്യം_ഒന്ന് ("dbcontroller.php"); $db_handle = പുതിയ DBController(); $action = $_POST["പ്രവർത്തനം"]; if(!empty($action)) ( സ്വിച്ച്($action) (കേസ് "ചേർക്കുക": $result = mysql_query("അഭിപ്രായത്തിൽ ചേർക്കുക(സന്ദേശം) മൂല്യങ്ങൾ("".$_POST["txtmessage"].")" ) ; if($result)($insert_id = mysql_insert_id(); എക്കോ "എഡിറ്റ് ഡിലീറ്റ്" . $_POST["txtmessage"] . " "; ) ബ്രേക്ക്; കേസ് "എഡിറ്റ്": $ഫലം = mysql_query("അപ്ഡേറ്റ് കമൻ്റ് സെറ്റ് സന്ദേശം = ". !empty($_POST["message_id"])) ( mysql_query("എവിടെ ഐഡി = ".$_POST["message_id"] എന്നതിൽ നിന്ന് ഇല്ലാതാക്കുക); ) ബ്രേക്ക്; ) )

    3.3K

    ഉപയോക്താവിന് സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കുന്നത് ഒരു വെബ് ആപ്ലിക്കേഷൻ നിർവഹിക്കേണ്ട ഒരു സാധാരണ പ്രവർത്തനമാണ്. ഫോമുകൾ പ്രോസസ്സ് ചെയ്യുമ്പോൾ ഇത് സംഭവിക്കാം, അത് പിശക് സന്ദേശങ്ങൾ ആകാം, ഒരു ഉപയോക്താവ് സൈറ്റിൻ്റെ നിയന്ത്രിത ഭാഗം ആക്സസ് ചെയ്യാൻ ശ്രമിക്കുമ്പോൾ രജിസ്റ്റർ ചെയ്യാൻ നിങ്ങളോട് പറയുന്ന സന്ദേശങ്ങൾ, കൂടാതെ മറ്റ് പല സാഹചര്യങ്ങളിലും.

    മിക്കപ്പോഴും, സന്ദേശങ്ങളുടെ സൃഷ്ടിയും ഔട്ട്പുട്ടും വ്യത്യസ്ത HTTP അഭ്യർത്ഥനകളായി വേർതിരിച്ചിരിക്കുന്നു. ചട്ടം പോലെ, ഫോമുകൾ പ്രോസസ്സ് ചെയ്തതിന് ശേഷം ഒരു റീഡയറക്‌ട് ഉപയോഗിക്കുന്നത് സൗകര്യപ്രദമാണ് (ബാക്ക്, റിഫ്രഷ് ബട്ടണുകളിലെ പ്രശ്നങ്ങൾ ഒഴിവാക്കാൻ), എന്നാൽ അതേ സമയം, ഒരു സന്ദേശം സൃഷ്ടിക്കുന്നതിനുള്ള സ്വാഭാവിക നിമിഷം കൃത്യമായി ഫോമുകൾ പ്രോസസ്സ് ചെയ്യുന്നതിൻ്റെയും അതിനോടൊപ്പമുള്ള പ്രവർത്തനങ്ങൾ ചെയ്യുന്നതിൻ്റെയും നിമിഷമാണ്. അത്. എന്തുകൊണ്ട്? സന്ദേശ വാചകം ഇതുപോലെയായിരിക്കുമെന്ന് സങ്കൽപ്പിക്കുക: "'മൗസ് പാഡ്' എന്ന ഉൽപ്പന്നത്തിനായി ഓർഡർ ചെയ്ത യൂണിറ്റുകളുടെ എണ്ണം 7 ൽ നിന്ന് 12 ആയി മാറ്റി." ഒരു റീഡയറക്‌ടിനുശേഷം, ഒരുപക്ഷേ പ്രവർത്തനത്തിൻ്റെ കാര്യത്തിൽ തികച്ചും വ്യത്യസ്തമായ ഒരു പേജിലേക്ക്, മുമ്പ് എന്താണ് ചെയ്തതെന്ന് നിർണ്ണയിക്കുന്നത് ഒരു അധിക തലവേദനയായിരിക്കും.

    മിക്കപ്പോഴും, ഫോം പ്രോസസ്സ് ചെയ്യുന്ന POST അഭ്യർത്ഥനയിൽ സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കും - ഇത് നല്ലതല്ല, "ഈ പേജ് കാലഹരണപ്പെട്ടതാണ്" എന്ന വാക്കുകൾ ജീവിതത്തെ നശിപ്പിക്കുന്നു (ഉപയോക്താവ് ബാക്ക് ബട്ടൺ പരീക്ഷിക്കാൻ തീരുമാനിക്കുമ്പോൾ).

    സൗഹൃദ സന്ദേശങ്ങൾ ഉപേക്ഷിച്ച് ആരോ ഒരു റീഡയറക്‌ട് ഉപയോഗിക്കുന്നു.

    അതേ സമയം, ജീവിതം മികച്ചതാക്കാൻ ലളിതവും വ്യക്തവുമായ ഒരു മാർഗമുണ്ട്. വ്യക്തത ഉണ്ടായിരുന്നിട്ടും, ചില കാരണങ്ങളാൽ ആരും അത് ഉപയോഗിക്കുന്നതായി ഞാൻ കണ്ടിട്ടില്ല - കുറഞ്ഞത് മറ്റുള്ളവരുടെ ഉറവിടങ്ങൾ നോക്കുമ്പോൾ.

    അതിനാൽ, ഞങ്ങൾക്ക് ഒരു പ്രശ്നമുണ്ട് - സന്ദേശം വ്യത്യസ്ത അഭ്യർത്ഥനകളിൽ "ജീവിക്കണം". സന്ദേശത്തിൻ്റെ വാചകം അത് പ്രദർശിപ്പിക്കേണ്ട പേജിലേക്ക് കൈമാറാൻ ഞങ്ങൾക്ക് ഒരു സംവിധാനം ആവശ്യമാണ്. സെഷനുകളെക്കുറിച്ച് നിങ്ങൾ ഇതിനകം ഓർത്തിരിക്കാം.

    അതെ, പൊതുവെ നിങ്ങൾ പറഞ്ഞത് ശരിയാണ്. മറ്റ് രീതികൾ, ഉദാഹരണത്തിന് ഒരു ആഗോള വേരിയബിൾ വഴി, ഒരു റീഡയറക്‌ട് ഉപയോഗിക്കുമ്പോൾ ഡാറ്റ സംരക്ഷിക്കാൻ അനുവദിക്കരുത് (മാക്സിം നൗമെൻകോയുടെ കുറിപ്പ്). കൂടാതെ, ആപ്ലിക്കേഷനിലെ ഓരോ സ്‌ക്രീനിനും മറ്റ് വിവരങ്ങളോടൊപ്പം മുമ്പത്തെ സ്‌ക്രീനുകളിൽ സൃഷ്‌ടിച്ച സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കാനുള്ള കഴിവുണ്ടെന്ന് ഞാൻ സാധാരണയായി ഉറപ്പാക്കുന്നു. സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കുന്നതിന് പ്രത്യേക സ്ക്രീനുകൾ തയ്യാറാക്കേണ്ട ആവശ്യമില്ലാത്തതിനാൽ ഇത് സൗകര്യപ്രദമാണ്, കൂടാതെ ഉപയോക്താവ് വീണ്ടും മൗസിൽ ക്ലിക്ക് ചെയ്യേണ്ടതില്ല. പക്ഷേ, ശരിക്കും, ഡിസൈനർ ഇവിടെ ചിന്തിക്കേണ്ടതുണ്ട് - സന്ദേശങ്ങൾ ദൃശ്യമാകുന്ന ഏരിയ ഹൈലൈറ്റ് ചെയ്യാൻ.

    ആശയം വളരെ ലളിതമാണ് കൂടാതെ രണ്ട് ക്ലാസുകൾ ഉപയോഗിച്ച് നടപ്പിലാക്കാൻ കഴിയും.

    ഞങ്ങളുടെ ലളിതമായ ക്ലാസ് ഡയഗ്രാമിൽ ഒരു സന്ദേശത്തെ പ്രതിനിധീകരിക്കുന്ന ഒരു സന്ദേശ ക്ലാസ് സൃഷ്ടിക്കുക എന്നതാണ് ആദ്യം മനസ്സിൽ വരുന്നത്. സന്ദേശത്തിന് സെഷനിൽ സ്വയം സംരക്ഷിക്കാനും സ്ക്രീനിൽ സ്വയം പ്രദർശിപ്പിക്കാനും കഴിയണം.

    ക്ലാസ് സന്ദേശം ( /** * സന്ദേശ ഉള്ളടക്കം. */ var $content; /** * സന്ദേശ വാചകം ആരംഭിക്കുന്നതിനുള്ള കൺസ്ട്രക്റ്റർ. * * @param ഉള്ളടക്ക സന്ദേശ ഉള്ളടക്കം */ ഫംഗ്ഷൻ സന്ദേശം($content) ( $this->content = $ ഉള്ളടക്കം ; ) /** * സെഷനിലേക്ക് ഒരു സന്ദേശം എഴുതുക. */ ഫംഗ്ഷൻ അയയ്ക്കുക() ( $_SESSION["session_messages"] = $this->content; ) /** * പേജിലേക്ക് ഒരു സന്ദേശം ഔട്ട്പുട്ട് ചെയ്യുക. toPage() ( echo " - " . $this->content . "
    "; } }

    സെഷൻ ആക്സസ് ചെയ്യാൻ $_SESSION വേരിയബിൾ ഉപയോഗിക്കുന്നു.

    $_SESSION ഒരു അറേ ആണെന്ന് ശ്രദ്ധിക്കുക, 'session_message' എന്ന സൂചികയിൽ ഞങ്ങൾ ഈ അറേയുടെ ഒരു ഘടകം മാത്രമാണ് ഉപയോഗിക്കുന്നത്.

    ഈ സാഹചര്യത്തിൽ, ഞങ്ങൾ ഒരു "അറേകളുടെ നിര" കൈകാര്യം ചെയ്യുന്നു - 'session_message' ഘടകത്തിൽ ഞങ്ങൾ സംഭരിക്കുന്നത് ഒരു അറേയാണ്, ഇത് കൈമാറ്റം ചെയ്യപ്പെട്ട സന്ദേശങ്ങളുടെ പട്ടികയാണ് (തീർച്ചയായും, അവയിൽ പലതും ഉണ്ടാകാം).

    നിങ്ങൾക്ക് ത്രെഡ് കണ്ടെത്താൻ കഴിയുന്നില്ലെങ്കിൽ, സെഷനുകൾക്കും അറേകൾക്കുമായി സമർപ്പിച്ചിരിക്കുന്ന മാനുവലിൻ്റെ വിഭാഗങ്ങൾ ബ്രഷ് ചെയ്യാനുള്ള സമയമാണിത്.

    നിങ്ങൾക്ക് ഒരു ചോദ്യമുണ്ടാകാം. എന്തുകൊണ്ടാണ് ഇവിടെ ക്ലാസുകൾ ആവശ്യമായി വരുന്നത്? രണ്ട് ഫംഗ്ഷനുകൾ ഉപയോഗിച്ച് ഇത് നേടാനാകും. എന്നാൽ നമുക്ക് കൂടുതൽ നോക്കാം. വ്യത്യസ്ത തരം (വിവരം, പിശക്, മുന്നറിയിപ്പ്) ഉപയോഗിച്ച് ഞങ്ങൾക്ക് സന്ദേശങ്ങൾ സൃഷ്‌ടിക്കുകയും സന്ദേശ സ്വീകർത്താക്കളെ നിർണ്ണയിക്കുകയും ചെയ്യേണ്ടി വന്നേക്കാം.

    ഇപ്പോൾ സെഷനിൽ ഉൾപ്പെടുത്തുന്നത് ഒബ്‌ജക്റ്റല്ല, സന്ദേശ വാചകം മാത്രമാണെന്ന കാര്യം ശ്രദ്ധിക്കുക. ഈ രീതി ആക്‌സസ് ചെയ്യുന്ന ക്ലയൻ്റ് കോഡ് മാറ്റാതെ തന്നെ സെൻഡ്() രീതിയുടെ സ്വഭാവം പിന്നീട് മാറ്റാൻ OOP ഞങ്ങളെ അനുവദിക്കുന്നു (ഉദാഹരണത്തിന്, സെഷനിൽ നിരവധി ഫീൽഡുകൾ ഉണ്ടെങ്കിൽ മുഴുവൻ സന്ദേശ ഒബ്‌ജക്റ്റും സെഷനിലേക്ക് എഴുതാം).

    ഫംഗ്‌ഷനുകൾ ഉപയോഗിച്ച് ഞങ്ങൾ ഇത് ചെയ്യുമെന്ന് സങ്കൽപ്പിക്കുക. ഞങ്ങൾക്ക് ഒരു സന്ദേശം_സെൻഡ്($txt) ഫംഗ്‌ഷനും ഒരു message_to_page($txt) ഫംഗ്‌ഷനും ഉണ്ടായിരിക്കും. വ്യത്യസ്‌ത തരത്തിലുള്ള സന്ദേശങ്ങൾക്കായി വ്യത്യസ്‌ത സ്വഭാവം പുലർത്താനുള്ള കഴിവ് ഇപ്പോൾ നമ്മൾ ചേർക്കേണ്ടതുണ്ട്. ഫംഗ്‌ഷൻ കോളുകൾ മാറുന്നു: message_send($txt, $kind), message_to_page($txt, $kind). അത്തരം ഫംഗ്‌ഷനുകൾക്കായി നിങ്ങൾ മുഴുവൻ ആപ്ലിക്കേഷൻ കോഡിലൂടെയും തിരുത്തലുകൾ വരുത്തേണ്ടതുണ്ട്.

    ഒരു അസോസിയേറ്റീവ് അറേ ആയി സന്ദേശം അവതരിപ്പിക്കുന്നതിലൂടെ സാഹചര്യം മുൻകൂട്ടി കണ്ടുകൊണ്ട് ഇത് ഒഴിവാക്കാം: $msg[‘txt’], $msg[‘തരം’], തുടർന്ന് ഫംഗ്‌ഷൻ കോളുകളിൽ ഒരു പാരാമീറ്റർ മാത്രമേ ഉണ്ടാകൂ. ഇത് എങ്ങനെയാണ് ഒരു ക്ലാസായി മാറാൻ ശ്രമിക്കുന്നതെന്ന് നിങ്ങൾക്ക് തോന്നുന്നുണ്ടോ?

    അതിനാൽ, എല്ലാ കാര്യങ്ങളെക്കുറിച്ചും മുൻകൂട്ടി ചിന്തിക്കാതിരിക്കാനുള്ള ആഡംബരം ലഭിക്കാൻ OOP നിങ്ങൾക്ക് അവസരം നൽകുന്നു.

    അടുത്ത ക്ലാസ് - ഇൻബോക്സ് - ഇതിനായി മാത്രം രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്നു.

    ക്ലാസ് ഇൻബോക്സ് ( /** * സ്വീകരിച്ച സന്ദേശങ്ങളുടെ നിര. */ var $ സന്ദേശങ്ങൾ = അറേ(); /** * കൺസ്ട്രക്‌റ്ററിൽ, ഞങ്ങൾക്ക് ലഭിച്ച എല്ലാ സന്ദേശങ്ങളും * ലഭിക്കുകയും അവ സെഷനിൽ നിന്ന് ഇല്ലാതാക്കുകയും ചെയ്യുന്നു. */ ഫംഗ്‌ഷൻ ഇൻബോക്‌സ്() ( എങ്കിൽ (is_array($ _SESSION["session_messages"])) ($messages = $_SESSION["session_messages"]; $co = sizeof($messages); ($i = 0; $i< $co; $i++) { $this->സന്ദേശങ്ങൾ = പുതിയ സന്ദേശം($ സന്ദേശങ്ങൾ[$i]); ) ) /* സന്ദേശങ്ങളുടെ അറേ മായ്‌ക്കുക */ $_SESSION["session_messages"] = അറേ(); ) /** * പേജിൽ ഇൻബോക്സിലെ ഉള്ളടക്കങ്ങൾ പ്രദർശിപ്പിക്കുക. */ ഫംഗ്‌ഷൻ toPage() ( $co = sizeof($this-> സന്ദേശങ്ങൾ); എങ്കിൽ ($co > 0) (എക്കോ "സിസ്റ്റത്തിൽ നിന്നുള്ള സന്ദേശം:
    "; ) എന്നതിന് ($i = 0; $i< $co; $i++) { $this->സന്ദേശങ്ങൾ[$i]->ToPage(); )))

    നമുക്ക് നമ്മുടെ സന്ദേശമയയ്‌ക്കൽ സംവിധാനം പരീക്ഷിച്ചുനോക്കാം.

    നിലവിലെ മിനിറ്റിലെ സെക്കൻഡുകളുടെ എണ്ണം റിപ്പോർട്ട് ചെയ്തുകൊണ്ട് ഒരു ഫോം സമർപ്പിക്കലിനോട് പ്രതികരിക്കുന്ന വളരെ ലളിതമായ ഒരു ഉദാഹരണം നമുക്ക് സൃഷ്ടിക്കാം.

    ക്ലാസുകൾക്കുള്ളിലെ അറേകളും സെഷനുകളും ഉപയോഗിച്ച് ഞങ്ങൾ എല്ലാ ജോലികളും മറച്ചു, അവസാന കോഡ് ലളിതവും മനോഹരവുമാണ്.

    നിങ്ങളുടെ വെബ് സെർവറിൽ ഒരു ഡയറക്‌ടറി സൃഷ്‌ടിക്കുക, തുടർന്ന് അതിൽ ഈ മൂന്ന് ഫയലുകൾ സൃഷ്‌ടിച്ച് സ്‌ക്രിപ്റ്റ് പരീക്ഷിക്കുക. ബാക്ക്, റിഫ്രഷ് ബട്ടണുകളിൽ പ്രശ്‌നങ്ങളൊന്നുമില്ലെന്ന് ദയവായി ശ്രദ്ധിക്കുക.

    ഇപ്പോൾ നിങ്ങൾ ഒരു സങ്കീർണ്ണ പോർട്ടൽ സൃഷ്ടിക്കുകയാണെന്ന് സങ്കൽപ്പിക്കുക, അവിടെ, ചട്ടം പോലെ, പേജുകളിൽ നിരവധി ബ്ലോക്കുകൾ ഉണ്ട്, ഓരോന്നിനും ഒരു പ്രത്യേക ആപ്ലിക്കേഷൻ അടങ്ങിയിരിക്കാം.

    ഇവിടെ ഞങ്ങൾ രണ്ട് ബുദ്ധിമുട്ടുകൾ നേരിടുന്നു:

    * പേജിൻ്റെ ഒരു പ്രത്യേക ഭാഗത്ത് സന്ദേശങ്ങളുടെ ലിസ്റ്റ് ദൃശ്യമാകാൻ ഞാൻ ആഗ്രഹിക്കുന്നു, ഇതിനായി നിങ്ങൾ ഇതിനകം ഒരു നല്ല സ്ഥലം കണ്ടെത്തി.
    പേജിലെ സന്ദേശങ്ങളുടെ ലിസ്റ്റിൻ്റെ സ്ഥാനവുമായി പൊരുത്തപ്പെടുന്ന കൃത്യമായ നിമിഷത്തിൽ നിങ്ങൾ $inbox->toPage() കമാൻഡ് പ്രവർത്തിപ്പിക്കേണ്ടതുണ്ട് എന്നതാണ് പ്രശ്നം. ഈ ലിസ്റ്റിൻ്റെ സ്ഥാനം മാറ്റണമെങ്കിൽ, ഞങ്ങൾ കോഡിലേക്ക് പോകേണ്ടിവരും, പക്ഷേ ഇതിനായി പോർട്ടൽ ഫ്രെയിം നിരന്തരം മാറ്റുന്നത് നല്ലതല്ല. ഒരു പ്രത്യേക മൊഡ്യൂളിൻ്റെ രൂപത്തിൽ സന്ദേശങ്ങളുടെ ഔട്ട്പുട്ട് ഉണ്ടാക്കുക എന്നതാണ് ഏറ്റവും നല്ല പരിഹാരം, അത് ചട്ടക്കൂടുമായി ബന്ധിപ്പിക്കേണ്ടതുണ്ടെന്ന് മാത്രമേ അറിയൂ.
    അതായത്, മൊഡ്യൂളുകൾ സമാരംഭിക്കുന്നതിൻ്റെ കർശനമായ ക്രമത്തിൽ നിന്ന് സ്വയം മോചിപ്പിക്കുക. തീർച്ചയായും, ഇൻബോക്‌സ് ഔട്ട്‌പുട്ടിൻ്റെ ഫലം സിസ്റ്റത്തിൻ്റെ പ്രവർത്തനത്തെ ആശ്രയിക്കാത്തതിനാൽ (ഈ ഘട്ടത്തിൽ ഞങ്ങൾക്ക് ഇതിനകം സെഷനിലെ എല്ലാ ഡാറ്റയും ഉണ്ട്), പിന്നെ എന്തിനാണ് അധിക സങ്കീർണ്ണത?
    * സന്ദേശ ലിസ്റ്റിൻ്റെ രൂപഭാവം (രൂപകൽപ്പന) നിലനിർത്തുന്നതിന്, സന്ദേശ, ഇൻബോക്‌സ് ക്ലാസുകളിലെ toPage() രീതികളിൽ ഹാർഡ്‌കോഡ് ചെയ്‌തിരിക്കുന്ന HTML കോഡ് നിങ്ങൾ ശ്രദ്ധിക്കേണ്ടതുണ്ട്. സാധാരണഗതിയിൽ, ഡിസൈൻ മാറ്റുന്നതിന് നിങ്ങൾ PHP കോഡ് മാറ്റേണ്ടതുണ്ട്.

    ആദ്യ പ്രശ്നം പരിഹരിക്കാൻ ശ്രമിക്കുന്നതിന്, ഇൻബോക്സ് ഔട്ട്പുട്ടിൻ്റെ ഫലം സംഭരിക്കുന്ന ഒരു ബഫർ നിങ്ങൾക്ക് സൃഷ്ടിക്കാൻ കഴിയും.

    ഒരുപക്ഷേ ഞങ്ങൾക്ക് ഇപ്പോഴും സമാനമായ (ഇൻബോക്‌സിന്) നിരവധി കാര്യങ്ങൾ ഉണ്ടായിരിക്കാം, ഞങ്ങൾക്ക് ഒരു ബഫർ സിസ്റ്റം സൃഷ്ടിക്കേണ്ടതുണ്ട്. ആരുടെ ഔട്ട്‌പുട്ട് ആരുടേതാണെന്ന് ആശയക്കുഴപ്പത്തിലാക്കാതിരിക്കാൻ, ഞങ്ങൾ ബഫറുകൾക്ക് പേരിടാൻ സാധ്യതയുണ്ട്. ബഫറുകൾ ഔട്ട്‌പുട്ട് ചെയ്യേണ്ട ക്രമം ഞങ്ങൾ എവിടെയെങ്കിലും സംഭരിക്കും - മാറ്റങ്ങൾ എളുപ്പമാക്കുന്നതിന് ഒരു ബാഹ്യ ഫയലിൽ.

    ഒരു പരിഹാരത്തിനുള്ള ഈ ശ്രമം ഇതിനകം തന്നെ ഇൻ്റർമീഡിയറ്റ് ഡാറ്റ സംഭരിക്കുന്നതിനുള്ള ഒരു മാർഗമായി XML ഉപയോഗിക്കുന്നതിനുള്ള ആശയം നൽകുന്നു. XSLT ശൈലികൾ ഉപയോഗിക്കുന്നത് രണ്ടാമത്തെ പ്രശ്നം പരിഹരിക്കാൻ സഹായിക്കും.

    XML എന്താണെന്നും XSLT എന്താണെന്നും ഞാൻ ചിന്തിക്കില്ല. ഈ കാര്യങ്ങൾ നിങ്ങൾക്ക് പരിചിതമല്ലെങ്കിൽ, zvon.org നോക്കാൻ തുടങ്ങുന്നതിനുള്ള നല്ലൊരു സ്ഥലമാണ്.

    HTML കോഡല്ല, മറിച്ച് toPage() രീതികളിൽ ഒരു XML ഘടന സൃഷ്ടിക്കുക എന്നതാണ് ആശയം. പേജ് ഡോക്യുമെൻ്റ് XML കോഡുള്ള ഒരു സ്ട്രിംഗ് ആയി സൃഷ്ടിക്കും (അത് ഒരു "ബഫർ" ആയി പ്രവർത്തിക്കും), കൂടാതെ സ്ക്രിപ്റ്റിൻ്റെ അവസാന ഘട്ടത്തിൽ ഞങ്ങൾ ഒരു XSL പരിവർത്തനം ഉപയോഗിക്കും.

    ആദ്യം, കോഡിൻ്റെ പ്രധാന ഭാഗത്തിൻ്റെ ഫലം എന്തായിരിക്കണമെന്ന് നമുക്ക് സങ്കൽപ്പിക്കാം.

    മിനിറ്റ് 57 സെക്കൻഡ്: 45

    അത് എന്താണെന്ന് ഊഹിക്കാൻ വളരെ എളുപ്പമാണ് - രണ്ട് സന്ദേശങ്ങളും ഒരു ഫോമും. PHP സ്ക്രിപ്റ്റിന് അത്തരമൊരു സ്ട്രിംഗ് തയ്യാറാക്കാൻ മാത്രമേ ആവശ്യമുള്ളൂ എന്നത് ശ്രദ്ധിക്കുക - ഇത് വളരെ ലളിതമാണ്. മാത്രമല്ല, പ്രധാന ടാഗുകളുടെ ക്രമം പ്രധാനമല്ല - നിങ്ങൾക്ക് അവ ആദ്യം നൽകാം, ഉദാഹരണത്തിന്, പ്രോഗ്രാമർക്ക് സൗകര്യപ്രദമായിരിക്കും. അത് എങ്ങനെ നടപ്പാക്കും. നിങ്ങൾക്ക് ഒന്നും മാറ്റാതെ തന്നെ ഔട്ട്‌പുട്ട് ബഫറിംഗ്, HTML കോഡിന് പകരം XML ഔട്ട്‌പുട്ട് എന്നിവ ഉപയോഗിക്കാം, അവസാനം ഔട്ട്‌പുട്ട് ഒരു സ്ട്രിംഗിൽ ക്യാപ്‌ചർ ചെയ്യാം. എന്നാൽ പിന്നീട് ഞങ്ങൾക്ക് വഴക്കം നഷ്ടപ്പെടും - ഉദാഹരണത്തിന്, ചിലപ്പോൾ നിങ്ങൾ ഡീബഗ്ഗിംഗ് വിവരങ്ങൾ നേരിട്ട് പേജിലേക്ക് (എക്കോ ഉപയോഗിച്ച്) ഔട്ട്പുട്ട് ചെയ്യാൻ ആഗ്രഹിക്കുന്നു. അതേ സമയം, ട്രീ ഡോക്യുമെൻ്റുകൾ സൃഷ്ടിക്കുന്നതിനും കൈമാറുന്നതിനുമുള്ള കൂടുതൽ വിപുലമായ മാർഗം വാഗ്ദാനം ചെയ്യുന്ന ഒരു DOM മൊഡ്യൂളിൽ PHP ഡവലപ്പർമാർ പ്രവർത്തിക്കുന്നു. ഞങ്ങൾക്ക് DOM നടപ്പിലാക്കണമെങ്കിൽ, മുഴുവൻ ആപ്ലിക്കേഷനും പുനർരൂപകൽപ്പന ചെയ്യേണ്ടിവരും, സ്ട്രിംഗുകളുടെ ഔട്ട്പുട്ട് DOM ഘടകങ്ങളുടെ സൃഷ്ടിയിലേക്ക് മാറ്റുന്നു. അതിനാൽ, ഒബ്‌ജക്‌റ്റുകളുടെ എക്‌സ്എംഎൽ പ്രാതിനിധ്യം ഒബ്‌ജക്‌റ്റുകൾക്കുള്ളിൽ തന്നെ സംഭരിക്കാൻ ഞാൻ ആഗ്രഹിക്കുന്നു, ഒരു പൊതു എക്‌സ്എംഎൽ ഡോക്യുമെൻ്റ് തുടർച്ചയായി കൂട്ടിച്ചേർക്കുന്നു. ഇത് അത്ര ബുദ്ധിമുട്ടുള്ള കാര്യമല്ല, ഇതിന് കുറച്ച് മാറ്റം വരുത്തിയാൽ മതി. എക്സ്എംഎൽ ഡാറ്റ സംഭരിക്കുന്നതിനുള്ള ഒരു പ്രത്യേക മാർഗവുമായി ഈ സാങ്കേതികത കർശനമായി ബന്ധിപ്പിച്ചിട്ടില്ലെന്ന് നിങ്ങൾ കാണും, കൂടാതെ ഇത് ചെറിയ പരിശ്രമത്തിലൂടെ DOM ഉപയോഗിക്കുന്നതിനുള്ള മാറ്റം വരുത്താൻ നിങ്ങളെ അനുവദിക്കും. ഒന്നാമതായി, നമ്മുടെ ഓരോ ഒബ്ജക്റ്റിനും toPage() രീതി ഉണ്ടെന്ന് ശ്രദ്ധിക്കുക. ഈ സാമ്യം ഒരു പുതിയ കോമൺ പാരൻ്റ് ക്ലാസ് അവതരിപ്പിക്കുന്നതിനെക്കുറിച്ച് ചിന്തിക്കാൻ നമ്മെ പ്രേരിപ്പിക്കും. ഒരു പേജിനായി ഒരു XML ഡോക്യുമെൻ്റിൻ്റെ ഭാഗങ്ങൾ സൃഷ്ടിക്കാൻ കഴിയുന്ന ഓരോ ക്ലാസും ഒബ്‌ജക്റ്റിൻ്റെ XML പ്രാതിനിധ്യം പരിപാലിക്കുന്ന ഒരു ക്ലാസിൽ നിന്ന് അവകാശമാക്കട്ടെ. നമുക്ക് ഇതിനെ ഔട്ട്‌പുട്ടബിൾ എന്ന് വിളിക്കാം.

    ക്ലാസ് ഔട്ട്‌പുട്ടബിൾ ( /** * XML കണ്ടെയ്‌നർ (സ്ട്രിംഗ്). */ var $ output = ""; /** * കണ്ടെയ്‌നറിൻ്റെ ഉള്ളടക്കം നൽകി കണ്ടെയ്‌നർ ക്ലിയർ ചെയ്യുക. * * @ XML ഡാറ്റ ഉപയോഗിച്ച് ഒരു സ്ട്രിംഗ് തിരികെ നൽകുക */ ഫംഗ്‌ഷൻ getOutput () ($ out = $this->output; $this->output = ""; return $out; ) /** * കണ്ടെയ്‌നറിൻ്റെ ഉള്ളടക്കത്തിലേക്ക് ഒരു ഭാഗം ചേർക്കുക. * * @param string the string * ചേർക്കാൻ / ഫംഗ്ഷൻ appendOutput($string) ( $this ->output .= $string . "n"; ) /** * "Abstract" രീതി. */ function toPage() ( ) )

    toPage() രീതി ശൂന്യമാക്കിയിരിക്കുന്നു - ഈ സാഹചര്യത്തിൽ ബാഹ്യ “matryoshka” ക്ലാസുകൾ ആന്തരിക ക്ലാസുമായി എങ്ങനെ ആശയവിനിമയം നടത്തണം എന്നതിൻ്റെ സൂചകമായി ഇത് ആവശ്യമാണ്. എന്നിരുന്നാലും, പേജിൽ സമാനമായ രീതിയിൽ തന്നെ പ്രദർശിപ്പിക്കുന്ന നിരവധി ഒബ്‌ജക്‌റ്റുകൾ ഉണ്ടെന്ന് ശ്രദ്ധയിൽപ്പെട്ടാൽ ഞങ്ങൾക്ക് ഇവിടെ ഒരു ഡിഫോൾട്ട് നടപ്പിലാക്കൽ വാഗ്ദാനം ചെയ്യാം.

    മെസേജ്, ഇൻബോക്സ് ക്ലാസുകൾ ചെറുതായി മാറും - അവ രണ്ടും ഇപ്പോൾ ഔട്ട്‌പുട്ടബിളിൽ നിന്ന് അവകാശമാക്കണം, കൂടാതെ toPage() രീതികളും മാറും
    Message.php

    ക്ലാസ് സന്ദേശം ഔട്ട്‌പുട്ടബിൾ ( /** * സന്ദേശ ഉള്ളടക്കം വിപുലീകരിക്കുന്നു. */ var $content; /** * സന്ദേശ വാചകം ആരംഭിക്കുന്നതിനുള്ള കൺസ്ട്രക്റ്റർ. * * @param ഉള്ളടക്ക സന്ദേശ ഉള്ളടക്കം */ ഫംഗ്ഷൻ സന്ദേശം($content) ( $this->content = $ഉള്ളടക്കം; / ഫംഗ്ഷൻ toPage() ( $this->appendOutput("".$this->content.""); ) )

    ക്ലാസ് ഇൻബോക്‌സ് ഔട്ട്‌പുട്ടബിൾ വിപുലീകരിക്കുന്നു ( /** * സ്വീകരിച്ച സന്ദേശങ്ങളുടെ നിര. */ var $ സന്ദേശങ്ങൾ = അറേ(); /** * കൺസ്ട്രക്‌റ്ററിൽ, ഞങ്ങൾക്ക് ലഭിച്ച എല്ലാ സന്ദേശങ്ങളും ലഭിക്കും * കൂടാതെ അവ സെഷനിൽ നിന്ന് നീക്കംചെയ്യുകയും ചെയ്യുന്നു. */ ഫംഗ്‌ഷൻ ഇൻബോക്‌സ്( ) (($_SESSION["session_messages"])) ($messages = $_SESSION["session_messages"]; $co = sizeof($messages); ($i = 0; $i< $co; $i++) { $this->സന്ദേശങ്ങൾ = പുതിയ സന്ദേശം($ സന്ദേശങ്ങൾ[$i]); ) ) /* സന്ദേശങ്ങളുടെ അറേ മായ്‌ക്കുക */ $_SESSION["session_messages"] = അറേ(); ) /** * പേജിൽ ഇൻബോക്സിലെ ഉള്ളടക്കങ്ങൾ പ്രദർശിപ്പിക്കുക. */ ഫംഗ്‌ഷൻ toPage() ($co = sizeof($this->messages); $this->appendOutput(""); ($i = 0; $i< $co; $i++) { $this->സന്ദേശങ്ങൾ[$i]->toPage(); $this->appendOutput($this->messages[$i]->getOutput()); ) $this->appendOutput(""); ))

    ഔട്ട്പുട്ട് രീതി മാറിയിരിക്കുന്നു - ഇപ്പോൾ, പേജിലേക്ക് നേരിട്ട് ഔട്ട്പുട്ട് ചെയ്യുന്നതിന് പകരം, ഓരോ ഒബ്ജക്റ്റിലും "ഇരുന്ന" ഔട്ട്പുട്ടബിളിൽ തൽക്കാലം സംഭരിച്ചിരിക്കുന്നതാണ് ബാഹ്യ പ്രാതിനിധ്യം. appendOutput() രീതി എക്കോ() നിർമ്മിതിക്ക് പകരമായി പ്രവർത്തിക്കുന്നു. ഒരു വസ്തുവിൻ്റെ ഔട്ട്പുട്ട് ലഭിക്കുന്നതിന്, getOutput() രീതി ഉപയോഗിക്കുന്നു.

    ഇപ്പോൾ കോഡിൻ്റെ ക്ലയൻ്റ് ഭാഗം എന്താണെന്ന് നോക്കാം, അത് മുമ്പത്തെ അതേ പ്രശ്നം പരിഹരിക്കും.
    index.php

    പ്രധാന കണ്ടുപിടുത്തം $global_content ഒബ്ജക്റ്റിലാണ്, അതിൻ്റെ പേര് സ്വയം സംസാരിക്കുന്നു. ഈ സാഹചര്യത്തിൽ, ഇത് ഔട്ട്‌പുട്ടബിൾ ക്ലാസിൽ പെടുന്നു; യഥാർത്ഥ ജീവിത ടാസ്‌ക്കുകളിൽ, പേജ് ഉള്ളടക്കത്തിനായി നിങ്ങൾ ഒരു പ്രത്യേക ക്ലാസ് സൃഷ്‌ടിച്ചേക്കാം.

    നിങ്ങൾ സൂക്ഷ്മമായി നോക്കുകയാണെങ്കിൽ, സ്ക്രിപ്റ്റിൻ്റെ ഉള്ളടക്കം പ്രായോഗികമായി മാറിയിട്ടില്ല - അതേ ഇൻബോക്സ്, അതേ toPage(). പേജ് ഉള്ളടക്കത്തിൽ സന്ദേശ ലിസ്റ്റിലെ ഉള്ളടക്കങ്ങൾ പ്രദർശിപ്പിക്കുന്ന ഒരു നിർദ്ദേശം ചേർത്തു. വൈവിധ്യങ്ങൾക്കായി, ഇപ്പോൾ രണ്ട് സന്ദേശങ്ങൾ ജനറേറ്റ് ചെയ്‌തു.

    ഫലം കാണുന്നതിന്, XSL ടെംപ്ലേറ്റ് തയ്യാറാക്കുക മാത്രമാണ് അവശേഷിക്കുന്നത്.
    style.xsl

    XSLT ഉദാഹരണം

    സന്ദേശം

    നമ്മൾ എന്താണ് നേടിയത്?

    ഒന്നാമതായി, നിങ്ങൾക്ക് കൂടുതൽ ആത്മവിശ്വാസത്തോടെ സങ്കീർണ്ണമായ പ്രോജക്റ്റുകൾ ഏറ്റെടുക്കാൻ കഴിയും - മൊഡ്യൂളുകളുടെ യഥാർത്ഥ സ്വാതന്ത്ര്യം ഉറപ്പാക്കുന്നു. പേജിൽ ഫലങ്ങൾ സ്ഥാപിക്കുന്ന ക്രമം ഇപ്പോൾ ഒരു ബാഹ്യ XSL ടെംപ്ലേറ്റ് ഉപയോഗിച്ച് നിയന്ത്രിക്കപ്പെടുന്നു, കൂടാതെ മൊഡ്യൂളുകൾ പ്രവർത്തിപ്പിക്കുന്ന ക്രമത്തെ ആശ്രയിക്കുന്നില്ല.

    അതിൻ്റെ പ്രവർത്തനത്തിൻ്റെ ഫലമായി XML ഡാറ്റ സൃഷ്ടിക്കുന്ന ഏത് മൊഡ്യൂളും ഒരു പ്രോജക്റ്റിൽ ഉപയോഗിക്കാനാകും. വഴിയിൽ, ടെംപ്ലേറ്റ് എഞ്ചിനുകളെ അപേക്ഷിച്ച് ഇത് ഒരു ഗുണമാണ്, അതിൽ ഡാറ്റ സൃഷ്ടിക്കുന്നത് ഒരു നിർദ്ദിഷ്ട എഞ്ചിൻ്റെ കോളിംഗ് രീതികളുടെ (അസൈൻ ചെയ്യുക, മുതലായവ) ഒരു ശ്രേണി ഉൾക്കൊള്ളുന്നു, ഇതിന് പൊതുവായ മാനദണ്ഡമില്ല.

    ഡീബഗ്ഗിംഗ് എളുപ്പം എന്നതാണ് മറ്റൊരു നേട്ടം. നിങ്ങൾ സ്ക്രിപ്റ്റ് പ്രവർത്തിപ്പിക്കുകയാണെങ്കിൽ, ഓരോ പേജിലും ഡീബഗ് ഔട്ട്പുട്ട് അടങ്ങിയിരിക്കുന്നത് നിങ്ങൾ ശ്രദ്ധിക്കും - ഡീബഗ്ഗിംഗ് ആപ്ലിക്കേഷനുകൾ വളരെ ലളിതമാക്കുന്ന ഒരു XML പ്രോട്ടോടൈപ്പ്.

    മെസേജ് ഒബ്‌ജക്‌റ്റുകൾ എങ്ങനെ സൃഷ്‌ടിക്കാം എന്നതാണ് നിങ്ങൾ ചിന്തിക്കേണ്ട മറ്റൊരു കാര്യം. ക്ലയൻ്റ് കോഡിൽ പുതിയത് നേരിട്ട് ഉപയോഗിക്കുന്നത് എല്ലായ്പ്പോഴും സൗകര്യപ്രദമല്ല. എന്നാൽ ഒരുപക്ഷേ ഇത് ഒരു പ്രത്യേക ലേഖനത്തിനുള്ള വിഷയമാണ്.

    അവസാനമായി, സാധ്യതകളെക്കുറിച്ച് ഒരു കുതിച്ചുചാട്ടം:

    * പ്രധാനപ്പെട്ട സന്ദേശങ്ങളുടെ ഒരു ലിസ്റ്റിനായി പോപ്പ്-അപ്പ് വിൻഡോകൾ
    * സന്ദേശങ്ങളിലെ "അയക്കുന്നവരുടെ പേജുകൾ", "ലക്ഷ്യസ്ഥാന പേജുകൾ"
    * ഡാറ്റാബേസിൽ സന്ദേശങ്ങൾ ലോഗിംഗ് ചെയ്യുന്നു
    * ബട്ടൺ "എൻ്റെ പ്രവർത്തനങ്ങളുടെ ചരിത്രം കാണിക്കുക"
    * സെഷനുകൾക്കുള്ളിലെ ഉപയോക്തൃ പ്രവർത്തനങ്ങളുടെ സ്ഥിതിവിവര വിശകലനം
    * വെബ് ആപ്ലിക്കേഷനുകളിൽ "ഇൻ്റലിജൻ്റ് അസിസ്റ്റൻ്റുകൾ"

    എൻ്റെ Zend ആപ്പിൽ ഞാൻ മൊബൈൽ ആപ്പുകൾക്കായി ഒരു API എഴുതുകയാണ്. മൊബൈൽ ഡെവലപ്പർമാർക്ക് ഇത് എളുപ്പമാക്കാൻ, ഞാൻ സ്വാഗർ ഉപയോഗിക്കുന്നു. ഇതുവരെ, ഒരു GET അഭ്യർത്ഥന ഒഴികെ എല്ലാം നന്നായി പ്രവർത്തിക്കുന്നു.

    ഞാൻ എപ്പോഴാണ് /ഉപയോക്താവിനെ/സന്ദേശങ്ങളെ/(സെഷൻ ടോക്കൺ) വിളിക്കുക? NumMessages = (numMessages) & pageNr = (pageNr) ബ്രൗസറിൽ, എനിക്ക് ആവശ്യമുള്ള ഫലങ്ങൾ ലഭിക്കുന്നു, എന്നാൽ ഈ അഭ്യർത്ഥന നടപ്പിലാക്കാൻ സ്വാഗറിനെ അനുവദിക്കാൻ ശ്രമിക്കുമ്പോൾ, സെഷൻ ടോക്കൺ മാത്രമേ പാസ്സായിട്ടുള്ളൂ. സ്വാഗറിനായി ഞാൻ ഈ വ്യാഖ്യാനങ്ങൾ പരീക്ഷിച്ചു:

    /** * @SWG\Api(path="/user/messages/(sessionToken)?numMessages=(numMessages)&pageNr=(pageNr)", * @SWG\Operation(* method="GET", * summary=" പേജ് ചെയ്‌ത സന്ദേശങ്ങൾ ലഭിക്കുന്നു", * കുറിപ്പുകൾ="", * ടൈപ്പ്="സ്ട്രിംഗ്", * വിളിപ്പേര്="getUsermessagesPaged", * authorizations=(), * @SWG\Parameter(* name="sessionToken", * description="The Token ഒരു സജീവ ഉപയോക്തൃ സെഷനിൽ നിന്ന്", * ആവശ്യമാണ്=ട്രൂ, * ടൈപ്പ് = "സ്ട്രിംഗ്", * പരംടൈപ്പ് = "പാത്ത്", * അനുവദനീയമായ മൾട്ടിപ്പിൾ = ട്രൂ *), * @SWG\ പരാമീറ്റർ(* പേര് = "numMessages", * description=" പേജിലെ സന്ദേശങ്ങളുടെ എണ്ണം (numMessages & pageNr രണ്ടും സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ അവഗണിക്കപ്പെടും)", * ആവശ്യമാണ്=ട്രൂ, * type="string", * paramType="query", * allowMultiple=true *), * @SWG\Parameter (* name="pageNr", * description="pagenumber (numMessages & pageNr ഇവ രണ്ടും സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ അവഗണിക്കപ്പെടും)", * ആവശ്യമാണ്=true, * type="string", * paramType="query", * allowMultiple=true *), * @SWG\ResponseMessage(code=200, message="json (messages => "user_messages")"), * @SWG\ResponseMessage(code=400, message="json with error "ലോഗിൻ ചെയ്തിട്ടില്ല"" ) *) *) */

    എൻ്റെ തെറ്റ് ആരെങ്കിലും കാണുന്നുണ്ടോ?

    ഏത് സഹായവും സ്വാഗതം ചെയ്യുന്നു.

    ആത്മാർത്ഥതയോടെ

    അപ്ഡേറ്റ് ചെയ്യുക. നിർദ്ദേശിച്ചതുപോലെ, ഞാൻ രണ്ട് പാരാംടൈപ്പുകളും "ചോദ്യം" എന്നാക്കി മാറ്റി, പാത മാറ്റി:

    @SWG\Api(path="/user/messages/(sessionToken)",

    എന്നാൽ അവൻ ഒരു പോരാളിയായി പ്രവർത്തിച്ചില്ല.

    എക്ലിപ്സ് PDT കാണിക്കുന്ന xdebug:

    RequestURI => /ias/public/user/messages/(sessionToken)

    QueryParams => Zend\\ Stdlib\\ Parameters - *ArrayObject*storage => Array - =>

    swagger JSON:

    ( "apiVersion": "1.0.0", "swaggerVersion": "1.2", "apis": [ ( "പാത്ത്": "\/user", "വിവരണം": "ഉപയോക്താക്കൾ സംബന്ധിച്ച പ്രവർത്തനങ്ങൾ" ) ], "വിവരം" : ( "ശീർഷകം": "മൊബൈൽ ആക്‌സസ് api", "വിവരണം": "ഇത് xxx മൊബൈൽ ആക്‌സസ് api.", "termsOfServiceUrl": null, "contact": "xxx", "license": null, "licenseUrl" : null, "_partialId": null, "_partials": , "_context": ( "comment": "\/**\ * @SWG\\Info(\ * title="Mobile access api",\ * description="This is the xxx mobile access api.",\ * contact="xxx",\ *)\ *\/", "line": 3 } } } !}

    /ഉപയോക്തൃ ഔട്ട്പുട്ട് ഇതാ:

    ( "basePath": "http://localhost/ias/public", "swaggerVersion": "1.2", "apiVersion": "1.0.0", "resourcePath": "/user", "apis": [ ( "path": "/user/balance/(sessionToken)", "പ്രവർത്തനങ്ങൾ": [ ( "രീതി": "GET", "സംഗ്രഹം": "ഉപയോക്തൃ ബാലൻസ് ലഭിക്കുന്നു", "വിളിപ്പേര്": "getUserdata", "തരം": "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "വിവരണം": "ഒരു സജീവ ഉപയോക്തൃ സെഷനിൽ നിന്നുള്ള ടോക്കൺ" ) ], "പ്രതികരണ സന്ദേശങ്ങൾ": [ ( "കോഡ്": 200, "സന്ദേശം": "json (ബാലൻസ് => "ഉപയോക്തൃ_ബാലൻസ്")" ), ( "കോഡ്": 400, "സന്ദേശം ": "json പിശകുള്ള "ലോഗിൻ ചെയ്തിട്ടില്ല"" ) ], "കുറിപ്പുകൾ": "", "അംഗീകാരങ്ങൾ": () ) ]), ( "പാത്ത്": "/ഉപയോക്താവ്/ലോഗിൻ", "പ്രവർത്തനങ്ങൾ": [ ( രീതി "name": "email", "type": "string", "required": true, "allowMultiple": false, "വിവരണം": "ലോഗിൻ ചെയ്യാനുള്ള ഉപയോക്തൃ ഇമെയിൽ" ), ( "paramType": "form", "name": "password", "type": "string", "required": true, "allowMultiple": തെറ്റ്, "വിവരണം": "വ്യക്തമായ വാചകത്തിൽ ലോഗിൻ ചെയ്യുന്നതിനുള്ള പാസ്‌വേഡ്" ) ], "responseMessages": [ ( "code": 200, "message": "json with session_id, user_id, user_balance" ), ( "code": 400, "message": "json" പിശകുള്ള "ഇമെയിലും പാസ്‌വേഡും നൽകിയിട്ടില്ല" ), ( " കോഡ്": 400, "സന്ദേശം": "ജെസൺ പിശകുള്ള "അസാധുവായ ഇൻപുട്ട്"" ), ( "കോഡ്": 400, "സന്ദേശം": "പിശകുള്ള json "പോസ്റ്റ് അഭ്യർത്ഥന ഇല്ല"" ) ], "കുറിപ്പുകൾ": "" , "അംഗീകാരങ്ങൾ": () ) ] ), ( "പാത്ത്": "/ഉപയോക്താവ്/ലോഗൗട്ട്", "പ്രവർത്തനങ്ങൾ": [ ( "രീതി": "POST", "സംഗ്രഹം": "ഉപയോക്താവിനെ ലോഗ് ഔട്ട് ചെയ്യുന്നു", "വിളിപ്പേര്" : "logoutUser", "type": "string", "parameters": [ ( "paramType": "form", "name": "sessionToken", "type": "string", "required": true, " allowMultiple": തെറ്റ്, "വിവരണം": "ഒരു സജീവ ഉപയോക്തൃ സെഷനിൽ നിന്നുള്ള ടോക്കൺ" ) ], "പ്രതികരണ സന്ദേശങ്ങൾ": [ ( "കോഡ്": 200, "സന്ദേശം": "json (ഫലം => "ഇല്ലാതാക്കി")" ), ( "കോഡ്": 400, "സന്ദേശം": "പിശകുള്ള json "നൽകിയ sid ഉപയോഗിച്ച് യൂസർ_സെഷൻ ഇല്ല"" ), ( "കോഡ്": 400, "സന്ദേശം": "പിശകുള്ള json "അസാധുവായ ഇൻപുട്ട്"" ), ( "കോഡ് ": 400, "സന്ദേശം": "json പിശകുള്ള "പോസ്റ്റ് അഭ്യർത്ഥന ഇല്ല"" ) ], "കുറിപ്പുകൾ": "", "അംഗീകാരങ്ങൾ": () ) ]), ( "പാത്ത്": "/ഉപയോക്താവ്/സന്ദേശങ്ങൾ/( sessionToken)", "പ്രവർത്തനങ്ങൾ": [ ( "രീതി": "GET", "സംഗ്രഹം": "പുതിയ സന്ദേശങ്ങൾ ലഭിക്കുന്നു", "വിളിപ്പേര്": "getUsermessages", "തരം": "സ്ട്രിംഗ്", "പാരാമീറ്ററുകൾ": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "ഒരു സജീവ ഉപയോക്തൃ സെഷനിൽ നിന്നുള്ള ടോക്കൺ" ) ], "responseMessages": [ ( "code": 200, "message": "json (messages => "user_messages")" ), ( "code": 400, "message": "json" പിശകുള്ള "ലോഗിൻ ചെയ്തിട്ടില്ല "" ) ], "കുറിപ്പുകൾ": "", "അംഗീകാരങ്ങൾ": () ), ( "രീതി": "GET", "സംഗ്രഹം": "സന്ദേശങ്ങൾ പേജ് ചെയ്യുന്നു", "വിളിപ്പേര്": "getUsermessagesPaged", "തരം" : "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "വിവരണം": "ഒരു-ൽ നിന്നുള്ള ടോക്കൺ സജീവ ഉപയോക്തൃ സെഷൻ" ), ( "paramType": "query", "name": "numMessages", "type": "string", "required": true, "discription": "പേജിലെ സന്ദേശങ്ങളുടെ എണ്ണം (numMessages & numMessages & രണ്ടും സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ pageNr അവഗണിക്കപ്പെടും)" ), ( "paramType": "query", "name": "pageNr", "type": "string", "required": true, "discription": "pagenumber ( രണ്ടും സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ numMessages & pageNr അവഗണിക്കപ്പെടും)" ) ], "responseMessages": [ ( "code": 200, "message": "json (messages => "user_messages")" ), ( "code": 400 , "message": "json" പിശകുള്ള "ലോഗിൻ ചെയ്തിട്ടില്ല"" ) ], "കുറിപ്പുകൾ": "", "അംഗീകാരങ്ങൾ": () ) ]), ( "പാത്ത്": "/user/userdata", "ഓപ്പറേഷൻസ്" : [ ( "രീതി": "POST", "സംഗ്രഹം": "പോസ്റ്റുകളുടെ ഉപയോക്തൃ ഡാറ്റ", "വിളിപ്പേര്": "postUserdata", "തരം": "സ്ട്രിംഗ്", "പാരാമീറ്ററുകൾ": [ ( "paramType": "form", "name": "sessionToken", "type": "string", "ആവശ്യമാണ്": true, "allowMultiple": false, "വിവരണം": "ഒരു സജീവ ഉപയോക്തൃ സെഷനിൽ നിന്നുള്ള ടോക്കൺ" ), ( "paramType": "ഫോം" ", "പേര്": "പാസ്‌വേഡ്", "തരം": "സ്ട്രിംഗ്", "ആവശ്യമാണ്": തെറ്റ്, "അനുവദിക്കുക": തെറ്റ്, "വിവരണം": "പുതിയ പാസ്‌വേഡ്" ), ( "പാരാംടൈപ്പ്": "ഫോം", " പേര്": "വിലാസം", "തരം": "സ്ട്രിംഗ്", "ആവശ്യമാണ്": തെറ്റ്, "അനുവദിക്കുക": തെറ്റ്, "വിവരണം": "പുതിയ വിലാസം" ), ( "പാരാംടൈപ്പ്": "ഫോം", "പേര്": "housenr", "type": "string", "ആവശ്യമാണ്": false, "AllowMultiple": തെറ്റ്, "വിവരണം": "പുതിയ housenr" ), ( "paramType": "form", "name": "zip" , "തരം": "സ്ട്രിംഗ്", "ആവശ്യമാണ്": തെറ്റ്, "അനുവദിക്കുക ഒന്നിലധികം": തെറ്റ്, "വിവരണം": "പുതിയ സിപ്പ്" ), ( "പാരാംടൈപ്പ്": "ഫോം", "പേര്": "നഗരം", "തരം" ": "സ്ട്രിംഗ്", "ആവശ്യമാണ്": തെറ്റ്, "അനുവദിക്കുക ഒന്നിലധികം": തെറ്റ്, "വിവരണം": "പുതിയ നഗരം" ), ( "പാരാംടൈപ്പ്": "ഫോം", "പേര്": "ഇമെയിൽ", "തരം": " string", "required": false, "allowMultiple": false, "വിവരണം": "പുതിയ ഇമെയിൽ" ) ], "responseMessages": [ ( "code": 200, "message": "json (user => "userdata ")" ), ( "code": 400, "message": "json with error

    എൻ്റെ swagger-ui അഭ്യർത്ഥന പാരാമീറ്ററുകളൊന്നും അയയ്‌ക്കാത്തത് ഒരു പിശകായി തോന്നുന്നുണ്ടോ? സെഷൻ ടോക്കൺ എന്ന ഒരു ക്വറി പാരം ഉള്ള ഒരു ഉദാഹരണം ഇതാ: (ഫയർബഗ് 2.0.6 നിയന്ത്രിക്കുന്നത്)

    GET /ias/public/user/balance HTTP/1.1 ഹോസ്റ്റ്: ലോക്കൽഹോസ്റ്റ് ഉപയോക്താവ്-ഏജൻ്റ്: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 സ്വീകരിക്കുക:- ആപ്ലിക്കേഷൻ/json സ്വീകരിക്കുക en-US;q=0.7,en;q=0.3 സ്വീകരിക്കുക-എൻകോഡിംഗ്: gzip, ഡിഫ്ലേറ്റ് ഉള്ളടക്കം-തരം: ആപ്ലിക്കേഷൻ/json റഫറർ: http://localhost/ias/swagger/ കുക്കി: __utma=111872281.581414660.6367670.6367671863.367670 255; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set കണക്ഷൻ: Keep-alive

    ഉത്തരം ഇതായിരുന്നു:

    HTTP/1.1 400 തെറ്റായ അഭ്യർത്ഥന തീയതി: ചൊവ്വ, 25 നവംബർ 2014 14:58:20 GMT സെർവർ: Apache/2.4.9 (Win32) PHP/5.5.12 X-Powered-By: PHP/5.5.12 ഉള്ളടക്കം-2L5 കണക്ഷൻ: അടയ്‌ക്കുക ഉള്ളടക്ക തരം: അപ്ലിക്കേഷൻ/json; charset=utf-8

    സെഷൻ ടോക്കൺ പാസാക്കാത്തതിനാൽ ഉത്തരം ശരിയായിരുന്നു.

    ഇതിന് ജോലി ആവശ്യമാണ്, എന്നാൽ ഇത് swagger-ui-ൽ നിന്ന് വരുന്നതല്ല:

    GET /ias/public/user/balance?sessionToken=HTTP/1.1 ഹോസ്റ്റ്: ലോക്കൽഹോസ്റ്റ് ഉപയോക്താവ്-ഏജൻ്റ്: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 xhtml+xml,application/xml;q=0.9,*/*;q=0.8 സ്വീകരിക്കുക-ഭാഷ: de,en-US;q=0.7,en;q=0.3 സ്വീകരിക്കുക-എൻകോഡിംഗ്: gzip, deflate കുക്കി: __utma=111872281.560 .1366700677.1394721873.1394723866.255; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set കണക്ഷൻ: Keep-alive