Zobrazování zpráv uživateli ve webových aplikacích. PHP AJAX CRUD: vytváření, mazání, úprava záznamů v databázi MySQL PHP skript pro operace CRUD

Přehled

Vestavěný oznamovací systém, vůbec první v Joomle, umožňuje vaší aplikaci informovat uživatele (nebo skupinu uživatelů) o různých různých událostech. Oznámení považujte za důležitá upozornění, která by si uživatel rád přečetl a měl o nich zájem.
Oznámení lze generovat všude. Ve vaší komponentě nebo zásuvných modulech a později zobrazené v systému upozornění JomSocial.
Tento tutoriál vám ukáže jak, ale protože nemáme představu o žádné komponentě třetí strany, kterou bychom mohli použít:) příklady budou provedeny na komunitním pluginu, který se spustí při události onAfterProfileUpdate
Pokud nevíte, jak vytvořit plugin, který se při této události spustí, doporučujeme vám zkontrolovat tento návod

Přesto jej implementujte do vaší komponenty

Jak je uvedeno v přehledu tohoto tutoriálu, budeme generovat upozornění pomocí komunitního pluginu.
Pravděpodobně budete chtít vytvořit oznámení uvnitř komponenty nebo pluginu. Následující návod bude fungovat v kterémkoli z těchto případů. Musíte pouze určit, ve kterém bodě vašeho kódu bude oznámení vytvořeno a stačí načíst soubor JomSocial Core Libraries.

vyžadovat_jednou JPATH_ROOT . "/components/com_community/libraries/core.php" ;

Následující návod vysvětlený níže bude fungovat dobře i pro vaše rozšíření

Příprava vývojového prostředí

1. Budeme předpokládat, že jste již vytvořili ukázkový plugin typu komunity, který se spustí, když uživatel změní svůj profil
Pokud ne, můžete si stáhnout prázdný ukázkový plugin z , nainstalovat jej do Joomly a povolit plugin. Jmenuje se Komunita – příklad oznámení
2. Přejděte do své databáze a vyprázdněte tyto dvě tabulky, aby neměly vůbec žádné záznamy

A) prefix_community_notification
b) prefix_community_mailq

3. Mít alespoň dva (2) uživatele na svých testovacích místech a znát jejich ID

V dřívějších verzích Joomly začínala uživatelská ID vždy od zadaného čísla (62, 42). V Joomle 3 bude toto číslo náhodné, tedy obrázek našeho testovacího prostředí, protože na vašem konci bude určitě jiné.

První oznámení

Otevřete soubor php pluginu, který bude umístěn v ROOT/plugins/community/example
V rámci funkce onAfterProfileUpdate() nahraďte

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

