Prísne pridať správu php. PHP AJAX CRUD: vytvárať, mazať, upravovať záznamy v databáze MySQL. AJAX formulár na odosielanie požiadaviek na vytvorenie, odstránenie, úpravu

  • 20.06.2020
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 to stať počas spracovania formulárov, môžu to byť chybové hlásenia, správy, ktoré hovoria, že sa musíte zaregistrovať, keď sa používateľ pokúsi o prístup k zakázanej časti stránky a v mnohých ďalších prípadoch.

Veľmi často je vytváranie a výstup správ oddelené rôznymi požiadavkami HTTP. 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 vykonávanie úkonov, ktoré ho sprevádzajú. prečo? Predstavte si, že text správy by mal vyzerať asi takto: "Počet objednaných jednotiek položky 'Mouse Pad' bol úspešne zmenený zo 7 na 12." Po presmerovaní možno na stránku, ktorá je z hľadiska funkčnosti úplne iná, to bude hlava navyše – určiť, čo sa robilo predtým.

Najčastejšie sa správy zobrazujú v žiadosti POST, ktorá spracováva formulár - to nie je dobré, nápisy "táto stránka je neaktuálna" kazia život (keď chce používateľ 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í.

Máme teda problém – správa by mala „žiť“ v rôznych požiadavkách. Potrebujeme mechanizmus na odovzdanie textu správy stránke, 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 sa používa presmerovanie (poznámka Maxima Naumenka). 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 premýšľať - zdôrazniť oblasť, v ktorej by sa správy objavili.

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

Prvá vec, ktorá vám príde na myseľ, je vytvoriť triedu Message, ktorá by v skutočnosti predstavovala správu na 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 do relácie */ funkcia send() ( $_SESSION["session_messages"] = $this->content; ) /** * Pošlite správu na stránku */ funkcia 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 do činenia s "polom polí" - to, čo ukladáme do elementu 'session_message', je pole, toto je zoznam prenášaných správ (môže ich byť samozrejme viacero).

Ak ste vlákno nenašli, je čas oprášiť časti manuálu o reláciách a poliach.

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 (informačné, chybové, varovné), definovať príjemcov správy.

Všimnite si, že momentálne sa do relácie nevkladá samotný objekt, ale iba text správy. OOP nám umožňuje v budúcnosti zmeniť správanie metódy send() bez zmeny kódu klienta, ktorý túto metódu volá (napríklad v budúcnosti možno do relácie zapísať celý objekt Message, ak má veľa polí).

Predstavme si, že by sme to robili pomocou funkcií. Pravdepodobne by sme mali funkciu message_send($txt), mali by sme aj 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 prezentáciou správy ako asociatívneho poľa: $msg['txt'], $msg['kind'], potom bude vo volaniach funkcií len jeden parameter. Cítite, ako sa to mení na triedu?

No, OOP vám dáva ten luxus, že si veci nemusíte dopredu premýšľať.

Ďalšia trieda – Inbox – je práve na tento účel.

class Inbox ( /** * Pole prichádzajúcich správ. */ var $messages = array(); /** * V konštruktore získajte všetky prichádzajúce správy * a odstráňte ich z relácie. */ funkcia Inbox() ( ak (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(); )))

Poďme otestovať náš systém zasielania správ.

Vytvorme si veľmi jednoduchý príklad, ktorý ako odpoveď na odoslanie formulára oznámi počet sekúnd v aktuálnej minúte.

odoslať (); /* presmerovanie na seba */ header("location:"); ) else ( $inbox = new Inbox(); $inbox->toPage(); ) ?>

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

Vytvorte adresár na 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 určitej č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 sa musieť dostať do kódu, ale nie je dobré na to neustále meniť framework portálu. Najlepším riešením by bolo urobiť výstup správ vo forme samostatného modulu, ktorý je známy len tým, že je pripojený k frameworku.
Teda zbaviť sa striktnej 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 údaje 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ý sme zaviedli do metód toPage () tried Message a Inbox. Spravidla 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á bude uchovávať výsledok výstupu doručenej pošty.

Možno ešte budeme mať niekoľko podobných vecí (ako Inbox) a budeme musieť vytvoriť systém vyrovnávacích pamätí. Aby sme si neplietli, kde je čí výstup, zrejme sa dostaneme k pomenovaniu bufferov. Niekde budeme mať uloženú postupnosť, v súlade s ktorou by mal prebiehať výstup buffrov – najlepšie v externom súbore, aby bolo jednoduchšie vykonávať zmeny.

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

Nebudem sa venovať tomu, čo je XML a čo XSLT. Ak nie ste oboznámení s týmito vecami, zvon.org je dobrým východiskovým bodom pre učenie.

Cieľom je vytvoriť nie HTML kód, ale štruktúru XML 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.

Na začiatok si predstavte, čo by malo byť výsledkom práce hlavnej časti kódu.

minúta 57 druhý: 45

Čo to je - to sa dá celkom ľahko uhádnuť - dve správy a formulár. Všimnite si, že PHP skript potrebuje iba pripraviť tento reťazec – je to veľmi jednoduché. Okrem toho nie je dôležité poradie hlavných značiek - možno umiestniť napríklad na začiatok, pretože to bude výhodné pre programátora. Ako to implementovať. Je možné, takmer bez toho, aby sa čokoľvek menilo, použiť ukladanie do vyrovnávacej pamäte na výstupe, namiesto HTML kódu vydávať XML a na konci jednoducho zachytiť výstup do reťazca. Potom však stratíme flexibilitu – napríklad niekedy chcete zobraziť informácie o ladení priamo na stránke (pomocou echa). 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 vložiť DOM, budeme musieť prerobiť celú aplikáciu, pričom zmeníme výstup reťazcov na vytvorenie prvkov DOM. Preto uprednostňujem ukladanie XML reprezentácie objektov v rámci samotných objektov, čím vytváram celkový XML dokument postupne. Nie je to také ťažké, je potrebná len malá úprava. 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 malým krviprelievaní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. Nech každá trieda, ktorá je schopná vytvárať časti XML dokumentu pre stránku, zdedí 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 string s údajmi XML */ funkcia getOutput( ) ( $ out = $this->output; $this->output = ""; return $out; ) /** * Pripojte časť k obsahu kontajnera. * * @param reťazec reťazca na pripojenie */ 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 majú vonkajšie triedy „matriošky“ komunikovať s vnútornou triedou. Tu by sa však dala navrhnúť predvolená implementácia, 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 trochu zmenia - teraz by obe mali dediť z Outputable a zmenia sa aj metódy toPage ()
message.php

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

class Inbox extends Outputable ( /** * Pole prichádzajúcich správ. */ var $messages = array(); /** * V konštruktore získajte všetky prichádzajúce správy * a odstráňte 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); $this->appendOutput(" "); pre ($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 sa externá reprezentácia zatiaľ ukladá do Outputable, ktorá „sedí“ v každom z objektov. Metóda appendOutput() slúži ako druh náhrady 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ú úlohu ako predtým.
index.php

odoslať (); /* aktuálna sekunda */ $msg_sec = new Message("second: " . date("s")); $msg_sec->send(); /* presmerovanie na seba */ header("location:"); VÝCHOD; ) else ( /* pripraviť zoznam správ ako XML */ $inbox = new Inbox(); $inbox->toPage(); $global_content->appendOutput($inbox->getOutput()); ) $global_content->appendOutput (" "); $xml_string = $global_content->getOutput(); $xh = xslt_create(); $xarg = array(); /* Hlavička dokumentu XML */ $xarg["xml"] = ""."n"; /* telo dokumentu XML */ $xarg["xml"] .= " " . $xml_string .""; /* šablóna XSL */ $xarg["xsl"] = implode("", súbor("style.xsl")); /* výstup HTML kódu - výsledok transformácie XSL */ echo xslt_process($xh , " arg:xml", "arg:xsl", NULL, $xarg); /* výstup zdroja XML (ladenie) */ echo "


" .htmlspecialchars($xml_string) ."
"; ?>

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álnom živote by ste zrejme vytvorili samostatnú triedu pre obsah stránky.

Ak sa pozriete pozorne, obsah skriptu sa príliš nezmenil – rovnaká schránka, rovnaká toPage(). Pridaná inštrukcia, ktorá vypíše obsah zoznamu správ do obsahu stránky. Pre zmenu sa teraz generujú dve správy.

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

Príklad XSLT

správu

čo sme dosiahli?

