Zobrazovanie správ používateľovi vo webových aplikáciách. PHP AJAX CRUD: vytváranie, mazanie, úprava záznamov v databáze MySQL PHP skript pre operácie CRUD

Prehľad

Zabudovaný systém upozornení, vôbec prvý v Joomle, umožňuje vašej aplikácii informovať používateľa (alebo skupinu používateľov) o rôznych udalostiach. Upozornenia vnímajte ako dôležité upozornenia, ktoré by si používateľ rád prečítal a sledoval.
Oznámenia môžu byť generované všade. Vo vašom komponente alebo zásuvných moduloch a neskôr zobrazené v systéme upozornení JomSocial.
Tento tutoriál vám ukáže ako, ale keďže nemáme predstavu o žiadnom komponente tretej strany, ktorý by sme mohli použiť:) príklady budú vykonané na komunitnom plugine, ktorý sa spustí pri udalosti onAfterProfileUpdate
Ak neviete, ako vytvoriť doplnok, ktorý sa spustí pri tejto udalosti, odporúčame vám prečítať si túto príručku

Napriek tomu ho implementujete do svojho komponentu

Ako je uvedené v prehľade tohto tutoriálu, upozornenia budeme generovať pomocou komunitného pluginu.
S najväčšou pravdepodobnosťou budete chcieť vytvoriť upozornenia vo svojom komponente alebo v doplnku. Nasledujúci tutoriál bude fungovať v každom z týchto prípadov. Musíte len určiť, v ktorom bode vášho kódu sa vytvorí upozornenie a stačí načítať súbor JomSocial Core Libraries.

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

Dodržiavanie návodu vysvetleného nižšie bude fungovať dobre aj pre vaše rozšírenie

Príprava vývojového prostredia

1. Budeme predpokladať, že už máte vytvorený vzorový doplnok komunitného typu, ktorý sa spustí, keď používateľ zmení svoj profil
Ak nie, môžete si stiahnuť prázdny vzorový plugin z , nainštalovať ho do Joomla a povoliť plugin. Je to pomenované Komunita – príklad upozornení
2. Prejdite do svojej databázy a vyprázdnite tieto dve tabuľky, aby nemali žiadne záznamy

A) prefix_community_notification
b) prefix_community_mailq

3. Majte na svojich testovacích lokalitách aspoň dvoch (2) používateľov a poznajte ich ID

V skorších verziách Joomly, ID používateľov vždy začínali od určeného čísla (62, 42). V Joomle 3 bude toto číslo náhodné, teda obraz nášho testovacieho prostredia, pretože na vašom konci bude určite iný.

Prvé oznámenie

Otvorte súbor php pluginu, ktorý sa bude nachádzať v ROOT/plugins/community/example
V rámci funkcie onAfterProfileUpdate() nahraďte

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

Ako je znázornené na príklade, notifikácia pridať api má 7 parametrov

  • $cmd - je typ upozornenia. V tomto súbore môžete vidieť všetky typy upozornení. ROOT/components/com_community/libraries/notificationtypes.php od riadku 53 alebo okolo neho. Odporúčame použiť typ upozornenia system_messaging.
  • $actor - je osoba, ktorá vykonáva akciu
  • $target - je osoba alebo skupina ľudí, ktorá dostane upozornenie
  • $predmet – je predmet upozornenia v kontextovom okne upozornenia aj v názve e-mailu
  • $body - je telo e-mailovej notifikačnej správy
  • $template – ak potrebujete použiť konkrétnu šablónu, môžete ju definovať tu. V opačnom prípade môže byť tento parameter prázdny
  • $params - vlastné definované parametre
  • Keď toto všetko vieme, definujme premenné, ktoré budeme používať
    Zmeňte kód doplnku na:

    $user = CFactory::getUser(); $cmd = "system_messaging" ; // prvy param, typ aktivity $actor = $user -> id ; //druhý parameter - získajte id $actor $target = "965" ; // tretí param. Kto dostane oznámenie? V našom dev prostredí je to jeho admin používateľ s ID 965. Vo vašom prostredí budete s najväčšou pravdepodobnosťou chcieť získať ID z vášho objektu alebo z poľa používateľov. $predmet = "Predmet oznámenia" ; // Predmet e-mailových aj kontextových upozornení $body = ; //Text správy v e-mailoch. $template = "" ; // Ak potrebujete použiť konkrétny súbor šablóny jomsocial, môžete ho definovať tu. $params = new CParameter("" ) ; // Chceme vytvoriť ďalší objekt params a priradiť k nemu údaje bez toho, aby sme museli formálne definovať triedu CNotificationLibrary:: add ( $cmd , $actor , $target , $subject , $body , $template , $params ) ;

    Teraz sa prihláste s ľubovoľným používateľom a zmeňte informácie o profile. Poďme do databázy a uvidíme, čo sa stalo.
    Prejdite do tabuľky prefix_community_notifications a sledujte nový záznam

    Prejdite na tabuľku prefix_community_mailq a pozrite si nový záznam

    Gratulujem! - Úspešne ste vytvorili svoje prvé vlastné oznámenie, ktoré bolo odoslané prostredníctvom e-mailu a interného systému upozornení JomSocial


    Potenciálny kód nafúknutý

    Vyššie uvedený príklad je v poriadku a funguje, ale vo všeobecnosti sa neodporúča používať ho takto. Namiesto toho by sa to dalo napísať takto

    $actor = CFactory::getUser(); $params = new CParameter("" ) ; CNotificationLibrary:: add ( "system_messaging" , $actor -> "Toto je správa tela upozornenia" , "" , $params ) ;

    Je to oveľa čistejšie a jednoduchšie na sledovanie, pričom v podstate robíte to isté ako kód uvedený vyššie.

    Vlastné parametre upozornení

    Notifikačné API môže byť rozšírené o akýkoľvek parameter, ktorý chcete pridať.
    Tieto parametre je možné preniesť buď do e-mailovej šablóny, oznámenia a samozrejme do jazykového súboru.

    $actor = CFactory::getUser(); $link = "http://www.google.com" ; $params = new CParameter("" ) ; $params -> set ("herec" , $actor -> getDisplayName () ) ; // možno použiť ako (actor) tag $params -> set ("actor_url" , "index.php?option=com_community&view=profile&userid=" . $actor -> id ) ; // Odkaz na značku (herca) $params -> set ("url" , $link ) ; //url celej aktivity. Používa sa pri umiestnení kurzora myši na avatar v okne upozornení. Dá sa použiť aj ako (url) tag v odchádzajúcich e-mailoch. Uistite sa, že ste definovali premennú $link:) CNotificationLibrary:: add ( "system_messaging" , $actor -> id , "965" , "Notification Subject" , "Toto je správa tela upozornenia" , "" , $params) ;

    • $params = nový CParameter( ); - Chceme vytvoriť nový objekt params a priradiť k nemu údaje bez toho, aby sme museli formálne definovať triedu.
    • $params->set("herec", $actor->getDisplayName()); - Vaše oznámenie by malo mať vždy herca. Tento parameter možno odovzdať šablóne ako značku (herca). V oznamovacom okne definuje používateľa, ktorý vykoná akciu.
    • $params->set("actor_url", "index.php?option=com_community&view=profile&userid=" . $actor->id); - Adresa URL herca je zvyčajne adresa URL herca. Vo vyskakovacom okne s upozornením pridá odkaz na prvok (herec).
    • $params->set("url", $link); - Toto je najdôležitejší parameter, ktorý musíte vždy správne nastaviť. V oznamovacom okne sa tento parameter používa nad obrázkom avatara. V e-mailovom upozornení odráža miesto, kde došlo k aktivite.

    V tomto príklade nastavíme premennú $link na pristátie www.google.com takže môžete vidieť, ako to funguje

    Pridanie jazykového reťazca a použitie parametrov

    Parametre, ktoré sme práve nastavili, sú k dispozícii na použitie aj v našich jazykových súboroch.
    Umožňuje definovať jazykové kľúče zmenou " CNotificationLibrary::add() API

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

    Jazykový súbor by mal vyzerať takto

    PLG_COMMUNITY_EXAMPLE_SUBJECT = "(herec) aktualizoval profil" PLG_COMMUNITY_EXAMPLE_BODY = "Dobrý deň administrátor \n Toto je e-mail, ktorý vás informuje, že (herec) aktualizoval profil \n\n Ak chcete prejsť na Google, kliknite sem \n a href=" _QQ_" (url)"_QQ_">(url)"

    V tomto príklade sme použili značku (actor) a (url) na odovzdanie údajov do šablóny upozornení aj e-mailu. Pozrime sa, ako to vyzerá.
    V oznamovacom okne pri umiestnení kurzora myši nad avatar si všimnite, že sa spustil parameter (url) a pridal odkaz na google cez avatar. Je to zámerné, pretože sme to tak urobili :)


    ]

    V tom istom okne, keď umiestnite kurzor myši na odkaz herca. Toto je časť, v ktorej (herec) zopakoval používateľovi, ktorý vykonáva akciu, pričom (actor_url)“ sa postaral o to, aby bol objekt správne prepojený


    Pozrime sa, čo sa stane vo fronte e-mailov


    A nakoniec skutočný e-mail, ktorý sa odosiela koncovému používateľovi


    Úspech
    Doteraz sme vytvorili tri (3) parametre, ktoré sa úspešne používajú v okne upozornení a e-mailoch.

  • (herec) – Vráti používateľské meno používateľa, ktorý vykonáva akciu
  • (actor_url) – poskytuje pripisovať (hercovi)
  • (url) – nie je povinná, ale vždy by ste ju mali mať vo svojom upozornení. Je to hlavná adresa URL, na ktorej sa stala akcia, na ktorú sme upozornení.
  • Podobne môžete definovať „

    • (cieľ) - ak to potrebujete
    • (cieľová_url), ak ju potrebujete vo svojom upozornení.
    • (title) – Bežne sa používa na označenie objektu, ktorý vygeneroval oznámenie. Príklad: „Používateľ X uverejnil novú fotku v albume Y.“ Album Y je názov tu
    • (title_url) – Rovnako ako u predchádzajúcich, adresa URL objektu, ktorý vygeneroval upozornenie.
    • (správa) - Tento parameter možno použiť na nastavenie (a odozvu) správy v tele e-mailu JomSocial.
    3,3 tis

    Zobrazovanie správ používateľovi je pomerne bežná akcia, ktorú by mala webová aplikácia vykonávať. Môže sa vyskytnúť pri spracovávaní formulárov, môžu to byť chybové hlásenia, správy, ktoré vám oznamujú, že sa máte zaregistrovať, keď sa používateľ pokúsi o prístup k zakázanej časti lokality a v mnohých ďalších prípadoch.

    Vytváranie a výstup správ sú veľmi často rozdelené do rôznych HTTP požiadaviek. Spravidla je vhodné použiť presmerovanie po spracovaní formulárov (aby sa predišlo problémom s tlačidlami Späť a Obnoviť), ale zároveň je prirodzeným momentom pre vytvorenie správy práve moment spracovania formulárov a vykonania sprievodných akcií. to. prečo? Predstavte si, že text správy by mal vyzerať asi takto: „Počet objednaných jednotiek pre položku ‚Podložka pod myš‘ sa úspešne zmenil zo 7 na 12.“ Po presmerovaní, možno na úplne inú stránku, pokiaľ ide o funkčnosť, bude ťažké zistiť, čo sa urobilo predtým.

    Najčastejšie sa správy zobrazujú v žiadosti POST, ktorá spracováva formulár - to nie je dobré, slová „táto stránka je neaktuálna“ ničia život (keď sa používateľ rozhodne vyskúšať tlačidlo Späť).

    Niekto používa presmerovanie a vzdáva sa priateľských správ.

    Zároveň existuje jednoduchý a zrejmý spôsob, ako zlepšiť život. Napriek očividnosti som z nejakého dôvodu nikdy nevidel nikoho, kto by to používal - aspoň keď som sa pozrel na zdroje iných ľudí.

    Takže máme problém - správa musí „žiť“ v rôznych požiadavkách. Potrebujeme mechanizmus na prenos textu správy na stránku, ktorá by ho mala zobraziť. Pravdepodobne ste si už spomenuli na relácie.

    Áno, vo všeobecnosti máte pravdu. Iné metódy, napríklad prostredníctvom globálnej premennej, neumožňujú ukladanie údajov v prípade, že je použité presmerovanie (pozn. Maxim Naumenko). Navyše sa zvyčajne uistím, že každá obrazovka v aplikácii má možnosť spolu s ďalšími informáciami zobrazovať správy, ktoré boli vygenerované na predchádzajúcich obrazovkách. Je to pohodlné, pretože nie je potrebné pripravovať samostatné obrazovky na zobrazovanie správ a používateľ nemusí znova klikať myšou. Ale v skutočnosti tu musí dizajnér myslieť - zdôrazniť oblasť, v ktorej by sa objavili správy.

    Myšlienka je veľmi jednoduchá a dá sa implementovať pomocou niekoľkých tried.

    Prvá vec, ktorá vás napadne, je vytvoriť triedu Message, ktorá by v skutočnosti predstavovala správu v našom jednoduchom diagrame tried. Správa sa musí dať v relácii sama uložiť, ako aj zobraziť na obrazovke.

    class Správa ( /** * Obsah správy. */ var $content; /** * Konštruktor na inicializáciu textu správy. * * @param content content message */ function Message($content) ( $this->content = $ content ; ) /** * Napíšte správu relácii. */ function send() ( $_SESSION["session_messages"] = $this->content; ) /** * Výstup správy na stránku. */ function toPage() ( echo " - " . $this->content ."
    "; } }

    Premenná $_SESSION sa používa na prístup k relácii.

    Všimnite si, že $_SESSION je pole, používame iba jeden prvok tohto poľa s indexom „session_message“.

    V tomto prípade máme čo do činenia s „polom polí“ – to, čo ukladáme do elementu „session_message“ je pole, toto je zoznam prenášaných správ (samozrejme, môže ich byť viacero).

    Ak ste vlákno nenašli, je čas oprášiť časti manuálu venované reláciám a poliam.

    Možno máte otázku. Prečo sú tu potrebné triedy? Dalo by sa vystačiť s dvomi funkciami. Ale pozrime sa ďalej. Možno budeme musieť vytvoriť správy s rôznymi typmi (informácie, chyby, upozornenia) a určiť príjemcov správy.

    Upozorňujeme, že v súčasnosti nie je do relácie vložený samotný objekt, ale iba text správy. OOP nám umožňuje neskôr zmeniť správanie metódy send() bez zmeny kódu klienta, ktorý k tejto metóde pristupuje (napríklad v budúcnosti môžeme do relácie zapísať celý objekt Message, ak má veľa polí).

    Predstavme si, že by sme to urobili pomocou funkcií. Pravdepodobne by sme mali funkciu message_send($txt) a tiež funkciu message_to_page($txt). Teraz musíme pridať možnosť rôzneho správania pre rôzne typy správ. Zmena volania funkcie: message_send($txt, $druh), message_to_page($txt, $druh). Pri hľadaní takýchto funkcií budete musieť prečesať celý kód aplikácie a vykonať opravy.

    Tomu sa dá predísť predvídaním situácie vopred tak, že správu predstavíte ako asociatívne pole: $msg[‘txt’], $msg[‘kind’], potom bude vo volaniach funkcií len jeden parameter. Cítite, ako sa toto snaží stať sa triedou?

    OOP vám teda dáva možnosť dopriať si ten luxus, že nemusíte všetko premýšľať dopredu.

    Ďalšia trieda – Inbox – je určená práve na to.

    class Inbox ( /** * Pole prijatých správ. */ var $messages = array(); /** * V konštruktore dostaneme všetky prijaté správy * a vymažeme ich z relácie. */ funkcia Inbox() ( if (is_array($ _SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->správy = nová správa($messages[$i]); ) ) /* vymaže pole správ */ $_SESSION["session_messages"] = array(); ) /** * Zobrazenie obsahu priečinka Doručená pošta na stránke. */ function toPage() ( $co = sizeof($this->messages); if ($co > 0) ( echo "Správa zo systému:
    "; ) pre ($i = 0; $i< $co; $i++) { $this->správy[$i]->ToPage(); )))

    Vyskúšajme náš systém správ.

    Vytvorme si veľmi jednoduchý príklad, ktorý bude reagovať na odoslanie formulára nahlásením počtu sekúnd v aktuálnej minúte.

    Všetku prácu s poľami a reláciami sme skryli do tried a konečný kód vyzerá jednoducho a krásne.

    Vytvorte adresár na svojom webovom serveri, potom v ňom vytvorte tieto tri súbory a vyskúšajte skript. Upozorňujeme, že s tlačidlami Späť a Obnoviť nie sú žiadne problémy.

    Teraz si predstavte, že vytvárate komplexný portál, kde je na stránkach spravidla niekoľko blokov a každý môže obsahovať samostatnú aplikáciu.

    Tu narážame na dve ťažkosti:

    * Chcel by som, aby sa zoznam správ zobrazoval v konkrétnej časti stránky a už ste na to našli vhodné miesto.
    Problém je v tom, že príkaz $inbox->toPage() musíte spustiť presne v momente, ktorý by zodpovedal pozícii zoznamu správ na stránke. Ak chceme zmeniť pozíciu tohto zoznamu, budeme musieť ísť do kódu, ale nie je dobré na to neustále meniť rám portálu. Najlepším riešením by bolo urobiť výstup správ vo forme samostatného modulu, o ktorom vieme len to, že ho treba pripojiť k frameworku.
    To znamená, že sa oslobodíte od prísnej postupnosti spúšťania modulov. Skutočne, keďže výsledok výstupu doručenej pošty nezávisí od prevádzky systému (v tomto kroku už máme všetky dáta v relácii), tak prečo tá extra zložitosť?
    * Aby ste zachovali vzhľad (dizajn) zoznamu správ, musíte sa postarať o HTML kód, ktorý je pevne zakódovaný v metódach toPage() tried Message a Inbox. Zvyčajne budete musieť zmeniť kód PHP, aby ste zmenili dizajn.

    Ak sa chcete pokúsiť vyriešiť prvý problém, môžete vytvoriť vyrovnávaciu pamäť, ktorá ukladá výsledok výstupu doručenej pošty.

    Možno budeme mať stále niekoľko podobných vecí (ako Inbox) a musíme vytvoriť systém vyrovnávacej pamäte. Aby sme si neplietli, koho výstup je koho, prídeme asi na pomenovanie bufferov. Niekde uložíme poradie, v súlade s ktorým sa majú buffery vypisovať – najlepšie do externého súboru, aby sme uľahčili zmeny.

    Tento pokus o riešenie nám už dáva myšlienku použiť XML ako prostriedok na ukladanie prechodných údajov. A použitie štýlov XSLT pomôže vyriešiť druhý problém.

    Nebudem sa venovať tomu, čo je XML a čo je XSLT. Ak nie ste oboznámení s týmito vecami, zvon.org je dobré miesto, kde začať hľadať.

    Cieľom je generovať nie HTML kód, ale XML štruktúru v metódach toPage(). Stránkový dokument bude vytvorený ako reťazec s XML kódom (bude slúžiť ako „buffer“) a v poslednej fáze skriptu použijeme XSL transformáciu.

    Najprv si predstavme, čo by malo byť výsledkom hlavnej časti kódu.

    minúta 57 sekunda: 45

    Čo to je, sa dá celkom ľahko uhádnuť – dve správy a formulár. Upozorňujeme, že PHP skript potrebuje iba pripraviť takýto reťazec – je to veľmi jednoduché. Okrem toho nie je dôležité poradie hlavných značiek - môžete ich umiestniť na prvé miesto, napríklad, ako to bude vhodné pre programátora. Ako to implementovať. Bez toho, aby ste čokoľvek menili, môžete použiť ukladanie do vyrovnávacej pamäte, výstup XML namiesto HTML kódu a na konci jednoducho zachytiť výstup do reťazca. Potom však stratíme flexibilitu – napríklad niekedy chcete vypísať ladiace informácie priamo na stránku (pomocou ozveny). Vývojári PHP zároveň pracujú na module DOM, ktorý ponúka pokročilejší spôsob vytvárania a odovzdávania stromových dokumentov. Ak chceme implementovať DOM, budeme musieť prerobiť celú aplikáciu so zmenou výstupu reťazcov na vytváranie prvkov DOM. Preto uprednostňujem ukladanie XML reprezentácie objektov v rámci samotných objektov, pričom postupne zostavujem spoločný XML dokument. Nie je to také ťažké, chce to len malú úpravu. Uvidíte, že táto technika nie je striktne viazaná na konkrétny spôsob ukladania údajov XML, čo vám umožní prejsť na používanie DOM s minimálnym úsilím. V prvom rade si všimnite, že každý z našich objektov má metódu toPage(). Táto podobnosť by nás mala prinútiť zamyslieť sa nad zavedením novej spoločnej rodičovskej triedy. Nechajte každú triedu, ktorá môže vytvárať časti dokumentu XML pre stránku, dediť od triedy, ktorá sa postará o XML reprezentáciu objektu. Nazvime to Outputable.

    class Outputable ( /** * XML kontajner (reťazec). */ var $output = ""; /** * Zadajte obsah kontajnera a vymažte kontajner. * * @return reťazec s údajmi XML */ funkcia getOutput () ( $ out = $this->output; $this->output = ""; return $out; ) /** * Pridajte časť k obsahu kontajnera. * * @param reťazec reťazca na pridanie * / function appendOutput($string) ( $this ->output .= $string . "n"; ) /** * metóda "Abstract". */ function toPage() ( ) )

    Metóda toPage() je prázdna - v tomto prípade je potrebná ako indikátor toho, ako by mali externé triedy „matriošky“ komunikovať s vnútornou triedou. Tu by sme však mohli ponúknuť predvolenú implementáciu, ak by sme si všimli, že existuje veľa objektov, ktoré sa na stránke zobrazujú rovnakým spôsobom.

    Triedy Message a Inbox sa mierne zmenia – teraz by mali obe dediť z Outputable a zmenia sa aj metódy toPage()
    Správa.php

    class Message extends Outputable ( /** * Obsah správy. */ var $content; /** * Konštruktor na inicializáciu textu správy. * * @param content content message */ function Message($content) ( $this->content = $content; ) /** * Napíšte správu do relácie. */ funkcia send() ( $_SESSION["session_messages"] = $this->content; ) /** * Výstup správy na stránku. * / function toPage() ( $this->appendOutput("".$this->content.""); ) )

    class Inbox extends Outputable ( /** * Pole prijatých správ. */ var $messages = array(); /** * V konštruktore prijímame všetky prijaté správy * a odstraňujeme ich z relácie. */ funkcia Inbox( ) ( if (is_array ($_SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->správy = nová správa($messages[$i]); ) ) /* vymaže pole správ */ $_SESSION["session_messages"] = array(); ) /** * Zobrazenie obsahu priečinka Doručená pošta na stránke. */ funkcia toPage() ( $co = sizeof($this->messages); $this->appendOutput(""); for ($i = 0; $i< $co; $i++) { $this->správy[$i]->toPage(); $this->appendOutput($this->správy[$i]->getOutput()); ) $this->appendOutput(""); ))

    Metóda výstupu sa zmenila - teraz namiesto priameho výstupu na stránku je vonkajšia reprezentácia zatiaľ uložená v Outputable, ktorá „sedí“ v každom z objektov. Metóda appendOutput() slúži ako náhrada za konštrukciu echo(). Na získanie výstupu objektu sa používa metóda getOutput().

    Teraz sa pozrime, aká je klientska časť kódu, ktorá vyrieši rovnaký problém ako predtým.
    index.php

    Hlavná inovácia je v objekte $global_content, ktorého názov hovorí sám za seba. V tomto prípade patrí do triedy Outputable, v reálnych úlohách by ste pravdepodobne vytvorili samostatnú triedu pre obsah stránky.

    Ak sa pozriete pozorne, obsah skriptu sa prakticky nezmenil - rovnaká schránka, rovnaká toPage(). Pridaná inštrukcia, ktorá zobrazuje obsah zoznamu správ v obsahu stránky. Pre spestrenie sú teraz vygenerované dve správy.

    Aby ste sa mohli pozrieť na výsledok, ostáva už len pripraviť XSL šablónu.
    style.xsl

    Príklad XSLT

    správu

    čo sme dosiahli?

    V prvom rade sa môžete s väčšou istotou chopiť zložitých projektov - je zabezpečená skutočná nezávislosť modulov. Poradie, v ktorom sú výsledky umiestnené na stránke, sa teraz riadi pomocou externej šablóny XSL a nezávisí od poradia, v ktorom sú moduly spustené.

    Akýkoľvek modul, ktorý generuje XML dáta ako výsledok svojej práce, môže byť použitý v projekte. To je mimochodom jedna z výhod oproti šablónovým enginom, v ktorých tvorba dát pozostáva zo sekvencie volania metód (priradenie a pod.) konkrétneho enginu, pre ktoré neexistuje spoločný štandard.

    Ďalšou výhodou je ľahké ladenie. Ak spustíte skript, všimnete si, že každá stránka obsahuje výstup ladenia – prototyp XML, ktorý výrazne zjednodušuje ladenie aplikácií.

    Ešte niečo, na čo musíte myslieť, je, ako vytvoriť objekty správ. Nie vždy je vhodné použiť nové priamo v klientskom kóde. Ale možno je to téma na samostatný článok.

    Nakoniec cval o vyhliadkach:

    * vyskakovacie okná so zoznamom dôležitých správ
    * „stránky odosielateľa“ a „cieľové stránky“ v správach
    * protokolovanie správ do databázy
    * tlačidlo "zobraziť históriu mojich akcií"
    * štatistická analýza akcií používateľov v rámci relácií
    * „inteligentní asistenti“ vo webových aplikáciách

    V KP a BUS sa od verzie 11.5 vo vydaniach, ktoré obsahujú sociálnu sieť, objavil nový modul „Webový posol“.
    Predtým, ako bol modul uvoľnený pre všetkých, prešiel krstom ohňom na našom „Sociálnom intranete“, pričom nazbieral až 8 aktualizácií


    Za šesť mesiacov vývoja sme urobili veľa

    Úplne sme opustili predchádzajúce rozhranie a vytvorili sme nové na základe skúseností populárnych instant messengerov.
    Na stránke sa začalo otvárať dialógové okno, objavovali sa v ňom tváre, správy boli farebne odlíšené a bolo možné ľahko viesť konverzáciu s viacerými ľuďmi súčasne.

    Okno histórie je samostatná téma, každý už dlho chcel mať vyhľadávanie v histórii, teraz ho konečne máme, plánujeme tam pridať kalendár na rýchlu navigáciu.

    Vytvorili sme notifikačné centrum s rôznymi typmi správ, poskytli sme možnosť zobrazenia histórie ich prijatia a pre vývojárov jednoduché API na pridávanie a odvolávanie upozornení.

    A to všetko je k dispozícii na každej stránke vášho webu!

    Žiaľ, nie všetko, čo bolo naplánované, sa aj zrealizovalo

    najprvČo sme nestihli, bolo preložiť správy do našich tabuliek.
    Takýto prechod by umožnil opustiť modul „sociálna sieť“, čo by poskytlo väčšiu voľnosť pri výbere redaktorov, a tiež by bolo možné zaviesť skupinové chaty.

    Po druhé, ide o implementáciu skutočnej „instantnej“ komunikácie. Teraz modul používa pravidelné združovanie, dopytovanie servera raz za n-sekúnd, perióda dopytovania sa mení v závislosti od aktivity komunikácie.
    Plánujeme napísať samostatnú službu, ktorá bude udržiavať neustále pripojenie a podľa potreby odosielať aktualizácie údajov (pre messenger, pre živý kanál atď.).

    Po tretie, plánujeme mierne zmeniť rozhranie, upustiť od samostatného zoznamu kontaktov a dialógového okna a spojiť ich do jedného celku, čo nám v budúcnosti umožní presunúť messenger do mobilnej aplikácie.

    Zatiaľ neexistuje žiadna dokumentácia a objaví sa až na jeseň, pretože... Modul sa aktívne vyvíja a chceme ponechať možnosť meniť API.
    Pokúsim sa však zverejniť príklady práce s tou časťou API, na ktorej už boli práce ukončené a môžete ich pokojne používať vo svojich moduloch.

    Práca s upozorneniami (relevantné pre okamžité správy od verzie 11.5.2)

    Zaviedli sme tri typy upozornení:
    - personalizované oznámenie;
    - oznámenie zo systému;
    - oznámenie vyžadujúce potvrdenie;

    Pred použitím API musíte skontrolovať, či je modul nainštalovaný v systéme:

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

    Personalizované upozornenie


    Ak sú správy nastavené na NOTIFY_TAG, používateľ ich zoskupí.

    Oznámenie zo systému


    $arMessageFields = array(// príjemca "TO_USER_ID" => $USER->GetId(), // odosielateľ (môže byť >0) "FROM_USER_ID" => 0, // typ upozornenia "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, // modul, ktorý si vyžiadal zaslanie notifikácie "NOTIFY_MODULE" => "im", // symbolická značka pre zoskupenie (zobrazí sa len jedna správa), ak to nie je povinné, nenastavujte parameter "NOTIFY_TAG" => "IM_CONFIG_NOTICE", // text upozornenia na stránke (k dispozícii sú html a BB kódy) "NOTIFY_MESSAGE" => "[b]Pozor: musíte skontrolovať a zadať správnu cestu k sociálnej sieti v nastaveniach modulu "Okamžité správy a upozornenia"" , // text upozornenia na odoslanie emailom (alebo XMPP ), ak nie sú rozdiely, nenastavujte parameter //"NOTIFY_MESSAGE_OUT" => ""); CIMNotify::Add($arMessageFields); ?>

    Oznámenie vyžadujúce potvrdenie (potvrdiť)


    $arMessageFields = array(// príjemca "TO_USER_ID" => $USER->GetId(), // odosielateľ "FROM_USER_ID" => 2, // typ upozornenia "NOTIFY_TYPE" => IM_NOTIFY_CONFIRM, // modul, ktorý požadoval odoslanie upozornenia "NOTIFY_MODULE " => "kalendár", // symbolická značka na zoskupenie (zobrazí sa iba jedna správa), ak to nie je potrebné, nenastavujte parameter "NOTIFY_TAG" => "CALENDAR|INVITE|123|".$ USER->GetId() , // text upozornenia na stránke (kódy html a BB sú k dispozícii) "NOTIFY_MESSAGE" => "Pozývam vás zúčastniť sa stretnutia „Instant Messaging and Notifications“, ktoré sa uskutoční 15. marca, 2012 o 14:00", // text upozornenia na zaslanie e-mailom (alebo XMPP), ak nie sú rozdiely, nenastavujte parameter „NOTIFY_MESSAGE_OUT“ => „Používateľ Evgeny Shelenkov vás pozýva zúčastniť sa stretnutia „Instant správy a upozornenia” #BR# ktorý sa uskutoční dňa 15.03.2012 o 14:00.#BR # #BR# Prijať: http://test.ru/calend.php?CONFIRM=Y&CID=123 #BR# Odmietnuť: http://test.ru/calend.php?CONFIRM=N&CID=123", // pole popisujúce tlačidlá upozornení "NOTIFY_BUTTONS" => Pole(// 1. názov tlačidla, 2. hodnota, 3. šablóna tlačidla , 4. prechod na adresu po stlačení (voliteľný parameter) Array("TITLE" => "Accept", " VALUE" => "Y", "TYPE" => "accept" /*, "URL" => " http://test.ru/?confirm=Y" */), Array("TITLE" => " Odmietnuť", "VALUE" => "N", "TYPE" => "zrušiť" /*, "URL" " => "http://test.ru/?confirm=N" */),), // symbolický kód šablóny na odoslanie listu, ak nie je uvedený, odošle sa so šablónou upozornenia "NOTIFY_EMAIL_TEMPLATE" => " CALENDAR_INVITATION"); CIMNotify::Add($arMessageFields); ?>

    Ak chcete pracovať s týmto typom upozornení, nestačí správu jednoducho odoslať, musíte ju aj doručiť.

    servis
    Sú dve možnosti, najjednoduchšia je nasledovať odkaz (ak nastavíte 4. parameter v NOTIFY_BUTTONS).
    Po kliknutí na odkaz musíte vo svojom kóde zavolať nasledujúci kód:
    Pozor: venujte zvýšenú pozornosť názvom značiek; keď zavoláte vymazanie, všetky správy s touto značkou sa vymažú.
    Pri odosielaní viacerých správ treba s tým počítať, aby vykonaním akcie jedným používateľom nedošlo k náhodnému vymazaniu notifikácie všetkým (okrem miest, kde je takáto logika potrebná).

    Druhá možnosť je na akciách.
    1. musíte zaregistrovať závislosť

    Nezabudnite vo svojich funkciách ConfirmRequest A RejectRequest spôsobí vymazanie oznámenia CIMNotify::DeleteByTag()

    To je zatiaľ všetko, čakám na vaše návrhy v komentároch, úspešné implementácie!
    Ak chcete vyskúšať API pred vydaním 11.5.2 v poli s parametrami, musíte dodatočne zadať "MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, tiež možnosť s odkazom v tlačidlách nebude fungovať pre potvrdzovacie upozornenia. Ale je lepšie počkať; aktualizácia 11.5.2 má vyjsť 23. mája.

    Radšej zlý pruh ako delírium tremens...

    PHP AJAX CRUD: vytváranie, mazanie, úprava záznamov v databáze MySQL

    V tomto článku sa dozvieme, ako pridávať, upravovať a odstraňovať záznamy v databáze MySQL pomocou PHP. Použili sme obslužný program JQuery, ktorý odosiela požiadavku AJAX skriptu na strane servera. Obsluha aktualizuje zoznam záznamov.

    AJAX formulár na odosielanie žiadostí o vytvorenie, vymazanie, úpravu

    Pri pridávaní záznamu formulár odošle dáta do PHP skriptu cez požiadavku AJAX. Ak je pridanie úspešné, zoznam záznamov sa znova načíta.

    Funkcie JQuery AJAX pre databázový dotaz CRUD

    Vo funkcii JQuery AJAX máme prepínacie prípady pridávať úpravy a mazať. Tieto prípady generujú rôzne reťazce údajov dotazov a odpovedí v závislosti od akcií databázy.

    function showEditBox(id) ( $("#frmAdd").hide(); var currentMessage = $("#message_" + id + " .message-content").html(); var editMarkUp = ""+currentMessage+" SaveCancel"; $("#message_" + id + " .message-content").html(editMarkUp); ) funkcia cancelEdit(message,id) ( $("#message_" + id + " .message-content") .html(správa); $("#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, typ: "POST", success:function(data)( switch(akcia) (case "add": $("#comment-list-box").append(data); break; case "edit": $("#message_" + id + " .message-content").html(data); $("#frmAdd").show(); prestávka; case "delete": $("#message_"+id).fadeOut(); prestávka; ) $("#txtmessage").val(""); $("#loaderIcon").hide(); ), chyba:funkcia ()() )); )

    PHP skript pre operácie CRUD

    Nasledujúci kód vykonáva dotazy na databázu. Tento PHP skript po vykonaní akcie CRUD aktualizuje záznamy ako výsledok odpovede AJAX.

    require_once("dbcontroller.php"); $db_handle = new DBController(); $akcia = $_POST["akcia"]; if(!empty($action)) ( switch($action) ( case "add": $result = mysql_query("INSERT INTO comment(správa) VALUES("".$_POST["txtmessage"].")" ) ; if($result)($insert_id = mysql_insert_id(); echo " Edit Delete " . $_POST["txtmessage"] . " "; ) break; case "edit": $result = mysql_query("UPDATE comment set message = "".$_POST["txtmessage"]."" WHERE id=".$_POST["message_id"]); if($result) echo $_POST["txtmessage"]; break; case "delete": if ( !empty($_POST["message_id"])) ( mysql_query("DELETE FROM comment WHERE id=".$_POST["message_id"]); ) break; ) )

    V tomto bode tohto kurzu bol položený základ nášho doplnku, bol definovaný vlastný háčik a bola pripojená trvalá správa, ktorá ukazuje, ako háčik funguje.

    Že my nie neimplementovali typy správ a ich zobrazovanie podľa údajov zadaných používateľom.

    Než však začneme, musíme pridať podporu pre rôzne typy správ, rozhranie triedy, ktoré bude podporovať každý typ správy, a dátovú štruktúru potrebnú na ukladanie takýchto správ.

    Ste pripravení začať?

    Teším sa na pokračovanie tutoriálu, ale je tu niekoľko vecí, ktoré musíme zvážiť predtým, ako sa vrhneme do zdrojového kódu. Uistite sa, že máte v systéme nainštalovaný nasledujúci softvér:

    • PHP 5.6.25 a MySQL 5.6.28
    • Apache alebo Nginx
    • WordPress 4.6.1
    • Váš preferovaný IDE alebo editor

    A ak hľadáte riešenie typu všetko v jednom, nezabudnite vyskúšať MAMP.

    Postúpili sme do

    Ako už bolo spomenuté, sme presne v polovici tohto kurzu. Ak ste zmeškali niektorú z prvých lekcií, tu je to, čo sme doteraz prebrali:

  • V prvom tutoriále sme sa zamerali na minimálne základy tvorby nášho pluginu a na to, čo potrebujete mať, aby ste mohli začať.
  • V druhej časti sme sa s pluginom posunuli ďalej, pridali sme niečo málo k základnej administračnej stránke vo WordPresse. Tiež sme priradili vlastný háčik, ktorý používame, a spustili sme ho na strane servera. Nastavili sme základné parametre aj pre náš Settings Messenger.
  • A toto zvážime v záverečnej fáze školenia:

  • Všetko to spojíme, uvidíme v akcii a plugin sprístupníme verejnosti na stiahnutie.
  • V súčasnosti máme iné úlohy, na ktoré sa zameriame.

    Vráťme sa k práci

    Keďže sme začali pracovať (a ako bolo uvedené v predchádzajúcich lekciách), zaviazali sme sa k ďalšej implementácii úloh v tejto časti:

    V tomto návode budeme pokračovať vo vývoji nášho Messengera nastavení pridaním podpory pre správy o úspechu a neúspechu, ako aj dotknutím sa bezpečnostných problémov.

    V predchádzajúcom článku sme začali v aplikácii Nastavenia Messenger, ale iba do tej miery, že sme nastavili funkciu, ktorá bude počas načítavania stránky používateľa neustále zobrazovať upozornenie na úspech.

    V tomto návode pridáme podporu pre chybové, varovné a úspešné správy. Potom ich zobrazíme na obrazovke, aby sme získali predstavu o tom, ako bude messenger fungovať.

    Okrem toho sa chystáme vykonať ďalšiu zmenu, ktorá pridá podporu pre zrušenie upozornení podľa uváženia používateľa.

    Toto je celý plán potrebnej práce pre túto lekciu. Začnime.

    Nastavenia Rozšírenie Messenger

    Pamätajte, že cieľom aplikácie Settings Messenger je definovať náš spôsob práce s vlastnými správami, vlastnými háčikmi a natívnym rozhraním WordPress API na zobrazovanie správ v kontexte panela správcu WordPress.

    Aby sme to dosiahli, rozvinieme prácu vykonanú v poslednej lekcii a začneme odtiaľto.

    Úspešné správy

    Keďže sme v predchádzajúcej lekcii začali úspešnými správami, pokračujme v nich. Teraz máme pevne zakódovanú metódu, ktorá zobrazuje jediný trik: