Վեբ հավելվածներում օգտագործողին հաղորդագրությունների ցուցադրում: PHP AJAX CRUD. ստեղծել, ջնջել, խմբագրել գրառումները MySQL տվյալների բազայում PHP սկրիպտը CRUD գործողությունների համար

Ընդհանուր ակնարկ

Ներկառուցված ծանուցման համակարգը, որն առաջին անգամ եղել է Joomla-ում, թույլ է տալիս ձեր հավելվածին օգտատերին (կամ օգտատերերի խմբին) տեղեկացված պահել տարբեր իրադարձությունների մասին: Մտածեք ծանուցումները որպես կարևոր ծանուցումներ, որոնք օգտատերը շահագրգռված կլինի կարդալ և հետևել դրանց:
Ծանուցումները կարող են ստեղծվել ամենուր: Ձեր բաղադրիչում կամ պլագիններում և հետագայում ցուցադրվում JomSocial ծանուցման համակարգում:
Այս ձեռնարկը ցույց կտա ձեզ, թե ինչպես, բայց քանի որ մենք գաղափար չունենք երրորդ կողմի որևէ բաղադրիչի մասին, որը մենք կարող ենք օգտագործել:) Օրինակները կկատարվեն համայնքի փլագինով, որը կգործարկվի onAfterProfileUpdate միջոցառման ժամանակ:
Եթե ​​չգիտեք, թե ինչպես ստեղծել փլագին, որը կգործարկվի այս իրադարձության ժամանակ, մենք առաջարկում ենք ձեզ ստուգել այս ուղեցույցը

Ինչևէ, այն իրականացնելով ձեր բաղադրիչում

Ինչպես նշված է այս ձեռնարկի ակնարկում, մենք կստեղծենք ծանուցումներ՝ օգտագործելով համայնքի հավելվածը:
Դուք, ամենայն հավանականությամբ, կցանկանաք ծանուցումներ ստեղծել ձեր բաղադրիչի կամ ձեր հավելվածի ներսում: Հետևյալ ձեռնարկը կաշխատի այս դեպքերում: Դուք միայն պետք է որոշեք, թե ձեր կոդի որ կետում կստեղծվի ծանուցումը և պարզապես բեռնեք JomSocial Core Libraries ֆայլը:

require_once JPATH_ROOT: "/components/com_community/libraries/core.php";

Ստորև նկարագրված ձեռնարկին հետևելը լավ կաշխատի նաև ձեր ընդլայնման համար

Զարգացման միջավայրի պատրաստում

1. Մենք կենթադրենք, որ դուք արդեն ստեղծել եք համայնքի տիպի պլագին, որը կգործարկվի, երբ օգտվողը փոխի իր պրոֆիլը
Եթե ​​ոչ, կարող եք ներբեռնել դատարկ օրինակ հավելվածը ից, տեղադրել այն Joomla-ում և միացնել փլագինը: Այն կոչվում է Համայնք - Ծանուցումների օրինակ
2. Նավարկեք ձեր տվյալների բազա և դատարկեք այս երկու աղյուսակները, որպեսզի նրանք ընդհանրապես որևէ գրառում չունենան

Ա) նախածանց_համայնքի_ծանուցում
բ) prefix_community_mailq

3. Ձեր թեստային կայքերում ունենաք առնվազն երկու (2) օգտատեր և իմացեք նրանց ID-ները

Joomla-ի ավելի վաղ տարբերակներում օգտվողի ID-ները միշտ սկսել են նշված թվից (62, 42) Joomla 3-ում այս թիվը պատահական է լինելու, հետևաբար՝ մեր թեստավորման միջավայրի պատկերը, քանի որ այն հաստատ տարբեր կլինի ձեր վերջում:

Առաջին ծանուցում

Բացեք plugin php ֆայլը, որը կգտնվի ROOT/plugins/community/օրինակ
OnAfterProfileUpdate() ֆունկցիայի շրջանակներում փոխարինեք

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

Ինչպես ցույց է տրված օրինակում, ծանուցման ավելացման api-ն ունի 7 պարամետր

  • $cmd - ծանուցման տեսակն է: Այս ֆայլում կարող եք տեսնել բոլոր ծանուցումների տեսակները: ROOT/components/com_community/libraries/notificationtypes.php սկսած 53-րդ տողից կամ շուրջը: Խորհուրդ ենք տալիս օգտագործել system_messaging ծանուցման տեսակը:
  • $actor - գործողությունն իրականացնող անձն է
  • $target - այն մարդն է կամ մարդկանց խումբը, որը կստանա ծանուցում
  • $subject - ծանուցման թեման է և՛ ծանուցման բացվող պատուհանում, և՛ էլփոստի վերնագիրը
  • $body - էլփոստի ծանուցման հաղորդագրության մարմինն է
  • $template - եթե ձեզ անհրաժեշտ է օգտագործել հատուկ ձևանմուշ, կարող եք այն սահմանել այստեղ: Հակառակ դեպքում, այս պարամետրը կարող է դատարկ լինել
  • $params - հատուկ սահմանված պարամետրեր
  • Իմանալով այս ամենը, եկեք սահմանենք այն փոփոխականները, որոնք մենք կօգտագործենք
    Փոխեք ձեր plugin կոդը հետևյալի.

    $user = CFactory::getUser(); $cmd = "system_messaging" ; // առաջին պարամ, գործունեության տեսակ $actor = $user -> id ; //երկրորդ պարամ - ստացիր $actor $target = "965" id-ը; // երրորդ պարամ. Ովքե՞ր են ստանում ծանուցում: Մեր մշակողի միջավայրում, նրա ադմինիստրատորի օգտատերը՝ id 965-ով: Ձեր միջավայրում, ամենայն հավանականությամբ, կցանկանաք ID-ն ստանալ ձեր օբյեկտից կամ օգտատերերի զանգվածից: $subject = "Ծանուցման թեմա" ; // Երկուսի թեմա, էլփոստի և թռուցիկ ծանուցումների թեմա $body = ; //Թեմային հաղորդագրություն նամակներում: $template = "" ; // Եթե Ձեզ անհրաժեշտ է օգտագործել հատուկ jomsocial կաղապարի ֆայլ, կարող եք սահմանել այն այստեղ: $params = նոր CPparameter("" ); // Մենք ցանկանում ենք ստեղծել լրացուցիչ params օբյեկտ և դրան վերագրել տվյալներ՝ առանց CNotificationLibrary դասի պաշտոնապես սահմանելու: ավելացնել ($cmd, $actor, $target, $subject, $body, $template, $params) ;

    Այժմ մուտք գործեք ցանկացած օգտվողի հետ և փոխեք պրոֆիլի տվյալները: Եկեք գնանք տվյալների բազա՝ տեսնելու, թե ինչ է տեղի ունեցել:
    Նավարկեք դեպի prefix_community_notifications աղյուսակը և դիտեք նոր գրառումը

    Նավարկեք դեպի prefix_community_mailq աղյուսակը և տեսեք նոր գրառումը

    Շնորհավորում եմ: - Դուք հաջողությամբ ստեղծել եք ձեր առաջին սեփական ծանուցումը, որը ուղարկվել է էլ.փոստի և ներքին JomSocial ծանուցման համակարգի միջոցով


    Պոտենցիալ կոդ Bloat

    Վերևի օրինակը լավ է, և այն աշխատում է, բայց ընդհանուր առմամբ խորհուրդ չի տրվում օգտագործել այն այդպես: Փոխարենը կարելի էր այսպես գրել

    $actor = CFactory::getUser(); $params = նոր CPparameter("" ); CNotificationLibrary:: add ( "system_messaging" , $actor -> "Սա ծանուցման մարմնի հաղորդագրությունն է" , "" , $params ) ;

    Սա շատ ավելի մաքուր է և հեշտ է հետևել, մինչդեռ հիմնականում անում է բացարձակապես նույն բանը, ինչ վերը նշված կոդը:

    Հատուկ ծանուցման պարամետրեր

    Ծանուցման API-ն կարող է ընդլայնվել ցանկացած պարամետրով, որը ցանկանում եք ավելացնել:
    Այս պարամետրերը կարող են փոխանցվել էլփոստի ձևանմուշին, ծանուցմանը և, իհարկե, լեզվական ֆայլին:

    $actor = CFactory::getUser(); $link = "http://www.google.com" ; $params = նոր 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. Օգտագործվում է ծանուցման պատուհանում ավատարի վրա սավառնելիս: Կարող է օգտագործվել որպես (url) պիտակ նաև ելքային նամակներում: Համոզվեք, որ սահմանել եք $link փոփոխական:) CNotificationLibrary:: add ( "system_messaging" , $actor -> id , "965", "Ծանուցման թեմա" , "Սա ծանուցման մարմնի հաղորդագրությունն է", "" , $params ) ;

    • $params = նոր CPparameter( ); - Մենք ցանկանում ենք ստեղծել նոր params օբյեկտ և դրան վերագրել տվյալներ՝ առանց պաշտոնապես դաս սահմանելու:
    • $params->set("actor", $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_EXAMPLE_BODY", "$)"

    Լեզվի ֆայլը պետք է նման լինի

    PLG_COMMUNITY_EXAMPLE_SUBJECT = «(դերասան) թարմացված պրոֆիլը» PLG_COMMUNITY_EXAMPLE_BODY = «Ողջույն ադմինիստրատոր \n Սա նամակ է, որը կտեղեկացնի ձեզ, որ (դերասան) պրոֆիլը թարմացվել է \n\n Եթե ցանկանում եք գնալ Google, սեղմեք այստեղ \n a href=" _QQ_" (url)"_QQ_">(url)"

    Այս օրինակում մենք օգտագործել ենք թեգը (actor) և (url)՝ տվյալները փոխանցելու և՛ ծանուցումների, և՛ էլփոստի կաղապարներին: Տեսնենք, թե ինչպես է դա թվում:
    Ծանուցման պատուհանում, երբ սավառնում եք ավատարի վրա, նկատեք (url) պարամետրը, որը մուտք է գործել և ավելացնում է հղումը Google-ին ավատարի վրա: Դա միտումնավոր է, քանի որ մենք այդպես ենք արել:)


    ]

    Նույն պատուհանում, երբ սավառնում եք դերասանի հղման վրա: Սա այն հատվածն է, որտեղ (դերասանը) արձագանքել է օգտատիրոջը, որն իրականացնում է գործողություն, մինչդեռ (actor_url)» զգուշացրել է, որ օբյեկտը պատշաճ կերպով կապված է


    Տեսնենք, թե ինչ է տեղի ունենում էլփոստի հերթում


    Եվ վերջապես, փաստացի էլփոստը, որն ուղարկվում է վերջնական օգտագործողին


    Հաջողություն
    Մինչ այժմ մենք ստեղծել ենք երեք (3) պարամետր, որոնք հաջողությամբ օգտագործվում են ծանուցման պատուհանում և էլ.

  • (դերասան) - վերադարձնում է օգտատիրոջ անունը, որն իրականացնում է գործողությունը
  • (actor_url) - Տալիս է վերագրել (դերասանին)
  • (url) - Պարտադիր չէ, բայց դուք միշտ պետք է ունենաք այն ձեր ծանուցման մեջ: Դա այն հիմնական url-ն է, որտեղ տեղի է ունեցել գործողություն, որի մասին մենք տեղեկացված ենք:
  • Նմանապես, դուք կարող եք սահմանել «

    • (թիրախ) - եթե դա ձեզ անհրաժեշտ է
    • (target_url), եթե դա ձեզ անհրաժեշտ է ձեր ծանուցման մեջ:
    • (վերնագիր) - Սովորաբար օգտագործվում է ծանուցում առաջացրած օբյեկտին անդրադառնալու համար: Օրինակ՝ «X օգտվողը նոր լուսանկար է տեղադրել Y ալբոմում»: «Y» ալբոմն այստեղ է
    • (title_url) - Ինչպես նախորդների դեպքում, ծանուցում առաջացրած օբյեկտի url-ն:
    • (հաղորդագրություն) - Այս պարամետրը կարող է օգտագործվել JomSocial էլփոստի հաղորդագրությունը տեղադրելու (և արձագանքելու) համար:
    3.3K

    Օգտագործողին հաղորդագրությունների ցուցադրումը բավականին տարածված գործողություն է, որը պետք է կատարի վեբ հավելվածը: Դա կարող է առաջանալ ձևաթղթերի մշակման ժամանակ, դրանք կարող են լինել սխալի հաղորդագրություններ, հաղորդագրություններ, որոնք ձեզ հուշում են գրանցվել, երբ օգտատերը փորձում է մուտք գործել կայքի սահմանափակ մաս, և շատ այլ դեպքերում:

    Շատ հաճախ հաղորդագրությունների ստեղծումն ու ելքը բաժանվում են տարբեր HTTP հարցումների: Որպես կանոն, ձևերը մշակելուց հետո հարմար է օգտագործել վերահղում (Վերադառնալ և Թարմացնել կոճակների հետ կապված խնդիրներից խուսափելու համար), բայց միևնույն ժամանակ հաղորդագրություն ստեղծելու բնական պահը հենց ձևերի մշակման և ուղեկցող գործողությունների կատարման պահն է։ այն. Ինչո՞ւ։ Պատկերացրեք, որ հաղորդագրության տեքստը պետք է նման լինի հետևյալին. «Մկնիկի պահոց» ապրանքի համար պատվիրված միավորների թիվը հաջողությամբ փոխվել է 7-ից 12-ի»: Վերահղումից հետո, գուցե ֆունկցիոնալ առումով բոլորովին այլ էջ, լրացուցիչ գլխացավանք կլինի որոշել, թե ինչ է արվել նախկինում:

    Ամենից հաճախ հաղորդագրությունները ցուցադրվում են POST հարցումում, որը մշակում է ձևը. սա լավ չէ, «այս էջը հնացած է» բառերը խաթարում են կյանքը (երբ օգտվողը որոշում է փորձել Վերադառնալ կոճակը):

    Ինչ-որ մեկը օգտագործում է վերահղում, հրաժարվելով ընկերական հաղորդագրություններից:

    Միևնույն ժամանակ կա կյանքը ավելի լավը դարձնելու պարզ և ակնհայտ միջոց. Չնայած ակնհայտությանը, չգիտես ինչու, ես երբեք չեմ տեսել, որ որևէ մեկը դա օգտագործի, համենայն դեպս, երբ ես նայում էի այլ մարդկանց աղբյուրներին:

    Այսպիսով, մենք խնդիր ունենք՝ հաղորդագրությունը պետք է «ապրի» տարբեր խնդրանքներում։ Մեզ պետք է մեխանիզմ՝ հաղորդագրության տեքստը փոխանցելու այն էջին, որը պետք է ցուցադրի այն։ Երևի արդեն հիշել եք նիստերի մասին։

    Այո, ընդհանուր առմամբ դու ճիշտ ես։ Այլ մեթոդները, օրինակ՝ գլոբալ փոփոխականի միջոցով, թույլ չեն տալիս տվյալների պահպանում այն ​​դեպքում, երբ օգտագործվում է վերահղում (նշում է Մաքսիմ Նաումենկոն)։ Բացի այդ, ես սովորաբար համոզվում եմ, որ հավելվածի յուրաքանչյուր էկրան ունի հնարավորություն, այլ տեղեկատվության հետ մեկտեղ, ցուցադրելու հաղորդագրությունները, որոնք ստեղծվել են նախորդ էկրաններին: Սա հարմար է, քանի որ կարիք չկա առանձին էկրաններ պատրաստել հաղորդագրությունների ցուցադրման համար, և օգտատերը ստիպված չէ նորից սեղմել մկնիկի վրա։ Բայց, իրոք, դիզայները պետք է մտածի այստեղ՝ ընդգծելու այն տարածքը, որտեղ հաղորդագրությունները կհայտնվեն:

    Գաղափարը շատ պարզ է և կարող է իրականացվել մի քանի պարապմունքով։

    Առաջին բանը, որ գալիս է մտքին, Message դասի ստեղծումն է, որը, փաստորեն, կներկայացնի հաղորդագրություն մեր պարզ դասի դիագրամում: Հաղորդագրությունը պետք է կարողանա ինքն իրեն պահել նիստում, ինչպես նաև ցուցադրել էկրանին:

    class Հաղորդագրություն ( /** * Հաղորդագրության բովանդակություն. */ var $content; /** * Հաղորդագրության տեքստը սկզբնավորելու կոնստրուկտոր: * * @param բովանդակության հաղորդագրության բովանդակություն */ գործառույթ Հաղորդագրություն ($content) ( $this->content = $ բովանդակություն ;) /** * Գրեք հաղորդագրություն նիստին: */ ֆունկցիա send() ( $_SESSION["session_messages"] = $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): Նման գործառույթներ փնտրելու համար դուք ստիպված կլինեք սանրել ամբողջ հավելվածի կոդը՝ ուղղումներ կատարելով:

    Սրանից կարելի է խուսափել՝ նախապես ակնկալելով իրավիճակը՝ հաղորդագրությունը որպես ասոցիատիվ զանգված ներկայացնելով. Կարո՞ղ եք զգալ, թե ինչպես է սա փորձում դասակարգ դառնալ:

    Այսպիսով, 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[$i]); ) ) /* մաքրել հաղորդագրությունների զանգվածը */ $_SESSION["session_messages"] = array(); ) /** * Ցուցադրել Inbox-ի բովանդակությունը էջում: */ ֆունկցիա toPage() ( $co = sizeof($this->messages); if ($co > 0) ( echo "Հաղորդագրություն համակարգից.
    ";) համար ($i = 0; $i< $co; $i++) { $this->հաղորդագրություններ[$i]->ToPage(); ))))

    Եկեք փորձենք մեր հաղորդագրությունների համակարգը:

    Եկեք ստեղծենք շատ պարզ օրինակ, որը կպատասխանի ձևաթղթի ներկայացմանը` հաղորդելով ընթացիկ րոպեի վայրկյանների քանակը:

    Մենք թաքցրել ենք զանգվածների և նիստերի ամբողջ աշխատանքը դասերի ներսում, և վերջնական կոդը պարզ և գեղեցիկ տեսք ունի:

    Ստեղծեք գրացուցակ ձեր վեբ սերվերի վրա, այնուհետև ստեղծեք այս երեք ֆայլերը դրանում և փորձեք սկրիպտը: Խնդրում ենք նկատի ունենալ, որ «Վերադառնալ» և «Թարմացնել» կոճակների հետ կապված խնդիրներ չկան:

    Այժմ պատկերացրեք, որ դուք ստեղծում եք բարդ պորտալ, որտեղ, որպես կանոն, էջերում կան մի քանի բլոկներ, և յուրաքանչյուրը կարող է պարունակել առանձին հավելված։

    Այստեղ մենք բախվում ենք երկու դժվարության.

    * Ես կցանկանայի, որ հաղորդագրությունների ցանկը հայտնվեր էջի կոնկրետ հատվածում, իսկ դուք արդեն լավ տեղ եք գտել դրա համար։
    Խնդիրն այն է, որ դուք պետք է գործարկեք $inbox->toPage() հրամանը հենց այն պահին, որը կհամապատասխանի էջի հաղորդագրությունների ցանկի դիրքին: Եթե ​​մենք ուզում ենք փոխել այս ցուցակի դիրքը, մենք պետք է մտնենք ծածկագրի մեջ, բայց դրա համար պորտալի շրջանակը անընդհատ փոխելը լավ չէ: Լավագույն լուծումը կլինի հաղորդագրությունների ելքը դարձնել առանձին մոդուլի տեսքով, որը մենք միայն գիտենք, որ այն պետք է միացնել շրջանակին։
    Այսինքն՝ ազատվեք մոդուլների գործարկման խիստ հաջորդականությունից։ Իսկապես, քանի որ Inbox-ի ելքի արդյունքը կախված չէ համակարգի աշխատանքից (այս քայլում մենք արդեն ունենք նիստի բոլոր տվյալները), ապա ինչո՞ւ է ավելորդ բարդությունը:
    * Հաղորդագրությունների ցանկի տեսքը (դիզայնը) պահպանելու համար հարկավոր է հոգ տանել HTML կոդը, որը կոշտ կոդավորված է Message և Inbox դասերի toPage() մեթոդներում։ Սովորաբար, դիզայնը փոխելու համար դուք պետք է փոխեք PHP կոդը:

    Առաջին խնդիրը լուծելու համար կարող եք ստեղծել բուֆեր, որը պահում է Inbox-ի ելքի արդյունքը:

    Միգուցե մենք դեռ կունենանք մի քանի նման (Inbox-ին) իրեր, և մենք պետք է ստեղծենք բուֆերային համակարգ: Որպեսզի չշփոթենք, թե ում արտադրանքն է, հավանաբար կհասնենք բուֆերների անվանմանը։ Մենք ինչ-որ տեղ կպահենք այն հաջորդականությունը, որին համապատասխան պետք է թողարկվեն բուֆերները, ցանկալի է արտաքին ֆայլում՝ փոփոխությունները հեշտացնելու համար:

    Լուծման այս փորձն արդեն մեզ տալիս է XML-ը որպես միջանկյալ տվյալների պահպանման միջոց օգտագործելու գաղափար: Իսկ XSLT ոճերի օգտագործումը կօգնի լուծել երկրորդ խնդիրը։

    Ես չեմ անդրադառնա, թե ինչ է XML-ը և ինչ է XSLT-ը: Եթե ​​դուք ծանոթ չեք այս բաներին, zvon.org-ը լավ տեղ է սկսելու փնտրել:

    Գաղափարն այն է, որ ստեղծվի ոչ թե HTML կոդ, այլ XML կառուցվածք toPage() մեթոդներում: Էջի փաստաթուղթը կստեղծվի որպես տող XML կոդով (այն կծառայի որպես «բուֆեր»), իսկ սցենարի վերջին փուլում մենք կօգտագործենք XSL փոխակերպում։

    Նախ, եկեք պատկերացնենք, թե ինչ պետք է լինի կոդի հիմնական մասի արդյունքը։

    րոպե 57 վայրկյան: 45

    Թե ինչ է դա բավականին հեշտ է կռահել՝ երկու հաղորդագրություն և ձևաթուղթ։ Խնդրում ենք նկատի ունենալ, որ PHP սկրիպտին անհրաժեշտ է միայն պատրաստել նման տող. դա շատ պարզ է: Ավելին, հիմնական թեգերի հերթականությունը կարևոր չէ. կարող եք դրանք դնել սկզբում, օրինակ, ինչպես հարմար կլինի ծրագրավորողի համար: Ինչպես իրականացնել այն: Դուք կարող եք, առանց որևէ բան փոխելու, օգտագործել ելքային բուֆերավորում, HTML կոդի փոխարեն դուրս բերել XML, և վերջում պարզապես ելքը վերցնել տողի մեջ: Բայց այդ ժամանակ մենք կկորցնենք ճկունությունը. օրինակ, երբեմն ցանկանում եք վրիպազերծման մասին տեղեկատվությունը ուղղակիորեն մուտքագրել էջ (օգտագործելով echo): Միևնույն ժամանակ, PHP մշակողները աշխատում են DOM մոդուլի վրա, որն առաջարկում է ծառի փաստաթղթեր ստեղծելու և փոխանցելու ավելի առաջադեմ եղանակ: Եթե ​​մենք ցանկանում ենք իրականացնել DOM-ը, մենք ստիպված կլինենք վերանախագծել ամբողջ հավելվածը՝ փոխելով տողերի ելքը DOM տարրերի ստեղծման: Հետևաբար, ես նախընտրում եմ օբյեկտների XML ներկայացումը պահել հենց օբյեկտների ներսում՝ հաջորդաբար հավաքելով ընդհանուր XML փաստաթուղթ: Դա այնքան էլ դժվար չէ, պարզապես մի փոքր փոփոխության կարիք ունի: Դուք կտեսնեք, որ այս տեխնիկան խստորեն կապված չէ XML տվյալների պահպանման հատուկ եղանակի հետ, և դա թույլ կտա ձեզ փոքր ջանքերով անցնել DOM-ի օգտագործմանը: Նախ, ուշադրություն դարձրեք, որ մեր յուրաքանչյուր օբյեկտ ունի toPage() մեթոդ: Այս նմանությունը մեզ պետք է ստիպի մտածել նոր ընդհանուր ծնողական դասի ներդրման մասին: Թող յուրաքանչյուր դաս, որը կարող է ստեղծել XML փաստաթղթի կտորներ էջի համար, ժառանգի այն դասից, որը կզբաղվի օբյեկտի XML ներկայացմամբ: Եկեք այն անվանենք Outputable:

    class Outputable ( /** * XML կոնտեյներ (տող). */ var $output = ""; /** * Տվեք բեռնարկղի պարունակությունը և մաքրեք բեռնարկղը: * * @վերադարձրեք XML տվյալների հետ տող */ getOutput ֆունկցիան () ( $ out = $this->output; $this->output = ""; վերադարձ $out; ) /** * Ավելացրեք մի մասը բեռնարկղի բովանդակությանը: * * @param տողը ավելացնելու համար * / ֆունկցիա appendOutput($string) ( $this ->output .= $string . "n"; ) /** * "Abstract" մեթոդ. */ function toPage() ( ) )

    toPage() մեթոդը դատարկ է. այս դեպքում այն ​​անհրաժեշտ է որպես ցուցիչ, թե ինչպես արտաքին «matryoshka» դասերը պետք է հաղորդակցվեն ներքին դասի հետ: Այնուամենայնիվ, մենք կարող էինք այստեղ լռելյայն իրականացում առաջարկել, եթե նկատեինք, որ կան բազմաթիվ օբյեկտներ, որոնք նույն ձևով ցուցադրվում են էջում:

    Message և Inbox դասերը փոքր-ինչ կփոխվեն. դրանք այժմ երկուսն էլ պետք է ժառանգեն Outputable-ից, և toPage() մեթոդները նույնպես կփոխվեն:
    Message.php

    class Message extends Outputable ( /** * Հաղորդագրության բովանդակությունը. */ var $content; /** * Հաղորդագրության տեքստը սկզբնավորելու կոնստրուկտոր: * * @param բովանդակության հաղորդագրության բովանդակությունը */ գործառույթը Message($content) ( $this->բովանդակություն = $content; ) /** * Գրեք հաղորդագրություն նիստի համար: */ send() ֆունկցիան ($_SESSION["session_messages"] = $this->content; ) /** * Հաղորդագրեք էջին: * / ֆունկցիա toPage() ( $this->appendOutput("".$this->բովանդակություն.""); ) )

    class Inbox-ը ընդլայնում է Outputable ( /** * Ստացված հաղորդագրությունների զանգված. */ var $messages = array(); /** * Կոնստրուկտորում մենք ստանում ենք բոլոր ստացված հաղորդագրությունները * և հեռացնում դրանք նիստից: */ ֆունկցիա Inbox( ) ( if (is_array ($_SESSION["session_messages"])) ($messages = $_SESSION["session_messages"]; $co = sizeof($messages); համար ($i = 0; $i< $co; $i++) { $this->հաղորդագրություններ = նոր հաղորդագրություն ($messages[$i]); ) ) /* մաքրել հաղորդագրությունների զանգվածը */ $_SESSION["session_messages"] = array(); ) /** * Ցուցադրել Inbox-ի բովանդակությունը էջում: */ ֆունկցիա toPage() ($co = sizeof($this->հաղորդագրություններ); $this->appendOutput(""); համար ($i = 0; $i< $co; $i++) { $this->հաղորդագրություններ[$i]->toPage(); $this->appendOutput($this->հաղորդագրություններ[$i]->getOutput()); ) $this->appendOutput(""); ))

    Ելքի մեթոդը փոխվել է. այժմ, էջին ուղղակիորեն ելք անելու փոխարեն, արտաքին ներկայացումն առայժմ պահվում է Outputable-ում, որը «նստում է» յուրաքանչյուր օբյեկտում: appendOutput() մեթոդը ծառայում է որպես echo() կառուցվածքի փոխարինում։ Օբյեկտի ելքը ստանալու համար օգտագործվում է getOutput() մեթոդը։

    Հիմա տեսնենք, թե որն է կոդի հաճախորդային մասը, որը կլուծի նույն խնդիրը, ինչ նախկինում։
    index.php

    Հիմնական նորամուծությունը $global_content օբյեկտում է, որի անվանումն ինքնին խոսում է։ Այս դեպքում այն ​​պատկանում է Outputable դասին, իրական առաջադրանքների դեպքում դուք հավանաբար առանձին դաս կստեղծեիք էջի բովանդակության համար։

    Եթե ​​ուշադիր նայեք, ապա սցենարի բովանդակությունը գործնականում չի փոխվել՝ նույն մուտքի արկղը, նույն toPage(): Ավելացվեց հրահանգ, որը ցուցադրում է հաղորդագրությունների ցանկի բովանդակությունը էջի բովանդակության մեջ: Տարբերության համար այժմ ստեղծվում է երկու հաղորդագրություն:

    Արդյունքին նայելու համար մնում է միայն պատրաստել XSL կաղապարը։
    ոճ.xsl

    XSLT օրինակ

    հաղորդագրություն

    Ինչի՞ ենք հասել։

    Առաջին հերթին, դուք կարող եք ավելի վստահորեն ձեռնարկել բարդ նախագծեր. ապահովված է մոդուլների իրական անկախությունը: Էջում արդյունքների տեղադրման հերթականությունը այժմ վերահսկվում է արտաքին XSL ձևանմուշի միջոցով և կախված չէ մոդուլների գործարկման հաջորդականությունից:

    Ցանկացած մոդուլ, որն իր աշխատանքի արդյունքում ստեղծում է XML տվյալներ, կարող է օգտագործվել նախագծում։ Ի դեպ, սա կաղապարային շարժիչների նկատմամբ առավելություններից մեկն է, որոնցում տվյալների ստեղծումը բաղկացած է կոնկրետ շարժիչի կանչման մեթոդների (նշանակել և այլն) հաջորդականությունից, որի համար ընդհանուր ստանդարտ չկա։

    Մեկ այլ առավելություն վրիպազերծման հեշտությունն է: Եթե ​​գործարկեք սկրիպտը, կնկատեք, որ յուրաքանչյուր էջ պարունակում է վրիպազերծման ելք՝ XML նախատիպ, որը մեծապես հեշտացնում է վրիպազերծման հավելվածները:

    Մեկ այլ բան, որի մասին դուք պետք է մտածեք, այն է, թե ինչպես ստեղծել հաղորդագրության օբյեկտներ: Միշտ չէ, որ հարմար է նորը ուղղակիորեն հաճախորդի կոդում օգտագործելը: Բայց միգուցե սա առանձին հոդվածի թեմա է։

    Վերջապես, մի ​​քայլարշավ հեռանկարների մասին.

    * թռուցիկ պատուհաններ՝ կարևոր հաղորդագրությունների ցանկի համար
    * «ուղարկողի էջեր» և «նպատակակետ էջեր» հաղորդագրություններում
    * տվյալների բազայում հաղորդագրությունների գրանցում
    * կոճակ «ցույց տալ իմ գործողությունների պատմությունը»
    * Օգտագործողի գործողությունների վիճակագրական վերլուծություն նիստերի ընթացքում
    * «խելացի օգնականներ» վեբ հավելվածներում

    KP-ում և BUS-ում, սկսած 11.5 տարբերակից, սոցիալական ցանց ներառող հրատարակություններում հայտնվել է «Վեբ մեսենջեր» նոր մոդուլը:
    Մինչև բոլորի համար թողարկվելը, մոդուլը կրակի մկրտություն անցավ մեր «Սոցիալական Ինտրանետում»՝ հավաքելով մինչև 8 թարմացում։


    Զարգացման վեց ամսվա ընթացքում մենք շատ բան ենք արել

    Մենք ամբողջովին հրաժարվեցինք նախորդ ինտերֆեյսից և ստեղծեցինք նորը` հիմնվելով հայտնի ակնթարթային մեսենջերների փորձի վրա:
    Էջի ներսում սկսեց բացվել երկխոսության պատուհանը, դրանում հայտնվեցին դեմքեր, հաղորդագրությունները գունավոր կոդավորված էին, և հնարավոր դարձավ հեշտությամբ շարունակել զրույցը մի քանի հոգու հետ միաժամանակ:

    Պատմության պատուհանը առանձին թեմա է, բոլորը վաղուց ցանկանում էին պատմության որոնում ունենալ, հիմա վերջապես ունենք այն, մենք նախատեսում ենք այնտեղ ավելացնել օրացույց՝ արագ նավարկելու համար:

    Մենք ստեղծեցինք ծանուցումների կենտրոն՝ տարբեր տեսակի հաղորդագրություններով, տրամադրեցինք դրանց ստացման պատմությունը դիտելու հնարավորություն, իսկ մշակողների համար՝ պարզ API՝ ծանուցումներ ավելացնելու և հետ կանչելու համար:

    Եվ այս ամենը հասանելի է ձեր կայքի յուրաքանչյուր էջում:

    Ցավոք սրտի, այն ամենը, ինչ նախատեսված էր, չի իրականացվել

    ԱռաջինԱյն, ինչ մենք ժամանակ չունեինք անելու, հաղորդագրությունները մեր սեղանների մեջ թարգմանելն էր:
    Նման անցումը հնարավորություն կտա հրաժարվել «սոցիալական ցանց» մոդուլից, որն ավելի մեծ ազատություն կտա խմբագիրների ընտրության հարցում, ինչպես նաև հնարավոր կլինի ներդնել խմբակային չաթեր։

    Երկրորդ, սա իսկական «ակնթարթային» հաղորդակցության իրականացումն է։ Այժմ մոդուլն օգտագործում է կանոնավոր միավորում, սերվերի հարցում յուրաքանչյուր n վայրկյանը մեկ անգամ, հարցման ժամանակահատվածը տատանվում է՝ կախված կապի ակտիվությունից:
    Մենք նախատեսում ենք գրել առանձին ծառայություն, որը կպահպանի մշտական ​​կապերը և անհրաժեշտության դեպքում կուղարկի տվյալների թարմացումներ (մեսենջերի համար, կենդանի հոսքի համար և այլն):

    Երրորդ, մենք նախատեսում ենք մի փոքր փոխել ինտերֆեյսը, հրաժարվել առանձին կոնտակտների ցանկից և երկխոսության պատուհանից և միավորել դրանք մեկ ամբողջության մեջ, ինչը ապագայում մեզ թույլ կտա մեսենջերը տեղափոխել բջջային հավելված։

    Դեռևս փաստաթղթավորում չկա և մինչև աշուն չի հայտնվի, քանի որ... Մոդուլն ակտիվորեն մշակվում է, և մենք ցանկանում ենք թողնել API-ն փոխելու հնարավորությունը:
    Այնուամենայնիվ, ես կփորձեմ հրապարակել API-ի այն մասի հետ աշխատելու օրինակներ, որոնց վրա աշխատանքն արդեն ավարտված է, և դուք կարող եք ապահով օգտագործել դրանք ձեր մոդուլներում։

    Ծանուցումների հետ աշխատելը (համապատասխան IM-ի համար՝ սկսած 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]Ուշադրություն. դուք պետք է ստուգեք և նշեք սոցիալական ցանցի ճիշտ ուղին "Ակնթարթային հաղորդագրություններ և ծանուցումներ" մոդուլի կարգավորումներում" , // ծանուցման տեքստը պետք է ուղարկվի էլփոստով (կամ 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" => "ՕՐԱՑՈՒՅՑ|ՀՐԱՎԻՐԵԼ|123|" պարամետրը:$ USER->GetId() , // ծանուցման տեքստը կայքում (html և BB կոդերը հասանելի են) «NOTIFY_MESSAGE» => «Ես հրավիրում եմ ձեզ մասնակցելու «Ակնթարթային հաղորդագրություններ և ծանուցումներ» հանդիպմանը, որը տեղի կունենա մարտի 15-ին, 2012, ժամը 14:00», // ծանուցման տեքստ ուղարկելու էլեկտրոնային փոստով (կամ XMPP), եթե տարբերություններ չկան, մի սահմանեք «NOTIFY_MESSAGE_OUT» պարամետրը => «Օգտատեր Եվգենի Շելենկովը հրավիրում է ձեզ մասնակցելու «Ակնթարթային» հանդիպմանը հաղորդագրություններ և ծանուցումներ» #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" => "Refuze", "VALUE" => "N", "TYPE" => "չեղարկել" /*, "URL" " => "http://test.ru/?confirm=N" */),), // նամակ ուղարկելու ձևանմուշի խորհրդանշական ծածկագիրը, եթե նշված չէ, այն ուղարկվում է ծանուցման ձևանմուշով "NOTIFY_EMAIL_TEMPLATE" => " CALENDAR_INVITATION»); CIMNotify::Add($arMessageFields); ?>

    Այս տեսակի ծանուցումների հետ աշխատելու համար բավական չէ պարզապես հաղորդագրություն ուղարկելը, անհրաժեշտ է նաև այն մատուցել:

    Ծառայություն
    Երկու տարբերակ կա, ամենապարզը հղմանը հետևելն է (եթե 4-րդ պարամետրը NOTIFY_BUTTONS-ում եք դրել):
    Հղմանը հետևելուց հետո անհրաժեշտ է զանգահարել ձեր կոդի հետևյալ կոդը.
    Ուշադրություն. մեծ ուշադրություն դարձրեք պիտակների անվան վրա, երբ ջնջում եք, այդ պիտակով բոլոր հաղորդագրությունները կջնջվեն:
    Բազմաթիվ հաղորդագրություններ ուղարկելիս դա պետք է հաշվի առնել, որպեսզի մեկ օգտատիրոջ կողմից որևէ գործողության կատարումը պատահաբար չջնջի ծանուցումը բոլորին (բացառությամբ այն վայրերի, որտեղ անհրաժեշտ է նման տրամաբանություն):

    Երկրորդ տարբերակը միջոցառումների ժամանակ է.
    1. անհրաժեշտ է գրանցել կախվածությունը

    Մի մոռացեք ձեր գործառույթների մասին Հաստատեք հարցումըԵվ Մերժել հարցումըառաջացնել ծանուցման ջնջում CIM Notify::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(հաղորդագրություն,id) ($("#message_" + id + ".message-content") .html(հաղորդագրություն); $("#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); ընդմիջում, դեպք «խմբագրել»՝ $("#message_" + id + ".message-content").html(տվյալներ);$("#frmAdd").show(); ընդմիջում; case "delete": $("#message_"+id).fadeOut(); ընդմիջում; ) $("#txtmessage").val(""); $("#loaderIcon").hide(); ), error:function ()() )); )

    PHP սկրիպտ CRUD գործառնությունների համար

    Հետևյալ կոդը հարցումներ է կատարում տվյալների բազայի նկատմամբ: Այս PHP սկրիպտը CRUD գործողություն կատարելուց հետո թարմացնում է գրառումները AJAX-ի պատասխանի արդյունքում։

    require_once ("dbcontroller.php"); $db_handle = նոր DBController(); $action = $_POST["գործողություն"]; if(!empty($action)) ( switch($action) ( case "add": $result = mysql_query("INSERT INTO comment(ssage) VALUES("".$_POST["txtmessage"].")" ) ; if($result)($insert_id = mysql_insert_id(); echo "Edit Delete" . $_POST["txtmessage"] . " ";) ընդմիջում; case "edit": $result = mysql_query("UPDATE comments set message = "".$_POST["txtmessage"]."" WHERE id=".$_POST["message_id"]); if($result) echo $_POST["txtmessage"]; ընդմիջում; մեծատառ "ջնջել"՝ եթե ( !empty($_POST["message_id"])) (mysql_query("DELETE FROM comment WHERE id=".$_POST["message_id"]); ) ընդմիջում; ) )

    Այս դասընթացի այս պահին դրվել է մեր հավելվածի հիմքը, սահմանվել է հատուկ կեռիկ և կցվել է մշտական ​​հաղորդագրություն՝ ցույց տալու, թե ինչպես է աշխատում կեռիկը:

    Որ մենք Ոչարել են, նրանք չեն իրականացրել հաղորդագրությունների տեսակները և դրանց ցուցադրումն ըստ օգտագործողի մուտքագրած տվյալների։

    Բայց նախքան սկսելը, մենք պետք է ավելացնենք աջակցություն տարբեր հաղորդագրությունների տեսակների համար, դասի միջերես, որը կաջակցի հաղորդագրության յուրաքանչյուր տեսակին և տվյալների կառուցվածքը, որն անհրաժեշտ է այդպիսի հաղորդագրությունները պահելու համար:

    Պատրա՞ստ եք սկսել:

    Ես անհամբեր սպասում եմ շարունակել ձեռնարկը, բայց կան մի քանի բաներ, որոնք մենք պետք է հաշվի առնենք նախքան սկզբնաղբյուրի մեջ սուզվելը: Համոզվեք, որ ձեր համակարգում տեղադրված եք հետևյալ ծրագրաշարը.

    • PHP 5.6.25 և MySQL 5.6.28
    • Apache կամ Nginx
    • WordPress 4.6.1
    • Ձեր նախընտրած IDE-ն կամ խմբագրիչը

    Եվ եթե դուք փնտրում եք համընդհանուր լուծում, մի մոռացեք փորձել MAMP-ը:

    Մենք առաջ ենք անցել

    Ինչպես նշվեց ավելի վաղ, մենք այս դասընթացի հենց կեսին ենք: Եթե ​​բաց եք թողել առաջին դասերից որևէ մեկը, ահա թե ինչ ենք մենք մինչ այժմ անդրադարձել.

  • Առաջին ձեռնարկում մենք կենտրոնացել ենք մեր փլագինը ստեղծելու նվազագույն հիմունքների վրա և այն, ինչ դուք պետք է ունենաք սկսելու համար:
  • Երկրորդ մասում մենք առաջ շարժվեցինք plugin-ի հետ՝ մի փոքր ավելացնելով WordPress-ի հիմնական կառավարման էջը։ Մենք նաև նշանակեցինք հատուկ կեռիկ, որը մենք օգտագործում ենք և գործարկեցինք այն սերվերի կողմից: Մենք նաև սահմանել ենք մեր Կարգավորումների մեսենջերի հիմնական պարամետրերը:
  • Եվ սա այն է, ինչ մենք կքննարկենք վերապատրաստման վերջին փուլում.

  • Մենք կկապենք այդ ամենը միասին, կտեսնենք այն գործողության մեջ և ներբեռնման համար հասանելի կդարձնենք plugin-ը:
  • Ներկայումս մենք այլ խնդիրներ ունենք, և մենք կենտրոնանալու ենք դրանց վրա։

    Եկեք վերադառնանք աշխատանքին

    Քանի որ մենք անցել ենք աշխատանքի (և ինչպես նշված է նախորդ դասերում), մենք հավատարիմ ենք այս մասի առաջադրանքների հետագա իրականացմանը.

    Այս ձեռնարկում մենք կշարունակենք զարգացնել մեր Settings Messenger-ը՝ ավելացնելով աջակցություն հաջողության և ձախողման հաղորդագրությունների համար, ինչպես նաև անդրադառնալով անվտանգության խնդիրներին:

    Նախորդ հոդվածում մենք սկսել ենք Settings Messenger-ում, բայց միայն այն կետին, որով ստեղծվում է մի գործառույթ, որը շարունակաբար կցուցադրի հաջողության ծանուցում, մինչ օգտատիրոջ էջը բեռնվում է:

    Այս ձեռնարկում մենք կավելացնենք աջակցություն սխալի, նախազգուշացման և հաջողության հաղորդագրությունների համար: Այնուհետև մենք դրանք կցուցադրենք էկրանին՝ պատկերացում կազմելու համար, թե ինչպես է աշխատելու մեսենջերը:

    Բացի այդ, մենք պատրաստվում ենք կատարել ևս մեկ փոփոխություն, որը կավելացնի աջակցություն օգտատիրոջ հայեցողությամբ ծանուցումները մերժելու համար:

    Սա այս դասի համար անհրաժեշտ աշխատանքի ամբողջ պլանն է։ Եկ սկսենք.

    Կարգավորումներ Messenger-ի ընդլայնում

    Հիշեք, որ Settings Messenger-ի ամբողջ իմաստը կայանում է նրանում, որ սահմանի մեր աշխատելու ձևը հատուկ հաղորդագրությունների, մաքսային կեռիկների և բնիկ WordPress API-ի հետ՝ հաղորդագրությունները WordPress-ի ադմինիստրատորի վահանակի համատեքստում ցուցադրելու համար:

    Դա անելու համար մենք պատրաստվում ենք ընդլայնել վերջին դասի կատարած աշխատանքը և սկսել այստեղից:

    Հաջողված հաղորդագրություններ

    Քանի որ նախորդ դասին սկսեցինք հաջողված հաղորդագրություններով, շարունակենք դրանցով: Այժմ մենք ունենք կոշտ կոդավորված մեթոդ, որը ցուցադրում է մեկ հնարք.