V prvom rade sa môžete odvážnejšie pustiť do zložitých projektov – je zabezpečená skutočná nezávislosť modulov. Poradie skladania výsledkov na stránke je teraz riadené externou šablónou XSL a nezávisí od poradia, v ktorom sa moduly spúšťajú.

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 spočíva v postupnosti volania metód (assign a pod.) konkrétneho enginu, ktoré nemajú spoločný štandard.

Ďalšou výhodou je jednoduchosť ladenia. Ak spustíte skript, všimnete si, že každá stránka má výstup na ladenie, prototyp XML, ktorý značne uľahčuje ladenie aplikácií.

Ďalšia vec, na ktorú treba myslieť, je, ako vytvoriť objekty správ. Nie je vždy 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

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. Oznámenia považujte za dôležité upozornenia, ktoré by si používateľ rád prečítal a aby si ich mohol sledovať.
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 na to, ale od tretice nemáme predstavu o komponente akejkoľvek 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 návod bude fungovať v ktoromkoľvek 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 ste už vytvorený typ komunity príklad plugin, 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 oznámenia
2. Prejdite do svojej databázy a prázdny tieto dve tabuľky, takže nemajú vôbec ž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, oznámenie pridať api má 7 parametrov

  1. $ cmd- je typ oznámenia. V tomto súbore môžete vidieť všetky typy upozornení. ROOT/components/com_community/libraries/notificationtypes.php počnúc alebo okolo riadku 53. Odporúčame použiť systémové_správy typ upozornenia.
  2. $herec- je osoba, ktorá vykonáva činnosť
  3. $cieľ- je osoba alebo skupina ľudí, ktorá dostane upozornenie
  4. $predmet- je predmet oznámenia v kontextovom okne oznámenia aj v názve e-mailu
  5. $body- je telo e-mailovej notifikačnej správy
  6. $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
  7. $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" ; // prvý param, typ aktivity$herec = $user -> id ; //druhý parameter - získa id $actor$ciel = "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í$telo = ; //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ť mu ú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 na prefix_community_notifications tabuľky a dodržujte nový rekord

Prejdite na 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=". $herec -> 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.

Pre tento príklad nastavíme premennú $link pristáť na 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" ) , "" , $params ) ;

Jazykový súbor by mal vyzerať takto

PLG_COMMUNITY_EXAMPLE_SUBJECT = "(herec) aktualizoval profil" PLG_COMMUNITY_EXAMPLE_BODY = "Ahoj správca \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, keď umiestnite kurzor myši na avatar, si všimnite (url) param nakopla a pridala odkaz na google cez avatar. Je to zámer, pretože sme to tak urobili :)


]

V tom istom okne, keď umiestnite kurzor myši na odkaz herca. Toto je časť, kde (herec) ozvena používateľa, ktorý vykonáva akciu, zatiaľ čo (actor_url)" dbajte na 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.

  1. (herec)- Vráti používateľské meno používateľa, ktorý vykonáva akciu
  2. (actor_url)- Dáva pripisovať (hercovi)
  3. (url)- Nie je to povinné, ale mali by ste to mať vždy 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á_adresa URL) ak to potrebujete vo svojom upozornení.
  • (názov)- Bežne sa používa na označenie objektu, ktorý vygeneroval oznámenie. Príklad: „Používateľ X uverejnil novú fotografiu v Album 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.

V mojej aplikácii Zend píšem nejaké API pre mobilné aplikácie. Aby som to mobilným vývojárom uľahčil, používam Swagger. Všetko zatiaľ funguje dobre, až na jednu požiadavku GET.

Kedy zavolám /user/messages/(sessionToken)? NumMessages = (numMessages) & pageNr = (pageNr) v prehliadači dostanem požadované výsledky, ale keď sa pokúsim nechať Swagger vykonať túto požiadavku, odovzdá sa iba sessionToken. Skúsil som tieto anotácie pre Swagger:

/** * @SWG\Api(path="/user/messages/(sessionToken)?numMessages=(numMessages)&pageNr=(pageNr)", * @SWG\Operation(* method="GET", * Summary=" Dostane správy stránkované", * notes="", * type="string", * prezývka="getUsermessagesPaged", * autorizácie=(), * @SWG\Parameter(* name="sessionToken", * description="Token z aktívnej relácie používateľa", * požadované=true, * type="reťazec", * paramType="cesta", * allowMultiple=true *), * @SWG\Parameter(* name="numMessages", * description=" počet správ na stránke (numMessages & pageNr sú ignorované, ak nie sú nastavené obe)", * required=true, * type="string", * paramType="query", * allowMultiple=true *), * @SWG\Parameter (* name="číslo stránky", * description="číslo stránky (numMessages & pageNr sú ignorované, ak nie sú nastavené obe)", * požadované=true, * type="string", * paramType="query", * allowMultiple=true *), * @SWG\ResponseMessage(code=200, message="json (správy => "user_messages")"), * @SWG\ResponseMessage(code=400, message="json with err alebo "neprihlásený"") *) *) */

Vidí niekto moju chybu?

Akákoľvek pomoc je vítaná.

S pozdravom

Aktualizovať. Ako bolo navrhnuté, zmenil som oba paramTypes na „query“ a zmenil som cestu:

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

ale nepracoval ako bojovník.

xdebug v Eclipse PDT ukazuje:

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

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

json swagger:

( "apiVersion": "1.0.0", "swaggerVersion": "1.2", "apis": [ ( "cesta": "\/user", "description": "Operácie o používateľoch" ) ], "informácie" : ( "title": "Api pre mobilný prístup", "description": "Toto je xxx rozhranie API pre mobilný prístup.", "termsOfServiceUrl": null, "contact": "xxx", "license": null, "licenseUrl" : null, "_partialId": null, "_partials": , "_context": ( "komentár": "\/**\ * @SWG\\Info(\ * title="(!LANG:Mobile access api",\ * description="This is the xxx mobile access api.",\ * contact="xxx",\ *)\ *\/", "line": 3 } } } !}

Tu je výstup /user:

( "basePath": "http://localhost/ias/public", "swaggerVersion": "1.2", "apiVersion": "1.0.0", "resourcePath": "/user", "apis": [ ( "cesta": "/používateľ/zostatok/(sessionToken)", "operácie": [ ( "metóda": "GET", "summary": "Získava používateľskú rovnováhu", "prezývka": "getUserdata", "type": "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "Token z aktívnej relácie používateľa" ) ], "responseMessages": [ ( "code": 200, "message": "json (zostatok => "user_balance")" ), ( "code": 400, "správa ": "json s chybou "neprihlásený"" ) ], "poznámky": "", "oprávnenia": () ) ] ), ( "cesta": "/používateľ/prihlásenie", "operácie": [ ( "method": "POST", "summary": "Prihlási používateľa do systému", "prezývka": "loginUser", "type": "string", "parameters": [ ( "paramType": "form", "name": "e-mail", "type": "string", "povinné": true, "allowMultiple": false, "description": "E-mail používateľa for login" ), ( "paramType": "form", "name": "password", "type": "string", "required": true, "allowMultiple": false, "description": "Heslo pre prihláste sa ako čistý text" ) ], "responseMessages": [ ( "code": 200, "message": "json s session_id, user_id, user_balance" ), ( "code": 400, "message": "json s chybou "žiadny používateľ s daným e-mailom a heslom"" ), ( "kód": 400, "správa": "json s chybou "neplatný vstup"" ), ( "kód": 400, "správa": "json s chybou " žiadna žiadosť o príspevok"" ) ], "poznámky": "", "oprávnenia": () ) ] ), ( "cesta": "/používateľ/odhlásenie", "operácie": [ ( "metóda": "POST" , "summary": "Odhlási používateľa", "nickname": "logoutUser", "type": "string", "parameters": [ ( "paramType": "form", "name": "sessionToken", " type": "string", "required": true, "allowMultiple": false, "description": "Token z aktívnej relácie používateľa" ) ], "responseMessages": [ ( "code": 200, "správa" : "json (výsledok => "vymazané")" ), ( "kód": 400 , "message": "json s chybou "no user_session s daným sid"" ), ( "code": 400, "message": "json s chybou "neplatný vstup"" ), ( "code": 400, "správa ": "json s chybou "no post request"" ) ], "notes": "", "authorizations": () ) ] ), ( "path": "/user/messages/(sessionToken)", "operations ": [ ( "metóda": "GET", "summary": "Získava nové správy", "prezývka": "getUsermessages", "type": "string", "parameters": [ ( "paramType": "cesta ", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "Token z aktívnej relácie používateľa" ) ], "responseMessages": [ ( "code": 200, "message": "json (messages => "user_messages")" ), ( "code": 400, "message": "json s chybou "neprihlásený"" ) ], " notes": "", "authorizations": () ), ( "method": "GET", "summary": "Správy budú stránkované", "prezývka": "getUsermessagesPaged", "type": "string", " parametre": [ ( "paramType": "cesta", "name": "sessionToken", "ty pe": "string", "required": true, "description": "Token z aktívnej relácie používateľa" ), ( "paramType": "query", "name": "numMessages", "type": " string", "required": true, "description": "počet správ na stránke (numMessages & pageNr sú ignorované, ak nie sú nastavené obe)" ), ( "paramType": "query", "name": "pageNr" , "type": "string", "required": true, "description": "pagenumber (numMessages & pageNr sú ignorované, ak nie sú nastavené obe)" ) ], "responseMessages": [ ( "code": 200, " message": "json (messages => "user_messages")" ), ( "code": 400, "message": "json s chybou "neprihlásený"" ) ], "notes": "", "autorizácie" : () ) ] ), ( "cesta": "/user/userdata", "operácie": [ ( "metóda": "POST", "summary": "príspevky používateľské údaje", "prezývka": "postUserdata", "type": "string", "parameters": [ ( "paramType": "form", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "Token z aktívnej relácie používateľa " ), ( "paramType": "form", "name": "heslo", "type": "string", "required": false, "allowMultiple": false, "description": "nové heslo" ), ( "paramType": "form", "name": "address", "type": "string", "required": false, "allowMultiple": false, "description": "new address" ), ( "paramType" ": "form", "name": "housenr", "type": "string", "required": false, "allowMultiple": false, "description": "new housenr" ), ( "paramType": " form", "name": "zip", "type": "string", "required": false, "allowMultiple": false, "description": "new zip" ), ( "paramType": "form", "name": "mesto", "type": "string", "required": false, "allowMultiple": false, "description": "new city" ), ( "paramType": "form", "name" : "email", "type": "string", "required": false, "allowMultiple": false, "description": "new email" ) ], "responseMessages": [ ( "code": 200, "message ": "json (user => "userdata")" ), ( "code": 400, "message": "json s chybou

Zdá sa, že ide o chybu, že moje používateľské rozhranie swagger neposiela žiadne parametre požiadavky? Tu je príklad s jedným parametrom dotazu, sessionToken: (riadené FireBug 2.0.6)

GET /ias/public/user/balance HTTP/1.1 Hostiteľ: localhost User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Accept: application/json Accept-Language: de, en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Content-Type: application/json Referer: http://localhost/ias/swagger/ Cookie: __utma=111872281.581414660.13661394717538.61670947175257. uvts=sB5Dda3cZBNdaTk; searchpanel-close=set Pripojenie: keep-alive

Odpoveď znela:

HTTP/1.1 400 Bad Request Date: Ut, 25 Nov 2014 14:58:20 GMT Server: Apache/2.4.9 (Win32) PHP/5.5.12 X-Powered-By: PHP/5.5.12 Content-Length: 25 Pripojenie: close Content-Type: application/json; charset=utf-8

Odpoveď bola správna, pretože nebol odovzdaný žiadny sessionToken.

Toto si vyžaduje prácu, ale nepochádza z swagger-ui:

GET /ias/public/user/balance?sessionToken=HTTP/1.1 Hostiteľ: localhost User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Prijať: text/html,application/ xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: __utma=111872281.581414660 .1366700677.1394721873.1394723866.255; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set Pripojenie: keep-alive

Nakoniec som si uvedomil: nie je nikto lepší ako manželka. Zostáva len nájsť manželku

PHP AJAX CRUD: vytvárať, mazať, upravovať záznamy 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 do serverového skriptu. Obsluha aktualizuje zoznam záznamov.

AJAX formulár na odosielanie požiadaviek na vytvorenie, odstránenie, úpravu

Po pridaní záznamu formulár odošle údaje do PHP skriptu prostredníctvom požiadavky AJAX. V prípade úspešného pridania sa zoznam záznamov znova načíta.

Funkcie jQuery AJAX na dopytovanie databázy CRUD

Vo funkcii jQuery AJAX máme prepínač na pridanie, úpravu a odstránenie prípadov. Tieto prípady generujú rôzne reťazce dotazov a údaje odpovedí v závislosti od akcií databázy.

PHP skript pre operácie CRUD

Nasledujúci kód vykonáva databázové dotazy. 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 "

" . $_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 "]); ) prestávka; ) )