Comentariu ușor de adăugat. Cum să implementezi corect un sistem CRM: un algoritm de acțiuni și greșeli comune. Comentariile sunt feedback și motivație

Potrivit unui studiu realizat de C5Insight, o companie de implementare CRM, o medie de 38% din integrările CRM în afaceri nu reușesc să ofere rezultate care sunt anticipate. Motivul nu este într-un produs IT prost, ci în faptul că companiile nu știu să implementeze corect CRM, greșesc și în cele din urmă își pierd investițiile.

Dar dacă trecerea la CRM are succes, atunci investiția se va amortiza de peste 5 ori. Potrivit unui studiu al companiei de analiză Nucleus Research, fiecare dolar investit în CRM aduce 5,6 dolari profit.

Rentabilitatea investiției într-un produs CRM pentru afaceri conform companiei de analiză Nucleus Research în 2011

Pentru a înțelege cum ar trebui să aibă loc implementarea unui produs IT, vom lua în considerare principalele etape ale integrării, precum și greșelile tipice pe care antreprenorii le fac adesea.

Etape de implementare

Implementarea CRM are loc în moduri diferite, dar există întotdeauna cinci etape principale în acest proces. Pe fiecare dintre ele, un integrator acționează ca curator - un reprezentant al unei companii CRM, dar nu vă faceți griji: nu trebuie să scrieți „ Test". Trebuie doar să urmați instrucțiunile integratorului: descrieți cu acuratețe procesele și problemele de afaceri pe care le doriți

1. Descrierea proceselor de afaceri

Deoarece sistemul CRM vă permite să îmbunătățiți și să automatizați procesele existente, mai întâi trebuie să le descrieți. Aceste date vor sta la baza setărilor programului:

  • Care este structura companiei? Cum sunt împărțiți oamenii în departamente? Cum sunt repartizate sarcinile între angajați?
  • Cine sunt clienții companiei? , Cum ?
  • Care este algoritmul de interacțiune cu clienții?
  • Cum se gestionează loialitatea clienților? Cum funcționează marketingul în general?
  • Care sunt folosite în companie?

2. Întocmirea termenilor de referință

Când sunt descrise procesele de afaceri, trebuie să analizați puncte slabe. La urma urmei, tocmai pentru eliminarea lor este implementat programul.

De exemplu, managerii tăi întârzie să răspundă la noile solicitări de pe site-ul companiei - apelează clienții abia a doua zi sau chiar uită de ei. Drept urmare, compania pierde potențiali clienți. Acest lucru trebuie specificat în termenii de referință pentru ca integratorul să ofere o soluție la problemă. Dar acest lucru se va întâmpla în următorul pas.

3. Formarea unei hărți a setărilor

Procesele de afaceri sunt descrise, problemele sunt identificate și acum trebuie să ne dăm seama cum să le „înfrângem” cu ajutorul sistemului: ce procese pot fi optimizate, accelerate, automatizate. De exemplu, puteți automatiza facturarea și așa mai departe.

În această etapă, rolul principal este atribuit unui specialist CRM. El cunoaște în detaliu capacitățile unui produs IT și poate oferi astfel de nuanțe pe care consumatorul nici nu știa că există. În plus, integratorul poate sfătui sau îmbunătăți interacțiunea cu clienții – adică acționează și ca consultant.

Dacă continuăm exemplul din etapa anterioară, atunci integratorul poate oferi o astfel de modalitate de a face față clienților pierduți: configurați integrarea CRM cu site-ul astfel încât fiecare solicitare să fie înregistrată automat în program și să fie desemnat un manager responsabil pentru aceasta. Sistemul îi va seta automat sarcina de a suna clientul în 15 minute, iar dacă sarcina este întârziată, șeful departamentului de vânzări va afla instantaneu despre aceasta printr-o notificare programatică.

4. Configurare CRM, import, integrare

Această etapă este o implementare tehnică a celei anterioare. Lucrarea revine în totalitate specialistului în implementare. Importă date, creează o pâlnie de vânzări și liste de verificare, creează câmpuri personalizate, prescrie scripturi pentru automatizarea proceselor de afaceri - într-un cuvânt, ajustează interfața sistemului pentru a se potrivi afacerii tale. În plus, la acest pas, integrarea CRM cu servicii terților, pe care îl utilizați în munca dvs.: e-mail, site-ul companiei, serviciu de corespondență sms și altele.

5. Pregătirea personalului

Nu are sens să-ți dai seama cum să implementezi CRM într-o companie dacă angajații nu pot lucra cu el în mod competent. CRM este doar un instrument care nu aduce profit în sine, așa că este important să le explicăm angajaților ce este acest program de neînțeles și de ce este atât de important să înregistrăm cu minuțiozitate datele clienților și ale tranzacțiilor în el în fiecare etapă de lucru.

De exemplu, a sunat clientul - a notat rezultatul negocierilor în cardul său; nu a ajuns - setați un memento pentru a suna înapoi în 2 ore; a încheiat afacerea - notat în CRM că vânzarea este finalizată, iar apoi clientul va primi automat un SMS cu o solicitare de a oferi o recenzie.

Dacă acest lucru nu se face, atunci rapoartele de vânzări vor fi incorecte, nu vor funcționa, iar baza de date se va transforma într-o simplă colecție de nume și numere de telefon.

De fapt, multora le este dificil să formuleze probleme, să identifice punctele slabe în afacerile de muncă și să înțeleagă ce procese de afaceri trebuie să fie automatizate. Pentru a face acest lucru, este mai bine să contactați imediat dezvoltatorul și să cereți ajutor.

De ce nu a mers? Analizăm erorile de implementare

Chiar dacă ai ales sistemul potrivit și ai înțeles cum să implementezi corect CRM, tot nu ești imun. Din fericire, poți folosi experiența altor companii pentru a-ți îmbunătăți șansele de succes.

1. Grabă în fazele inițiale de implementare

Cel mai adesea, greșelile sunt făcute în primele etape ale implementării sistemului. Deficiențele în descrierea proceselor de afaceri și „gâturile de sticlă” în pâlnia de vânzări pot duce la faptul că sistemul CRM nu se integrează în activitățile reale ale companiei și, cu atât mai mult, nu ajută la rezolvarea problemelor.

Nu te grăbi și urmează cu atenție recomandările unui specialist CRM. Daca ai o firma mica de 10-20 de persoane, integrarea va dura 2-3 saptamani. Dacă vorbim despre o corporație mare, atunci un proces fără probleme poate dura până la șase luni. Înainte de a implementa un sistem CRM, asigurați-vă că vă concentrați asupra acestor termene limită.

2. Opțiuni de integrare insuficiente

Este important ca sistemul CRM să fie bine integrat cu celelalte software pe care firma le foloseste. Altfel, nu veți reuși niciodată ca programul să aibă toate informațiile relevante de vânzări și să funcționeze fără eșecuri.

Potrivit C5Insight, cu atât mai mult diferite programe utilizate în companie, cu atât rezultatele implementării sunt mai proaste. Cert este că informațiile din diferite servicii nu sunt sincronizate și trebuie să duplicați manual aceleași informații în mai multe programe, de exemplu, în CRM și în 1C Accounting. Drept urmare, se pierde mult timp, apar erori în date, iar rapoartele încetează să „spună” adevărul.

Chiar și în etapa de selecție a sistemului, faceți o listă de software și servicii cu care este necesară integrarea și furnizați-o specialistului în implementare. În același timp, trebuie să delegați procesele de la alții produse softwareîn CRM. De exemplu, abandonați Outlook și utilizați

Potrivit C5Insight, 35% dintre utilizatorii CRM citează integrarea software-ului ca fiind o dificultate cheie atunci când trec la o soluție CRM. Și dacă sistemul pe care îl alegeți nu suportă în principiu integrările necesare, atunci această dificultate va deveni fatală.

3. Pregătire slabă a angajaților

Un sistem CRM este o tehnologie, poate ajuta echipa, dar nu își preia munca. Angajații trebuie să înțeleagă, altfel „eșapamentul” va fi minim. Aranjați o prezentare introductivă, înregistrați lecții video cu instrucțiuni detaliate, desfășoară un mini-examen, antrenează personal șefii de departamente astfel încât aceștia să transfere cunoștințele subordonaților prin ierarhie. Lăsați angajații să înțeleagă ce depinde de ei, cum se vor recupera investițiile dvs.

În loc de o concluzie

Există un principiu binecunoscut: 40% din efectul integrării se realizează prin planificare competentă, 20% prin utilizarea tehnologiilor potrivite și 40% prin . Așadar, pentru a evita greșelile la implementarea unui produs IT, acționează „cu simțire, înțelept, cu aranjament”, iar rezultatul nu va întârzia să apară.

Vrei să afli mai multe? Sunteți gata să începeți implementarea unui sistem CRM? în program convenabil chiar acum, specialiștii noștri vă vor suna înapoi și vă vor sfătui cu privire la toate întrebările dvs.

Acum a devenit la modă înlocuirea familiarului sistem de comentarii WordPress cu unul dintre cele mai populare comentarii. retele sociale Facebook. Am publicat anterior, dar a trecut mult timp de atunci, iar acum această procedură a fost simplificată considerabil datorită gata Plugin WordPress. Așa că de data aceasta va fi mult mai ușor.

Vă vom spune cum să implementați comentariile Facebook pe site-ul dvs. puțin mai târziu, dar mai întâi vom încerca să stabilim avantajele și dezavantajele unei astfel de înlocuiri.

Comentarii de pe Facebook: argumente pro și contra

În plus, factorul așa-numitului anonimat. Este puțin probabil ca comentariile spam să fie adăugate de pe Facebook, deoarece toate sunt legate de conturi de utilizator reale.

Cu toate acestea, există și dezavantaje la un astfel de sistem. Mulți utilizatori preferă anonimatul și deloc pentru că vor să scrie ceva rău sau să lase spam. Nu. Este doar o chestiune de moment psihologic și sentimentul de disconfort și jenă pe care îl experimentează atunci când vorbesc în public. Acest factor poate reduce activitatea utilizatorului.

Spre deosebire de alte sisteme de comentarii precum Disqus, comentariile Facebook nu se sincronizează cu comentariile native WordPress. Le înlocuiesc complet. Dacă postările mai vechi au deja comentarii WordPress, acestea vor apărea înainte sau după noile comentarii adăugate prin formularul Facebook.

Iată, probabil, toate avantajele și dezavantajele comentariilor de pe Facebook.

Dacă încă nu v-ați răzgândit cu privire la instalarea acestora pe site-ul dvs. WordPress, atunci citiți mai jos cum să faceți acest lucru.

Plugin Facebook Comments pentru WordPress

Mai întâi, instalați și activați pluginul Comentarii Facebookși configurați-l în meniul care apare sub Setări → Comentarii Facebook.


Pentru a începe să utilizați comentariile pe site, trebuie mai întâi să creați o aplicație Facebook.

Dacă ați creat anterior o aplicație, puteți utiliza datele de identificare ale acesteia chiar acum. În caz contrar, va trebui să creați unul nou pe pagină Aplicații Facebook:

Panoul de control al aplicației nou create va afișa ID-ul acesteia, pe care trebuie să-l copiați și să-l inserați în setările pluginului. Dar înainte de asta, configurați aplicația pe site-ul dvs. în „Setări” folosind butonul „Adăugați platformă”.

Va apărea o nouă fereastră în care trebuie să faceți clic pe site webși alegeți-l ca platformă.

Deci, pe pagina de setări a aplicației va apărea noua sectiune„Site web”, în care puteți specifica adresa site-ului dvs.

Salvați modificările, copiați ID-ul aplicației și plasați-l în setările pluginului site-ului dvs.

Dacă nu înțelegeți setarea aplicații Facebook apoi iată încă una instructie scurta pe limba engleza cu un exemplu pentru site-ul nostru:

Acest plugin de comentarii Facebook are o mulțime de opțiuni de personalizat. Setări standard ar trebui să funcționeze cu majoritatea site-urilor. Cu toate acestea, le puteți modifica la discreția dvs. și puteți salva modificările.

Acum puteți testa dacă funcționează corect sistem nou comentarii pe site-ul dvs.

Moderarea comentariilor

Deoarece aveți drepturi de administrator, veți fi anunțat despre noile comentarii. Puteți să le gestionați și să decideți dacă le publicați sau nu.

De asemenea, puteți adăuga un nou moderator în setări:

Sperăm că acest tutorial a lămurit lucrurile și te-a ajutat să configurezi singur comentarii Facebook pentru site-ul tău non-WordPres.

De data aceasta facem un sistem simplu de comentare AJAX. Acesta va demonstra cum să obțineți o interoperabilitate eficientă între jQuery și PHP/MySQL folosind JSON. Sistemul funcționează în așa fel încât comentariile adăugate să fie plasate pe pagină fără a o reîncărca complet, dând senzația de a rula site-ul doar pe computerul utilizatorului, evitând astfel nevoia de a aștepta ceva timp necesar reîncărcării paginii cu conținutul adăugat. cometariu.

Iată o demonstrație aproximativă a ceea ce intenționăm să implementăm:

Pasul 1 - XHTML

Mai întâi, să aruncăm o privire la marcajul de comentarii. Acest cod este generat de PHP într-un comentariu, pe care îl vom analiza într-un moment.

Demo.php

Nume
30 iulie 2010

Un comentariu

Clasa de avatar Div conține un hyperlink corespunzător avatarului (dacă utilizatorul a specificat un link valid către avatar la trimiterea unui comentariu), să spunem de pe gravatar.com. Ei bine, vom reveni la asta când vom lucra cu PHP. În cele din urmă, avem și numele și ora în DIV, precum și comentariul, adică textul în sine din paragraf.

Un alt element important din partea XHTML este formularul de trimitere a comentariilor în sine (sunt obligatorii toate câmpurile, cu excepția câmpului URL).

Demo.php

Adauga un comentariu

Pasul 2 - PHP

PHP se ocupă de legăturile de baze de date Date MySQLși creează un comentariu de marcare. De asemenea, primirea se termină cu AJAX și inserează comentariul în tabelul de comentarii. Puteți vedea mai jos codul care imprimă comentariile paginii.

Demo.php /* / Selectați toate comentariile și completați matricea $comments */ $comments = array(); $rezultat = mysql_query("SELECT * FROM comments ORDER BY id ASC"); while($row = mysql_fetch_assoc($result)) ($comments = new Comment($row); )

Interogarea MySQL selectează toate înregistrările din baza de date și populează matricea $comments cu obiectul clasei de comentarii pe care îl vedeți mai jos. Această matrice este scoasă după ce scriptul este executat.

Demo.php /* / Printează comentariile unul câte unul */ foreach($comentarii ca $c)( echo $c->markup(); )

Fiecare comentariu are o metodă markup() care generează codul HTML pentru a imprima pagina. Puteți vedea această metodă și această clasă mai jos.

Clasa preia un rând din baza de date (preluat cu mysql_fetch_assoc()) și îl stochează în variabila $data. Este disponibil numai pentru metodele acestei clase și nu poate fi accesat din exterior.

Comment.class.php - Pasul 1 clasa Comentariu ( private $date = array(); function public __construct($row) ( /* / Constructor */ $this->data = $row; ) public function markup() ( / */ Această metodă emite un marcaj de comentarii XHTML */ // Creați un alias astfel încât să nu // trebuie să scriem $this->date date de fiecare dată: $d = &$this->data; $link_open = ""; $link_close = ""; if($d["url"])( // Dacă persoana a completat adresa URL în timp ce // adaugand un comentariu// Definiți un hyperlink $link_open = ""; $link_close = ""; ) // Conversie de timp $d["dt"] = strtotime($d["dt"]); // Necesar pentru imaginile Gravatar implicite: $url = "http://".dirname($_SERVER["SERVER_NAME"]. $_SERVER["REQUEST_URI"])."/img/default_avatar.gif"; întoarcere"

„.$link_open”. „.$link_close.”
„.$link_open.$d[„nume”]. $link_close.”

„.$d[„corp”]”.

"; }

Acest script folosește Gravatar pentru a afișa avatarurile în comentarii. Pentru cei care nu au folosit Gravatar, acesta este un serviciu foarte util care vă permite să asociați un avatar cu adresa dvs. de e-mail. Avatarul poate fi luat cu ușurință prin trecerea hash-ului peste md5().

Observați pe linia 39 de mai sus - scriptul încearcă să descopere adresa URL pe care se află și determină adresa exactă a imaginii default_avatar.gif. Acest GIF este transmis către Gravatar printr-un hash md5, așa că, dacă a fost găsit un avatar la acea adresă de e-mail, este afișată o imagine stoc de rezervă.

Comment.class.php - Pasul 2 validarea funcției publice statice(&$arr) ( /* / Aceasta metoda folosit pentru validarea datelor / trimise prin AJAX. / / Acesta returnează adevărat/fals în funcție de / dacă datele sunt valide și este completat / Matricea $arr este transmisă ca paramter / (notați și ampersand de mai sus) / Fie intrare validă, fie mesaje de eroare. */ $erori = array(); $date = array(); // Folosind funcția filter_input introdusă în PHP 5.2.0 if(!($data["email"] = filter_input(INPUT_POST,"email",FILTER_VALIDATE_EMAIL))) ( $errors["email"] = "Vă rugăm să introduceți un mesaj valid Email."; ) if(!($data["url"] = filter_input(INPUT_POST,"url",FILTER_VALIDATE_URL))) ( // Dacă câmpul URL nu se potrivește cu adresa URL greșită $url = ""; ) // Filtre de utilizare cu // funcție de apel invers personalizat: if(!($data["body"] = filter_input(INPUT_POST,"body",FILTER_CALLBACK, array("options" =>"Comment::validate_text")))) ( $ errors["body"] = "Eroare de comentariu."; ) if(!($data["name"] = filter_input(INPUT_POST,"name",FILTER_CALLBACK, array("options" =>"Comment::validate_text) ") ))) ( $errors["name"] = "Eroare de nume."; ) if(!empty($errors))( //Dacă există erori, scrieți $errors în tabloul $arr: $arr = $erori; returnează fals; ) foreach($date ca $k=>$v)( $arr[$k] = mysql_real_escape_string($v); ) // Asigurați-vă că literele sunt cu literele mici // (pentru corect el w Gravatar): $arr["email"] = strtolower(trim($arr["email"])); returnează adevărat; )

validate() este definit ca static în modul descris mai sus. Aceasta înseamnă că poate fi apelat direct ca Comment::validate() fără a fi nevoie să creați un obiect din această clasă. Această metodă nu este o validare a intrării, care este transmisă prin AJAX.

Această metodă utilizează noile funcții de filtrare care sunt disponibile în PHP 5.2.0. Acest lucru ne permite să validăm și să filtram cu ușurință orice intrare care este transmisă scriptului. De exemplu, filter_input(INPUT_POST, „URL”, FILTER_VALIDATE_URL) înseamnă că verificăm că $_POST[„url”] este o adresă URL validă. Dacă da, atunci funcția returnează valoarea variabilei, în caz contrar, returnările sunt false.

Acest lucru este foarte util, deoarece până acum, a trebuit să folosim propriile noastre expresii regulate pentru a valida datele. De asemenea, un alt avantaj este că aceste date sunt preluate înainte de orice transformări specifice configurației (cum ar fi ghilimele magice).

Avem, de asemenea, capacitatea de a specifica o funcție personalizată care va aplica câteva modificări mai avansate datelor, așa cum se vede în rândurile 31 și 37.

Comment.class.php - Pasul 3 funcție statică privată validate_text($str) ( /* / Această metodă este folosită intern ca FILTER_CALLBACK */ if(mb_strlen($str,"utf8") , ", etc...) și convertește // Simboluri linie nouăîn
tag-uri: $str = nl2br(htmlspecialchars($str)); // Eliminați liniile noi rămase $str = str_replace(array(chr(10),chr(13)),"",$str); returnează $str; )

Ultima metodă este validate_text , pe care o transmitem ca o funcție de apel invers. Acoperă totul Simboluri speciale HTML, privându-i efectiv de atacurile XSS. De asemenea, înlocuiește șirurile de caractere cu
linii.

Submit.php /* / Această matrice va fi completată fie cu / Datele care au fost trimise către script, fie / Mesaje de eroare: /*/ $arr = array(); $validates = Comentariu::validate($arr); if($validates) ( /* Totul este bine, introduceți în baza de date: */ mysql_query(" INSERT INTO comments(name,url,email,body) VALUES ("".$arr["nume"]."", " ".$arr["url"]."", "".$arr["email"]."", "".$arr["body"]."")"); $arr["dt " ] = data("r",time()); $arr["id"] = mysql_insert_id(); /* / Datele din $arr sunt inserate prin interogare, / dar text fără escape, / deci folosim bare oblice / pentru toate elementele matricei: /*/ $arr = array_map("stripslashes", $arr); $insertedComment = new Comment($arr); /* Marcaj de ieșire */ echo json_encode(array("status"=>1, "html " =>$insertedComment->markup())); ) else ( /* Tipăriți mesaje de eroare */ echo "("status":0,"erori":". json_encode($arr).")"; )

submit.php primește datele de comentariu ca o solicitare AJAX. Acesta îl validează și returnează un obiect JSON fie al marcajului XHTML care a fost redat cu succes, fie o listă de mesaje de eroare. jQuery folosește proprietatea status pentru a determina dacă să afișeze mesaje de eroare sau să adauge un comentariu de marcare a paginii.

Puteți vedea două exemple mai jos.

Pasul 1 - XHTML

În primul rând, să ne uităm la marcarea comentariilor. Acest cod este generat de PHP cu clasa cometariu .

demo.php

Nume de utilizator
30 iunie 2010

Text de comentariu

div avatar conține un link (dacă utilizatorul a introdus adresa URL corectă la postarea comentariului) și o imagine avatar pe care o obținem de la gravatar.com . Vom reveni la generarea markupului în pasul PHP. La final urmează div Nume div timp și comentariu text.

Un alt element important în XHTML este formularul de comentarii. Ea trimite cu POST. Toate câmpurile, cu excepția URL-ului, trebuie completate.

demo.php

Adauga un comentariu

Formularul este trimis folosind AJAX. Verificarea se efectuează în fundalîn trimite.php. Fiecare câmp are un element corespunzător eticheta, cu atribute setate pentru .

Pasul 2 - PHP

PHP se ocupă de comunicarea cu baza de date MySQL și generează marcajul pentru comentariu. De asemenea, primește sfârșitul solicitării AJAX și inserează datele comentariilor în tabel comentarii.

demo.php

/* / Selectați toate comentariile și completați tabloul $comments cu obiecte */ $comments = array(); $rezultat = mysql_query("SELECT * FROM comments ORDER BY id ASC"); while($row = mysql_fetch_assoc($result)) ($comments = new Comment($row); )

Interogarea MySQL selectează toate înregistrările din tabel și completează matricea $comentarii obiecte de clasă cometariu. Matrice dată ieșire mai departe când scriptul este executat.

demo.php

/* / Imprimați comentariile unul câte unul: */ foreach($comentarii ca $c)( echo $c->markup(); )

Fiecare comentariu are o metodă marcaj(), care generează codul HTML corect, gata să fie afișat pe pagină. Următoarele sunt definițiile clasei și metodei.

Clasa primește un rând din baza de date (obținut folosind mysql_fetch_assoc()) și stocați-l într-o variabilă $date. Este disponibil numai pentru metoda clasei.

comment.class.php - Partea 1

clasa Comentariu ( private $date = array(); public function __construct($row) ( /* / Constructor */ $this->data = $row; ) public function markup() ( /* / Aceasta metoda produce markup XHTML pentru */ // Setați un alias pentru a evita scrierea $this->data de fiecare dată: $d = &$this->data; $link_open = ""; $link_close = ""; if($d["url"] ) ( // Dacă a fost introdusă o adresă URL la adăugarea unui comentariu, // determinați etichetele link-ului de deschidere și de închidere $link_open = ""; $link_close = ""; ) // Convertiți ora în format UNIX: $d["dt" ] = strtotime ($d["dt"]); // Necesar pentru a seta imaginea implicită: $url = "http://".dirname($_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]) ."/ img/default_avatar.gif"; returnează "
„.$link_open”. „.$link_close.”
„.$link_open.$d[„nume”].$link_close.”
".date("d M Y",$d["dt"])."

„.$d[„corp”]”.

"; }

Scriptul folosește gravatar pentru a reprezenta avatarul în comentarii. Gravatar este un serviciu foarte util care potrivește un avatar cu o adresă de e-mail. Imaginea avatarului poate fi obținută cu ușurință prin trecerea funcției codificate md5() adresa ta de e-mail pe gravatar.com.

Scriptul determină adresa URL pe care este executat și determină adresa exactă a imaginii default_avatar.gif. Această imagine este transmisă în paralel cu hash-ul md5, iar dacă nu a fost găsit niciun avatar pentru adresa de e-mail dată, atunci va fi afișată o imagine alternativă.

comment.class.php - Partea 2

funcția publică statică validate(&$arr) ( /* / Această metodă este folosită pentru a valida datele trimise prin AJAX. / / Returnează adevărat/fals în funcție de validitatea datelor și completează / tabloul $arr, care este transmis ca parametru fie cu date, fie cu */ $errors = array(); $data = array(); // Folosiți funcția filter_input introdusă în PHP 5.2.0 if(!($data["email"] = filter_input(INPUT_POST) ,"email ",FILTER_VALIDATE_EMAIL))) ( $errors["email"] = "Vă rugăm introduceți un e-mail valid."; ) if(!($data["url"] = filter_input(INPUT_POST,"url",FILTER_VALIDATE_URL) )) ( // Dacă a fost introdusă o adresă URL nevalidă în câmpul URL, // procedați ca și cum nu ar fi fost introdusă nicio adresă URL: $url = ""; ) // Folosiți un filtru cu o funcție de apel invers: if(!($data[ "body"] = filter_input(INPUT_POST,"body",FILTER_CALLBACK,array("options" =>"Comment::validate_text")))) ( $errors["body"] = "Vă rugăm introduceți textul comentariului."; ) if(!( $date["nume"] = filter_input(INPUT_POST,"nam e",FILTER_CALLBACK,array("options" =>"Comment::validate_text")))) ( $errors["name"] = "Vă rugăm introduceți un nume."; ) if(!empty($errors))( // Dacă există erori, copiați tabloul $errors în $arr: $arr = $errors; return false; ) // Dacă introducerea este corectă, curățați datele și copiați-l în $arr : foreach($date ca $k=>$v)( $arr[$k] = mysql_real_escape_string($v); ) // e-mailul trebuie să fie litere mici: $arr["email"] = strtolower( trim($ arr["e-mail"])); returnează adevărat; )

Metodă valida()(de asemenea, parte a unei clase) este definită ca static. Aceasta înseamnă că poate fi apelat direct cu constructul comentariu::validate(), fără a crea un obiect de clasă. Această metodă validează datele care sunt transmise prin AJAX.

Metoda foloseste optiune noua filtrul, care a devenit disponibil în PHP 5.2.0. În acest fel putem verifica și filtra cu ușurință datele care sunt transmise scriptului. De exemplu, filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL)înseamnă că verificăm dacă $_POST[„url”] URL corectă. Dacă da, atunci funcția returnează valoarea variabilei, în caz contrar returnează valoarea fals.

Înainte de a utiliza o astfel de funcție, a fost necesar să se utilizeze expresii regulate pentru a valida datele (folosind o serie de constructe dacă). Un avantaj suplimentar este că obținem datele înainte de efectuarea oricăror transformări specifice.

De asemenea, este posibil să se definească o funcție care va efectua modificări suplimentare de date.

comment.class.php - Partea 3

funcție statică privată validate_text($str) ( /* / Această metodă este folosită ca FILTER_CALLBACK */ if(mb_strlen($str,"utf8")<1) return false; // Кодируем все специальные символы html (<, >, ", & .. etc) și convertiți // caracterul newline într-o etichetă
: $str = nl2br(htmlspecialchars($str)); // Eliminați orice linii noi rămase $str = str_replace(array(chr(10),chr(13)),"",$str); returnează $str; )

Ultima metoda validate_text transmisă ca funcție de returnare în două apeluri intrare_filtru. Convertește toate caracterele HTML speciale, care blochează efectiv atacurile XSS. De asemenea, înlocuiește liniile noi cu etichete
.

trimite.php

/* / Această matrice va fi completată fie cu date / care sunt transmise scriptului, fie cu mesaje de eroare. /*/ $arr = array(); $validates = Comentariu::validate($arr); if($validates) ( /* În regulă, introduceți date în baza de date: */ mysql_query(" INSERT INTO comments(name,url,email,body) VALUES ("".$arr["nume"]."", "".$arr["url"]."", "".$arr["email"]."", "".$arr["body"]."")"); $arr["dt "] = data("r",time()); $arr["id"] = mysql_insert_id(); /* / Datele din $arr sunt pregătite pentru interogarea mysql, / dar trebuie să le afișăm, deci / pregătim toate elementele din matrice: /*/ $arr = array_map("stripslashes",$arr); $insertedComment = new Comment($arr); /* Tipăriți marcajul comentariului tocmai inserat: */ echo json_encode (array("status "=>1,"html"=>$insertedComment->markup())); ) else ( /* Afișează mesaje de eroare */ echo "("stare":0,"erori":". json_encode($arr ).")"; )

trimite.php preia un comentariu din date printr-o solicitare AJAX. Îl validează și emite un obiect JSON care conține fie un marcaj XHTML cu un comentariu încorporat, fie o listă de erori. Proprietatea de utilizare jQuery stare pentru a determina ce ar trebui să fie afișat - fie un mesaj de eroare, fie adăugarea unui marcaj de comentariu pe pagină.

Mai jos sunt două exemple.

Răspuns de succes

( „starea”: 1, „html”: „Codul HTML al comentariului vine aici...” )

Proprietate html conține codul de comentariu.

Răspuns de eroare

( „stare”: 0, „erori”: ( „e-mail”: „Vă rugăm să introduceți un e-mail valid.”, „body”: „Vă rugăm să introduceți un corp de comentariu”, „nume”: „Vă rugăm să introduceți un nume.” ) )

Când există o eroare, jQuery parcurge obiectul erori și afișează mesaje lângă câmpurile care au erori.

Pasul 3 - CSS

Acum că marcajul este corect generat și afișat pe pagină, putem trece la stil.

styles.css - Partea 1

.comment, #addCommentContainer( /* Stil pentru comentarii */ padding:12px; width:400px; position:relative; background-color:#fcfcfc; border:1px solid white; color:#888; margin-bottom:25px; / * Colțuri și umbre rotunjite CSS3 */ -moz-border-radius:10px; -webkit-border-radius:10px; border-radius:10px; -moz-box-shadow:2px 2px 0 #c2c2c2; -webkit-box- shadow:2px 2px 0 #c2c2c2; box-shadow:2px 2px 0 #c2c2c2; ) .comment .avatar( /* / Avatarul este poziționat absolut. / Offset exterior pentru comentariul div /*/ înălțime: 50px; stânga:- 70px; poziție:absolut; lățime:50px; background:url("img/default_avatar.gif") no-repeat #fcfcfc; /* Centru vertical: */ margin-top:-25px; top:50%; -moz- box-shadow:1px 1px 0 #c2c2c2; -webkit-box-shadow:1px 1px 0 #c2c2c2; box-shadow:1px 1px 0 #c2c2c2; )

div .cometariu Și #addCommentContainer au acelasi stil. Mai multe reguli CSS3 sunt folosite pentru a rotunji colțurile și pentru a reflecta umbrele.

styles.css - Partea 2

.comment .avatar img( display:block; ) .comment .name( font-size:20px; padding-bottom:10px; color:#ccc; ) .comment .date( font-size:10px; padding:6px 0; poziție: absolut; dreapta:15px; sus:10px; culoare:#bbb; ) .comment p, #addCommentContainer p( font-size:18px; line-height:1.5; overflow-x:hidden; ) #addCommentContainer intrare, # addCommentContainer textarea( /* Stil de intrare */ display:block; border:1px solid #ccc; margin:5px 0 5px; padding:3px; font-size:12px; color:#555; font-family:Arial, Helvetica, sans -serif; ) #addCommentContainer textarea( width:300px; ) label( font-size:10px; ) label span.error( color:red; position:relative; right:-10px; ) #submit( /* Butonul „Trimite” " */ background-color:#58B9EB; border:1px solid #40A2D4; color:#FFFFFF; cursor:pointer; font-family:"Myriad Pro",Arial,Helvetica,sans-serif; font-size:14px; font -weight:bold; padding:4px; margin-top:5px; -moz-border-radius:4px; -webkit-border-radius:4px; border-radius:4px; ) #s ubmit:hover( culoarea de fundal:#80cdf5; culoare-chenar:#52b1e2; )

În a doua parte, setăm stilurile pentru comentarii și elemente de formular. Să notăm selectorul intrare, care evidenţiază elemente în funcţie de un atribut tip.

Pasul 4 - jQuery

Acum să trecem la jQuery.

script.js

$(document).ready(function()( /* Următorul cod este executat numai după ce DOM-ul este încărcat */ /* Acest flag împiedică trimiterea mai multor comentarii: */ var working = false; /* Prinderea formularului de trimitere eveniment: */ $(" #addCommentForm").submit(function(e)( e.preventDefault(); if(working) return false; working = true; $("#submit").val("Working.. "); $("span .error").remove(); /* Trimiteți câmpuri de formular la submit.php: */ $.post("submit.php",$(this).serialize(),function(msg )( working = false; $ ("#submit").val("Submit"); if(msg.status)( /* / Dacă inserarea a avut succes, adăugați un comentariu / sub ultimul de pe pagină cu un efect slideDown /*/ $(msg.html).hide ().insertBefore("#addCommentContainer").slideDown(); $("#body").val(""); ) else ( /* / Dacă există sunt erori, parcurgeți obiectul / msg.errors și trimiteți-le în pagina /*/ $.each(msg.errors,function(k,v)( $("label").append(" „+v+”"); )); ) ),"json"); )); ));

Folosim un apel de funcție $(document).gata() A care leagă o funcție de eveniment. Variabil lucru acționează ca un flag care semnalează că o solicitare AJAX este în curs (prevenind astfel duplicarea aceluiași comentariu).

În funcția de returnare pentru cererea POST AJAX, verificăm proprietatea stare pentru a determina dacă comentariul a fost introdus cu succes. Dacă da, adăugăm markupul rezultat în pagină după ultimul comentariu cu animație glisați în jos.

Dacă au existat probleme, atunci afișăm mesaje de eroare prin adăugare span eroare la elementul corespunzător eticheta(atributul elementului eticheta conţine id intrare care are o eroare).

Gata!

Concluzie

Pentru a rula scriptul pe serverul dvs. trebuie să creați un tabel comentarii în baza ta de date MySQL. Puteți face acest lucru cu codul SQL din fișier tabel.sql, care trebuie introdus în fila SQL din phpMyAdmin. Apoi trebuie să setați parametrii de conectare la baza de date MySQL în fișier conectați.php .

Sincer să fiu, când am văzut că scriu despre asta și sfătuiesc nou-veniți pe alte site-uri, am fost puțin îngrozit și am decis să-mi depun nota pe această temă fără un defect fatal. Practic, am văzut bucăți lungi de cod care se implementează adăugarea de comentarii pe site. De obicei, se creează un formular pentru aceasta, sunt implementate procesarea, salvarea, precum și selecțiile pentru afișare. Dar avantajele acestei abordări cu cât mai departe, cu atât mai puțin.

În această postare, veți învăța una dintre cele mai simple (dar subiectiv una dintre cele mai preferate) moduri de a adăuga comentarii pe un site - un exemplu simplu pentru începători + opțiuni pentru webmasteri mai avansați.

Într-adevăr, de ce să reinventăm roata și să scriem o grămadă de coduri care vor mai trebui suportate, reparate etc. în viitor, dacă există o grămadă de soluții gata făcute de la servicii terțe (vorbim despre în rețelele sociale + discuri)?

Dar înainte de a trece la implementarea efectivă, să ne uităm la avantajele / dezavantajele utilizării soluțiilor gata făcute. (Dacă ați uitat ceva - scrieți în comentarii - vom extinde lista)

Beneficiile soluțiilor terților:

  • Ușurință de implementare.
  • Protecția împotriva spamului „din cutie” (în soluția mea, ar trebui să implementez acest lucru suplimentar, deci, teoretic, este legat de paragraful anterior).
  • Mai puțin predispus la bug-uri, bug-uri etc., deoarece soluțiile terțe au fost testate de milioane de utilizatori (din nou legat de primul: puteți scrie totul fără bug-uri, dar va dura mai mult timp pentru depanare).
  • De regulă, serviciile oferă un panou de administrare gata făcut, statistici, notificări pentru administratori, uneori moderare, mai mulți administratori, pre-moderare etc., ceea ce poate dura luni, dacă nu ani, pentru ca un webmaster, mai ales un începător, să implementează.
  • Utilizatorul nu trebuie să se înregistreze, să-și introducă numele etc. - se presupune că are deja un cont în populara rețea socială.
  • Cel mai probabil, va rezista la o sarcină mare datorită faptului că socialul. Platformele au fost proiectate inițial pentru sarcini grele.

Dezavantaje:

  • Lipsa slabă sau completă a capacității de a schimba aspectul blocului cu comentarii.
  • Indexarea în motoarele de căutare.

După cum puteți vedea, există multe alte beneficii. Incapacitatea de a schimba aspectul se face cel mai probabil pentru a recunoaște stilul serviciului de comentarii, creând astfel o publicitate discretă. (Ca una dintre opțiuni). În ceea ce privește indexarea, este chiar atât de important, deoarece nu toate comentariile au o încărcătură semantică.

Dar destulă teorie, să trecem la practică.

1. Cea mai simplă opțiune este să adăugați comentarii folosind o rețea socială selectată.

De exemplu vk. Ne uităm la documentație. Copiați codul furnizat și adăugați-l în pagină (piesele de cod sunt preluate din docuri prin referință, se pot schimba în viitor, deci copiați întotdeauna de pe site-ul de documentație. Iată doar un exemplu posibil):

1) Adăugați la :

2) Adăugați în locul unde vrem să vedem widgetul de comentarii (de exemplu, după notă, dacă vorbim despre un blog):

2. Adăugați widget-uri din mai multe servicii. De exemplu, ca pe această resursă. Comutați filele:


Adăugăm la marcaj (pentru lucrul corect, trebuie conectat twitter bootstrap!) în locul în care doriți să afișați widget de comentarii:

Dar această opțiune nu este cea mai bună, deși cea mai ușoară. Problema este că, cu această abordare, toate widget-urile vor fi inițializate atunci când pagina se încarcă, indiferent dacă utilizatorul are nevoie sau nu de ele.

Acest lucru poate fi evitat prin implementare inițializarea leneșă a widget-urilor de comentarii. Mai întâi întregul cod, apoi explicația:

(funcție(global, $) ( "utilizați strict"; $(funcție() ( var $tabToggler, initComments, inițializat; inițializat = ( "#vk-comments": false, "#disqus_thread": false); initComments = funcție (type) ( var discuteUserName, disqus_config, pageUrl; if (inițializat) ( return; ) pageUrl = "page_url"; comutați (type) (case "#disqus_thread": // Trebuie să setați acesti parametri folosind platforma dvs. corespunzătoare mod discutaUserName = "discussUserName"; disqus_config = function() ( this.page.url = pageUrl; return this.page.identifier = "page_identifier"; ); (function() ( var d, s; ​​​​d = document; s = d.createElement("script"); s.src = "//" + discussUserName + ".disqus.com/embed.js"; s.setAttribute("data-timestamp", +new Date()); return ( d.head || d.body).appendChild(s); ))(); break; case „#vk-comments”: VK.Widgets.Comments(„vk-comments”, (limită: 5, atașați : " *", pageUrl: pageUrl )); break; implicit: return; ) initialized = true; ); $tabToggler = $(".comments-wrapper a" ); $tabToggler.on("show.bs.tab", function(e) ( initComments($(e.target).attr("href")); )); initComments($tabToggler.closest(".active").find("a").attr("href")); )); ))(fereastră, jQuery);

Acordați atenție variabilelor a căror valoare trebuie să o pregătiți folosind metodele oferite de platforma dumneavoastră.

Mai întâi creăm o mapare a tipului widget-uri de comentarii, variabil initializat. În continuare, funcția initComments(tip) permite inițializați widget de comentarii, și nu face nimic dacă a fost deja inițializat.

Și atingerea finală - inițializați widgetul de comentarii implicit, astfel încât să fie afișat imediat după încărcarea paginii.

Script gata activat și coffeescript pe esențial. Un exemplu de lucru este mai jos (exemplele de cod sunt preluate de pe acest site)