Jak je znázorněno na příkladu, oznámení add api má 7 parametrů

  • $cmd - je typ upozornění. V tomto souboru můžete vidět všechny typy oznámení. ROOT/components/com_community/libraries/notificationtypes.php počínaje nebo kolem řádku 53. Doporučujeme použít typ upozornění system_messaging.
  • $actor - je osoba, která provádí akci
  • $target - je osoba nebo skupina lidí, která obdrží oznámení
  • $předmět – je předmět upozornění, a to jak ve vyskakovacím okně upozornění, tak v názvu e-mailu
  • $body - je tělo e-mailové notifikační zprávy
  • $template - pokud potřebujete použít konkrétní šablonu, můžete ji definovat zde. Jinak může být tento parametr prázdný
  • $params - vlastní definované parametry
  • Když tohle všechno víme, pojďme definovat proměnné, které budeme používat
    Změňte kód pluginu na:

    $user = CFactory::getUser(); $cmd = "system_messaging" ; // první parametr, typ aktivity $actor = $user -> id ; //druhý parametr - získání id $actor $target = "965" ; // třetí param. Kdo obdrží oznámení? V našem vývojářském prostředí jeho uživatel admin s ID 965. Ve vašem prostředí budete s největší pravděpodobností chtít získat ID ze svého objektu nebo z pole uživatelů. $předmět = "Předmět oznámení" ; // Předmět e-mailových i vyskakovacích upozornění $body = ; //Tělo zprávy v e-mailech. $template = "" ; // Pokud potřebujete použít konkrétní soubor šablony jomsocial, můžete jej definovat zde. $params = new CParametr("" ) ; // Chceme vytvořit další objekt params a přiřadit mu data, aniž bychom museli formálně definovat třídu CNotificationLibrary:: add ( $cmd , $actor , $target , $subject , $body , $template , $params ) ;

    Nyní se přihlaste s libovolným uživatelem a změňte informace v profilu. Pojďme do databáze, abychom viděli, co se stalo.
    Přejděte do tabulky prefix_community_notifications a sledujte nový záznam

    Přejděte do tabulky prefix_community_mailq a podívejte se na nový záznam

    Gratulujeme! - Úspěšně jste vytvořili své první vlastní oznámení, které bylo odesláno prostřednictvím e-mailu a interního systému oznámení JomSocial


    Potenciální kód Bloat

    Výše uvedený příklad je v pořádku a funguje, ale obecně se nedoporučuje jej takto používat. Místo toho by se to dalo napsat takto

    $actor = CFactory::getUser(); $params = new CParametr("" ) ; CNotificationLibrary:: add ( "system_messaging" , $actor -> "Toto je zpráva těla upozornění" , "" , $params ) ;

    To je mnohem čistší a snadněji sledovatelné, přičemž v zásadě děláte totéž jako výše uvedený kód.

    Vlastní parametry oznámení

    Notifikační API lze rozšířit o jakýkoli parametr, který chcete přidat.
    Tyto parametry lze předat buď do šablony e-mailu, oznámení a samozřejmě do jazykového souboru.

    $actor = CFactory::getUser(); $link = "http://www.google.com" ; $params = new CParametr("" ) ; $params -> set ("actor" , $actor -> getDisplayName () ) ; // lze použít jako (actor) tag $params -> set ("actor_url" , "index.php?option=com_community&view=profile&userid=" . $actor -> id ) ; // Odkaz na (herec) tag $params -> set ("url" , $link ) ; //url celé aktivity. Používá se při najetí myší na avatar v oznamovacím okně. Může být také použit jako (url) tag v odchozích e-mailech. Ujistěte se, že jste definovali proměnnou $link:) CNotificationLibrary:: add ( "system_messaging" , $actor -> id , "965" , "Notification Subject" , "Toto je zpráva v těle upozornění" , "" , $params) ;

    • $params = nový CParametr( ); - Chceme vytvořit nový objekt params a přiřadit mu data, aniž bychom museli formálně definovat třídu.
    • $params->set("herec", $actor->getDisplayName()); - Vaše oznámení by vždy mělo mít herce. Tento parametr lze předat šabloně jako značku (actor). V oznamovacím okně definuje uživatele, který provádí akci.
    • $params->set("url_actora", "index.php?option=com_community&view=profile&userid=" . $actor->id); - Adresa URL herce je obvykle adresa URL herce. Ve vyskakovacím okně s upozorněním přidá odkaz na prvek (actor).
    • $params->set("url", $link); - Toto je nejdůležitější parametr, který musíte vždy správně nastavit. V oznamovacím okně se tento parametr používá nad obrázkem avatara. V e-mailovém upozornění se opakuje místo, kde došlo k aktivitě.

    V tomto příkladu nastavíme proměnnou $link na přistání www.google.com takže můžete vidět, jak to funguje

    Přidání jazykového řetězce a použití parametrů

    Parametry, které jsme právě nastavili, jsou k dispozici pro použití v našich jazykových souborech.
    Umožňuje definovat jazykové klíče změnou " CNotificationLibrary::add() API

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

    Jazykový soubor by měl vypadat takto

    PLG_COMMUNITY_EXAMPLE_SUBJECT = "(herec) aktualizoval profil" PLG_COMMUNITY_EXAMPLE_BODY = "Dobrý den, administrátore \n Tímto e-mailem vás informujeme, že (herec) aktualizoval profil \n\n Pokud chcete přejít na Google, klikněte sem \n a href=" _QQ_" (url)"_QQ_">(url)"

    V tomto příkladu jsme použili značku (actor) a (url) k předání dat do šablony oznámení i e-mailu. Podívejme se, jak to vypadá.
    V oznamovacím okně, když umístíte kurzor na avatar, si všimněte, že je spuštěn parametr (url) a přidá se odkaz na google přes avatar. Je to záměrné, protože jsme to tak udělali :)


    ]

    Ve stejném okně, když umístíte kurzor na odkaz herce. Toto je část, kde (actor) ozval uživatele, který provádí akci, zatímco (actor_url)“ se postaral o to, aby byl objekt správně propojen


    Podívejme se, co se stane ve frontě e-mailů


    A nakonec skutečný e-mail, který je zasílán koncovému uživateli


    Úspěch
    Doposud jsme vytvořili tři (3) parametry, které se úspěšně používají v oznamovacím okně a e-mailech.

  • (actor) - Vrací uživatelské jméno uživatele, který provádí akci
  • (actor_url) - Dává atribut (herci)
  • (url) – Není povinné, ale měli byste ho mít vždy v oznámení. Je to hlavní adresa URL, na které došlo k akci, o které jsme informováni.
  • Podobně můžete definovat "

    • (cíl) - pokud to potřebujete
    • (target_url), pokud ji v oznámení potřebujete.
    • (title) – Běžně se používá k označení objektu, který vygeneroval oznámení. Příklad: „Uživatel X zveřejnil novou fotku do alba Y.“ Album Y je název zde
    • (title_url) – Stejně jako u předchozích, adresa URL objektu, který generoval oznámení.
    • (zpráva) - Tento parametr lze použít k nastavení (a echo) zprávy v těle e-mailu JomSocial.
    3,3 tis

    Zobrazování zpráv uživateli je poměrně běžná akce, kterou by webová aplikace měla provádět. Může k němu dojít při zpracování formulářů, mohou to být chybové zprávy, zprávy, které vám říkají, že se máte zaregistrovat, když se uživatel pokusí o přístup k omezené části webu, a v mnoha dalších případech.

    Velmi často je vytváření a výstup zpráv rozdělen do různých HTTP požadavků. Zpravidla je vhodné použít přesměrování po zpracování formulářů (abyste předešli problémům s tlačítky Zpět a Obnovit), ale zároveň je přirozeným okamžikem pro vytvoření zprávy právě okamžik zpracování formulářů a provádění akcí doprovázejících to. Proč? Představte si, že text zprávy by měl vypadat nějak takto: „Počet objednaných jednotek pro produkt ‚Mouse Pad‘ byl úspěšně změněn ze 7 na 12.“ Po přesměrování, možná na úplně jinou stránku z hlediska funkčnosti, bude další bolest hlavy zjišťovat, co bylo provedeno předtím.

    Nejčastěji se zprávy zobrazují v požadavku POST, který zpracovává formulář - to není dobré, slova „tato stránka je zastaralá“ ničí život (když se uživatel rozhodne vyzkoušet tlačítko Zpět).

    Někdo používá přesměrování a vzdává se přátelských zpráv.

    Přitom existuje jednoduchý a zřejmý způsob, jak zlepšit život. Navzdory samozřejmosti jsem to z nějakého důvodu nikdy neviděl nikoho používat - alespoň když jsem se podíval na zdroje jiných lidí.

    Máme tedy problém – zpráva musí „žít“ v různých požadavcích. Potřebujeme mechanismus pro přenos textu zprávy na stránku, která by jej měla zobrazit. Pravděpodobně jste si již vzpomněli na sezení.

    Ano, obecně máte pravdu. Jiné metody, například prostřednictvím globální proměnné, neumožňují ukládání dat v případě použití přesměrování (pozn. Maxim Naumenko). Navíc se obvykle ujišťuji, že každá obrazovka v aplikaci má možnost spolu s dalšími informacemi zobrazovat zprávy, které byly vygenerovány na předchozích obrazovkách. To je výhodné, protože není třeba připravovat samostatné obrazovky pro zobrazování zpráv a uživatel nemusí znovu klikat myší. Ale ve skutečnosti zde musí designér myslet - zvýraznit oblast, ve které by se zprávy objevily.

    Myšlenka je velmi jednoduchá a lze ji implementovat pomocí několika tříd.

    První věc, která vás napadne, je vytvořit třídu Message, která by ve skutečnosti představovala zprávu v našem jednoduchém diagramu tříd. Zpráva musí být schopna uložit se v relaci a také se sama zobrazit na obrazovce.

    class Message ( /** * Obsah zprávy. */ var $content; /** * Konstruktor pro inicializaci textu zprávy. * * @param content content message */ function Message($content) ( $this->content = $ content ; ) /** * Napište zprávu do relace. */ funkce send() ( $_SESSION["session_messages"] = $this->content; ) /** * Odešle zprávu na stránku. */ funkce toPage() ( echo " - " . $this->content ."
    "; } }

    Pro přístup k relaci se používá proměnná $_SESSION.

    Všimněte si, že $_SESSION je pole, používáme pouze jeden prvek tohoto pole s indexem ‚session_message‘.

    V tomto případě máme co do činění s „polem polí“ – to, co ukládáme do prvku „session_message“ je pole, to je seznam přenášených zpráv (samozřejmě jich může být několik).

    Pokud jste vlákno nenašli, je čas oprášit části manuálu věnované relacím a polím.

    Možná máte otázku. Proč jsou zde kurzy potřebné? Bylo by možné vystačit se dvěma funkcemi. Ale podívejme se dál. Možná budeme muset vytvořit zprávy s různými typy (informace, chyba, varování) a určit příjemce zprávy.

    Upozorňujeme, že v tuto chvíli není do relace vložen samotný objekt, ale pouze text zprávy. OOP nám umožňuje později změnit chování metody send() beze změny kódu klienta, který k této metodě přistupuje (například v budoucnu můžeme do relace zapsat celý objekt Message, pokud má mnoho polí).

    Představme si, že bychom to provedli pomocí funkcí. Pravděpodobně bychom měli funkci message_send($txt) a také funkci message_to_page($txt). Nyní musíme přidat možnost různého chování pro různé typy zpráv. Změna volání funkce: message_send($txt, $druh), message_to_page($txt, $druh). Při hledání takových funkcí budete muset pročesávat celý kód aplikace a provádět opravy.

    Tomu se lze vyhnout předvídáním situace předem tím, že zprávu předložíte jako asociativní pole: $msg[‘txt’], $msg[‘kind’], pak bude ve volání funkcí pouze jeden parametr. Cítíte, jak se to snaží stát se třídou?

    OOP vám tedy dává možnost dopřát si luxusu nemyslet na vše dopředu.

    Další třída - Inbox - je určena právě pro toto.

    class Inbox ( /** * Pole přijatých zpráv. */ var $messages = array(); /** * V konstruktoru získáme všechny přijaté zprávy * a odstraníme je z relace. */ funkce Inbox() ( if (is_array($ _SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->zprávy = nová zpráva($messages[$i]); ) ) /* vymaže pole zpráv */ $_SESSION["session_messages"] = array(); ) /** * Zobrazení obsahu složky Doručená pošta na stránce. */ funkce toPage() ( $co = sizeof($this->messages); if ($co > 0) ( echo "Zpráva ze systému:
    "; ) pro ($i = 0; $i< $co; $i++) { $this->zprávy[$i]->ToPage(); )))

    Vyzkoušejte náš systém zasílání zpráv.

    Vytvořme si velmi jednoduchý příklad, který bude reagovat na odeslání formuláře nahlášením počtu sekund v aktuální minutě.

    Veškerou práci s poli a relacemi jsme schovali do tříd a konečný kód vypadá jednoduše a krásně.

    Vytvořte adresář na svém webovém serveru, poté v něm vytvořte tyto tři soubory a vyzkoušejte skript. Upozorňujeme, že s tlačítky Zpět a Obnovit nejsou žádné problémy.

    Nyní si představte, že vytváříte komplexní portál, kde je na stránkách zpravidla několik bloků a každý může obsahovat samostatnou aplikaci.

    Zde narážíme na dvě potíže:

    * Přál bych si, aby se seznam zpráv zobrazoval v konkrétní části stránky a už jste pro to našli dobré místo.
    Problém je v tom, že musíte spustit příkaz $inbox->toPage() přesně v okamžiku, který by odpovídal pozici seznamu zpráv na stránce. Pokud chceme změnit pozici tohoto seznamu, budeme muset jít do kódu, ale není dobré k tomu neustále měnit rám portálu. Nejlepším řešením by bylo udělat výstup zpráv ve formě samostatného modulu, o kterém víme pouze to, že je potřeba jej propojit s frameworkem.
    To znamená, že se osvoboďte od přísného sledu spouštění modulů. Ve skutečnosti, protože výsledek výstupu Inbox nezávisí na provozu systému (v tomto kroku již máme všechna data v relaci), tak proč ta další složitost?
    * Abyste zachovali vzhled (design) seznamu zpráv, musíte se postarat o HTML kód, který je pevně zakódován v metodách toPage() tříd Message a Inbox. Obvykle budete muset změnit kód PHP, abyste mohli změnit design.

    Chcete-li se pokusit vyřešit první problém, můžete vytvořit vyrovnávací paměť, která uloží výsledek výstupu Doručená pošta.

    Možná budeme mít stále několik podobných věcí (jako Inbox) a musíme vytvořit systém vyrovnávací paměti. Aby nedošlo k záměně čí výstup je čí, dojdeme asi k pojmenování bufferů. Někde uložíme sekvenci, podle které se mají buffery vypisovat – nejlépe do externího souboru pro usnadnění změn.

    Tento pokus o řešení nám již dává myšlenku použití XML jako prostředku pro ukládání mezilehlých dat. A použití stylů XSLT pomůže vyřešit druhý problém.

    Nebudu se zabývat tím, co je XML a co XSLT. Pokud nejste obeznámeni s těmito věcmi, zvon.org je dobré místo, kde začít hledat.

    Cílem je generovat nikoli HTML kód, ale strukturu XML v metodách toPage(). Stránkový dokument bude vytvořen jako řetězec s kódem XML (bude sloužit jako „buffer“) a v poslední fázi skriptu použijeme transformaci XSL.

    Nejprve si představme, co by mělo být výsledkem hlavní části kódu.

    minuta 57 sekund: 45

    Co to je, lze celkem snadno uhodnout – dvě zprávy a formulář. Upozorňujeme, že PHP skript potřebuje pouze takový řetězec připravit – je to velmi jednoduché. Pořadí hlavních tagů navíc není důležité - můžete je umístit například na první místo, jak to programátorovi vyhovuje. Jak to implementovat. Můžete, aniž byste cokoli měnili, používat ukládání do vyrovnávací paměti výstupu, vydávat XML místo HTML kódu a nakonec výstup jednoduše zachytit do řetězce. Pak ale ztratíme flexibilitu – například někdy chcete vypsat ladicí informace přímo na stránku (pomocí echa). Vývojáři PHP zároveň pracují na modulu DOM, který nabízí pokročilejší způsob vytváření a předávání stromových dokumentů. Pokud budeme chtít implementovat DOM, budeme muset předělat celou aplikaci, změnit výstup řetězců na tvorbu prvků DOM. Proto dávám přednost ukládání XML reprezentace objektů v rámci samotných objektů, sekvenčním sestavením společného XML dokumentu. Není to tak těžké, chce to jen malou úpravu. Uvidíte, že tato technika není striktně vázána na konkrétní způsob ukládání dat XML, a to vám umožní přejít na použití DOM s minimálním úsilím. Nejprve si všimněte, že každý z našich objektů má metodu toPage(). Tato podobnost by nás měla přimět přemýšlet o zavedení nové společné rodičovské třídy. Nechte každou třídu, která dokáže vytvořit části dokumentu XML pro stránku, dědit od třídy, která se postará o XML reprezentaci objektu. Říkejme tomu Outputable.

    class Outputable ( /** * XML kontejner (řetězec). */ var $output = ""; /** * Zadejte obsah kontejneru a vymažte kontejner. * * @return řetězec s daty XML */ funkce getOutput () ( $ out = $this->output; $this->output = ""; return $out; ) /** * Přidejte část k obsahu kontejneru. * * @param řetězec řetězec, který chcete přidat * / function appendOutput($string) ( $this ->output .= $string . "n"; ) /** * metoda "Abstract". */ function toPage() ( ) )

    Metoda toPage() je prázdná – v tomto případě je potřeba jako indikátor toho, jak mají externí třídy „matrjoška“ komunikovat s vnitřní třídou. Zde bychom však mohli nabídnout výchozí implementaci, pokud bychom si všimli, že existuje mnoho objektů, které se na stránce zobrazují stejným způsobem.

    Třídy Message a Inbox se mírně změní – měly by nyní obě dědit z Outputable a změní se také metody toPage()
    Zpráva.php

    class Message extends Outputable ( /** * Obsah zprávy. */ var $content; /** * Konstruktor pro inicializaci textu zprávy. * * @param content obsah zprávy */ funkce Zpráva($content) ( $this->content = $content; ) /** * Napište zprávu do relace. */ funkce send() ( $_SESSION["session_messages"] = $this->content; ) /** * Odešle zprávu na stránku. * / function toPage() ( $this->appendOutput("".$this->content.""); ) )

    class Inbox extends Outputable ( /** * Pole přijatých zpráv. */ var $messages = array(); /** * V konstruktoru přijímáme všechny přijaté zprávy * a odstraňujeme je z relace. */ funkce Inbox( ) ( if (is_array ($_SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); for ($i = 0; $i< $co; $i++) { $this->zprávy = nová zpráva($messages[$i]); ) ) /* vymaže pole zpráv */ $_SESSION["session_messages"] = array(); ) /** * Zobrazení obsahu složky Doručená pošta na stránce. */ funkce toPage() ( $co = sizeof($this->messages); $this->appendOutput(""); for ($i = 0; $i< $co; $i++) { $this->zprávy[$i]->toPage(); $this->appendOutput($this->zprávy[$i]->getOutput()); ) $this->appendOutput(""); ))

    Metoda výstupu se změnila – nyní, namísto přímého výstupu na stránku, je externí reprezentace prozatím uložena v Outputable, která „sedí“ v každém z objektů. Metoda appendOutput() slouží jako náhrada za konstrukci echo(). K získání výstupu objektu se používá metoda getOutput().

    Nyní se podívejme, jaká je klientská část kódu, která vyřeší stejný problém jako dříve.
    index.php

    Hlavní inovace je v objektu $global_content, jehož název mluví sám za sebe. V tomto případě patří do třídy Outputable, v reálných úlohách byste pravděpodobně vytvořili samostatnou třídu pro obsah stránky.

    Pokud se podíváte pozorně, obsah skriptu se prakticky nezměnil - stejná schránka, stejná toPage(). Přidána instrukce, která zobrazuje obsah seznamu zpráv v obsahu stránky. Pro zpestření jsou nyní vygenerovány dvě zprávy.

    Abyste se mohli podívat na výsledek, zbývá už jen připravit XSL šablonu.
    styl.xsl

    Příklad XSLT

    zpráva

    Čeho jsme dosáhli?

    Především se můžete s větší jistotou ujmout komplexních projektů – je zajištěna skutečná nezávislost modulů. Pořadí, ve kterém jsou výsledky umístěny na stránce, je nyní řízeno pomocí externí šablony XSL a nezávisí na pořadí, ve kterém jsou moduly spouštěny.

    V projektu lze použít jakýkoli modul, který generuje data XML jako výsledek své práce. To je mimochodem jedna z výhod oproti šablonovým enginům, ve kterých se tvorba dat skládá ze sekvence volání metod (assign apod.) konkrétního enginu, pro které neexistuje společný standard.

    Další výhodou je snadné ladění. Pokud skript spustíte, všimnete si, že každá stránka obsahuje výstup ladění – prototyp XML, který výrazně zjednodušuje ladění aplikací.

    Ještě něco, na co musíte myslet, je, jak vytvořit objekty zpráv. Ne vždy je vhodné používat new přímo v klientském kódu. Ale to je možná téma na samostatný článek.

    Nakonec cval o vyhlídkách:

    * vyskakovací okna pro seznam důležitých zpráv
    * "stránky odesílatele" a "cílové stránky" ve zprávách
    * protokolování zpráv do databáze
    * tlačítko "zobrazit historii mých akcí"
    * statistická analýza akcí uživatelů v rámci relací
    * „inteligentní asistenti“ ve webových aplikacích

    V KP a BUS se od verze 11.5 v edicích, které obsahují sociální síť, objevil nový modul „Web messenger“.
    Než byl modul uvolněn pro všechny, prošel křest ohněm na našem „Sociálním intranetu“ a shromáždil až 8 aktualizací


    Za šest měsíců vývoje jsme toho stihli hodně

    Zcela jsme opustili předchozí rozhraní a vytvořili jsme nové, založené na zkušenostech oblíbených instant messengerů.
    Na stránce se začalo otevírat dialogové okno, objevovaly se v něm tváře, zprávy byly barevně kódovány a bylo možné snadno vést konverzaci s několika lidmi současně.

    Okno historie je samostatné téma, každý už dlouho chtěl mít vyhledávání v historii, teď ho konečně máme, plánujeme tam přidat kalendář pro rychlou navigaci.

    Vytvořili jsme notifikační centrum s různými typy zpráv, poskytli možnost prohlížení historie jejich přijetí a pro vývojáře jednoduché API pro přidávání a vyvolávání upozornění.

    A to vše je k dispozici na každé stránce vašeho webu!

    Bohužel ne vše, co bylo plánováno, se podařilo zrealizovat

    První Co jsme nestihli udělat, bylo přeložit zprávy na naše tabulky.
    Takový přechod by umožnil opustit modul „sociální sítě“, což by poskytlo větší volnost ve výběru redaktorů, a také by bylo možné zavést skupinové chaty.

    Druhý, jedná se o implementaci skutečné „okamžité“ komunikace. Nyní modul používá pravidelné sdružování, dotazování serveru jednou za n-sekund, perioda dotazování se liší v závislosti na aktivitě komunikace.
    Plánujeme napsat samostatnou službu, která bude udržovat stálé připojení a podle potřeby rozesílat aktualizace dat (pro messenger, pro živý přenos atd.).

    Třetí, plánujeme mírně změnit rozhraní, opustit samostatný seznam kontaktů a dialogové okno a spojit je do jediného celku, což nám v budoucnu umožní přesunout messenger do mobilní aplikace.

    Dokumentace zatím neexistuje a objeví se až na podzim, protože... Modul se aktivně vyvíjí a chceme ponechat možnost měnit API.
    Pokusím se však zveřejnit ukázky práce s tou částí API, na které již byla práce dokončena a můžete je bez obav používat ve svých modulech.

    Práce s upozorněními (relevantní pro IM od verze 11.5.2)

    Zavedli jsme tři typy upozornění:
    - personalizované oznámení;
    - upozornění ze systému;
    - oznámení vyžadující potvrzení;

    Před použitím API musíte zkontrolovat, zda je modul nainstalován v systému:

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

    Personalizované oznámení


    Pokud jsou zprávy nastaveny na NOTIFY_TAG, uživatel je seskupí.

    Upozornění ze systému


    $arMessageFields = array(// příjemce "TO_USER_ID" => $USER->GetId(), // odesílatel (může být >0) "FROM_USER_ID" => 0, // typ upozornění "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, // modul, který požadoval zaslání upozornění "NOTIFY_MODULE" => "im", // symbolická značka pro seskupení (zobrazí se pouze jedna zpráva), pokud to není vyžadováno, nenastavujte parametr "NOTIFY_TAG" => "IM_CONFIG_NOTICE", // text upozornění na stránce (k dispozici jsou html a BB kódy) "NOTIFY_MESSAGE" => "[b]Pozor: musíte zkontrolovat a zadat správnou cestu k sociální síti v nastavení modulu "Instant Messaging and Notifications" , // text upozornění zasílat e-mailem (nebo XMPP ), pokud nejsou rozdíly, nenastavujte parametr //"NOTIFY_MESSAGE_OUT" => ""); CIMNotify::Add($arMessageFields); ?>

    Oznámení vyžadující potvrzení (potvrdit)


    $arMessageFields = array(// příjemce "TO_USER_ID" => $USER->GetId(), // odesílatel "FROM_USER_ID" => 2, // typ upozornění "NOTIFY_TYPE" => IM_NOTIFY_CONFIRM, // modul, který požadoval odeslání upozornění "NOTIFY_MODULE " => "kalendář", // symbolická značka pro seskupení (zobrazí se pouze jedna zpráva), pokud to není vyžadováno, nenastavujte parametr "NOTIFY_TAG" => "CALENDAR|INVITE|123|".$ USER->GetId() , // text upozornění na webu (k dispozici jsou kódy html a BB) "NOTIFY_MESSAGE" => "Zvu vás k účasti na schůzce „Instant Messaging and Notifications“, která se bude konat 15. března, 2012 ve 14:00", // text upozornění k zaslání e-mailem (nebo XMPP), pokud nejsou žádné rozdíly, nenastavujte parametr „NOTIFY_MESSAGE_OUT“ => „Uživatel Evgeny Shelenkov vás zve k účasti na setkání „Instant zprávy a upozornění” #BR# který se bude konat dne 15.03.2012 ve 14:00.#BR # #BR# Přijmout: http://test.ru/calend.php?CONFIRM=Y&CID=123 #BR# Odmítnout: http://test.ru/calend.php?CONFIRM=N&CID=123", // pole popisující tlačítka oznámení "NOTIFY_BUTTONS" => Array(// 1. název tlačítka, 2. hodnota, 3. šablona tlačítka , 4. přechod na adresu po kliknutí (volitelný parametr) Array("TITLE" => "Accept", " VALUE" => "Y", "TYPE" => "accept" /*, "URL" => " http://test.ru/?confirm=Y" */), Array("TITLE" => " Odmítnout", "VALUE" => "N", "TYPE" => "zrušit" /*, "URL" " => "http://test.ru/?confirm=N" */),), // symbolický kód šablony pro zasílání dopisů, pokud není zadán, je odeslán se šablonou oznámení "NOTIFY_EMAIL_TEMPLATE" => " CALENDAR_INVITATION"); CIMNotify::Add($arMessageFields); ?>

    Chcete-li pracovat s tímto typem upozornění, nestačí zprávu jednoduše odeslat, musíte ji také obsloužit.

    Servis
    Jsou dvě možnosti, nejjednodušší je následovat odkaz (pokud nastavíte 4. parametr v NOTIFY_BUTTONS).
    Po kliknutí na odkaz musíte ve svém kódu zavolat následující kód:
    Pozor: věnujte zvýšenou pozornost názvům štítků, když zavoláte smazání, všechny zprávy s tímto štítkem budou smazány.
    Při odesílání více zpráv je třeba s tím počítat, aby provedení akce jedním uživatelem omylem nesmazalo upozornění všem (kromě míst, kde je taková logika potřeba).

    Druhá možnost je na akcích.
    1. musíte zaregistrovat závislost

    Nezapomeňte uvnitř svých funkcí Potvrdit požadavek A RejectRequest způsobí smazání oznámení CIMNotify::DeleteByTag()

    To je prozatím vše, čekám na vaše návrhy v komentářích, úspěšné realizace!
    Pokud chcete vyzkoušet API před vydáním 11.5.2 v poli s parametry, musíte dodatečně zadat "MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, také možnost s odkazem v tlačítkách nebude fungovat pro potvrzení upozornění. Ale je lepší počkat; aktualizace 11.5.2 má vyjít 23.

    Lepší špatný pruh než delirium tremens...

    PHP AJAX CRUD: vytváření, mazání, editace záznamů v databázi MySQL

    V tomto článku se naučíme přidávat, upravovat a mazat záznamy v databázi MySQL pomocí PHP. Použili jsme obslužnou rutinu JQuery, která odesílá požadavek AJAX skriptu na straně serveru. Obsluha aktualizuje seznam záznamů.

    AJAX formulář pro zasílání požadavků na vytvoření, smazání, editaci

    Při přidávání záznamu formulář odešle data do PHP skriptu prostřednictvím požadavku AJAX. Pokud je přidání úspěšné, seznam položek se znovu načte.

    JQuery AJAX funkce pro CRUD databázový dotaz

    Ve funkci JQuery AJAX máme přepínací případy přidat editovat a mazat. Tyto případy generují různé datové řetězce dotazů a odpovědí v závislosti na akcích databáze.

    function showEditBox(id) ( $("#frmAdd").hide(); var currentMessage = $("#message_" + id + " .message-content").html(); var editMarkUp = ""+currentMessage+" SaveCancel"; $("#message_" + id + " .message-content").html(editMarkUp); ) funkce cancelEdit(message,id) ( $("#message_" + id + " .message-content") .html(zpráva); $("#frmAdd").show(); ) funkce 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(action) (case "add": $("#comment-list-box").append(data); break; case "edit": $("#message_" + id + " .message-content").html(data); $("#frmAdd").show(); přestávka; case "delete": $("#message_"+id).fadeOut(); přestávka; ) $("#txtmessage").val(""); $("#loaderIcon").hide(); ), chyba:funkce ()() )); )

    PHP skript pro operace CRUD

    Následující kód provádí dotazy na databázi. Tento skript PHP po provedení akce CRUD aktualizuje záznamy v důsledku odpovědi AJAX.

    require_once("dbcontroller.php"); $db_handle = new DBController(); $akce = $_POST["akce"]; if(!empty($action)) ( switch($action) ( case "add": $result = mysql_query("INSERT INTO comment(message) VALUES("".$_POST["txtmessage"].")" ) ; if($result)($insert_id = mysql_insert_id(); echo " Edit Delete " . $_POST["txtmessage"] . " "; ) break; case "edit": $result = mysql_query("UPDATE komentář 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 bodě tohoto kurzu byl položen základ našeho pluginu, definován vlastní hák a byla připojena trvalá zpráva, která ukazuje, jak háček funguje.

    Že my Ne ano, neimplementovali typy zpráv a jejich zobrazování podle údajů zadaných uživatelem.

    Než ale začneme, musíme přidat podporu pro různé typy zpráv, rozhraní třídy, které bude podporovat každý typ zprávy, a datovou strukturu potřebnou k uložení takových zpráv.

    Jste připraveni začít?

    Těším se na pokračování tutoriálu, ale než se po hlavě vrhneme do zdrojového kódu, musíme zvážit několik věcí. Ujistěte se, že máte v systému nainstalován následující software:

    • PHP 5.6.25 a MySQL 5.6.28
    • Apache nebo Nginx
    • WordPress 4.6.1
    • Vaše preferované IDE nebo editor

    A pokud hledáte řešení all-in-one, nezapomeňte vyzkoušet MAMP.

    Postoupili jsme do

    Jak již bylo zmíněno, jsme přesně v polovině tohoto kurzu. Pokud jste zmeškali některou z prvních lekcí, zde je to, co jsme doposud probrali:

  • V prvním tutoriálu jsme se zaměřili na minimální základy pro tvorbu našeho pluginu a na to, co potřebujete mít, abyste mohli začít.
  • V druhé části jsme se s pluginem posunuli dále, přidali něco málo do základní administrační stránky ve WordPressu. Také jsme přiřadili vlastní hák, který používáme, a spustili ho na straně serveru. Také jsme nastavili základní parametry pro náš Settings Messenger.
  • A toto budeme zvažovat v závěrečné fázi školení:

  • Vše spojíme dohromady, uvidíme v akci a plugin zpřístupníme veřejnosti ke stažení.
  • V současné době máme další úkoly, na které se zaměříme.

    Vraťme se do práce

    Protože jsme se pustili do práce (a jak bylo uvedeno v předchozích lekcích), jsme odhodláni dále implementovat úkoly v této části:

    V tomto tutoriálu budeme pokračovat ve vývoji našeho Settings Messengeru přidáním podpory pro zprávy o úspěchu a selhání a také se dotkneme bezpečnostních problémů.

    V předchozím článku jsme začali v aplikaci Settings Messenger, ale pouze do té míry, že jsme nastavili funkci, která bude při načítání stránky uživatele neustále zobrazovat oznámení o úspěchu.

    V tomto tutoriálu přidáme podporu pro chybové, varovné a úspěšné zprávy. Poté je zobrazíme na obrazovce, abychom získali představu o tom, jak bude messenger fungovat.

    Kromě toho se chystáme provést další změnu, která přidá podporu pro zavírání oznámení podle uvážení uživatele.

    Toto je celý plán nezbytné práce pro tuto lekci. Začněme.

    Nastavení Rozšíření Messenger

    Pamatujte, že smyslem aplikace Settings Messenger je definovat náš způsob práce s vlastními zprávami, vlastními háčky a nativním rozhraním WordPress API pro zobrazování zpráv v kontextu panelu správce WordPress.

    Abychom toho dosáhli, rozšíříme práci vykonanou v poslední lekci a začneme odtud.

    Úspěšné zprávy

    Protože jsme v předchozí lekci začali úspěšnými zprávami, pojďme v nich pokračovat. Nyní máme pevně zakódovanou metodu, která zobrazuje jediný trik: