Chýba pridanie správy php. Zobrazovanie správ používateľovi vo webových aplikáciách. AJAX formulár na odosielanie žiadostí o vytvorenie, vymazanie, úpravu

  • 03.11.2019

V mojej aplikácii Zend píšem trochu API pre mobilné aplikácie. Aby som to mobilným vývojárom uľahčil, používam Swagger. Zatiaľ všetko 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 s chybou "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 - =>

swagger JSON:

( "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="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", "required": true, "allowMultiple": false, "description": "E-mail používateľa na prihlásenie" ), ( "paramType": "form", "name": "password", "type": "string", "required": true, "allowMultiple": false, "description": "Heslo na prihlásenie 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": "" , "autorizácie": () ) ] ), ( "cesta": "/používateľ/odhlásenie", "operácie": [ ( "metóda": "POST", "summary": "Odhlásenie používateľa", "prezývka" : "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, "message": "json (result => "deleted")" ), ( "code": 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 "žiadna žiadosť o príspevok"" )], "poznámky": "", "autorizácie": () ) ]), ( "cesta": "/používateľ/správy/( sessionToken)", "operations": [ ( "method": "GET", "summary": "Získava nové správy", "nickname": "getUsermessages", "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 (messages => "user_messages")" ), ( "code": 400, "message": "json s chybou "neprihlásený "" ) ], "poznámky": "", "autorizácie": () ), ( "metóda": "GET", "summary": "Získava stránkovanie správ", "prezývka": "getUsermessagesPaged", "typ" : "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "description": "Token z active user session" ), ( "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 , "správa": "json s chybou "neprihlásený"" ) ], "poznámky": "", "oprávnenia": () ) ]), ( "cesta": "/user/userdata", "operácie" : [ ( "method": "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": "password", "type": "string", "required": false, "allowMultiple": false, "description": "new password" ), ( "paramType": "form", " name": "address", "type": "string", "required": false, "allowMultiple": false, "description": "nová adresa" ), ( "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": "city", "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" ")" ), ( "kód": 400, "správa": "json s chybou

Vyzerá to ako chyba, že moje swagger-ui 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.137618947257252 ; 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.

To 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

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 špecifikované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 ) ;

    $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 ktorú pristane

    www.google.com"

    takže môžete vidieť, ako to funguje
    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 v prípade 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 do relácie */ funkcia send() ( $_SESSION["session_messages"] = $this->content; ) /** * Výstup správy na stránku */ funkcia na stránku. () ( 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();< $co; $i++) { $this->) /** * 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

    správy[$i]->ToPage();

    )))

    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 ú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ý 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ť napríklad na začiatok, 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; ->output .= $string . "n" ) /** * Metóda "Abstract" */ funkcia 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 = $obsah; ) /** * Napíšte správu do relácie */ funkcia send() ( $_SESSION["session_messages"] = $this->content; ) /** * Výstup správy na stránku ( $ 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]);< $co; $i++) { $this->) ) /* 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
    správy[$i]->toPage();

    $this->appendOutput($this->správy[$i]->getOutput());

    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?

    Predovšetkým môžete s väčšou istotou prevziať komplexné projekty - 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:

    * pop-up 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

    Nakoniec som si uvedomil: Nikoho lepšieho ako moju manželku som nenašiel. Ostáva už len nájsť si ženu

    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 do 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(); callCrudAction(akcia,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 ; prípad "upraviť": $("#správa_" + id + " .obsah-správy").html(údaje $("#frmAdd").show();

    prestávka;

    case "delete": $("#message_"+id).fadeOut();

    prestávka;