Aceasta este a doua parte a seriei despre dezvoltarea unui plug-in quiz pentru WordPress. În prima parte am creat backend-ul pluginului nostru pentru a captura datele necesare pentru a fi stocate în baza de date.
În această ultimă parte, vom crea frontendul pluginului, în care utilizatorii pot lua chestionare și își vor putea evalua cunoștințele.
Următoarele subiecte vor fi acoperite în această parte a completării plugin-ului nostru:
Vom avea nevoie de o mulțime de întrebări în backend pentru a genera chestionare aleatorii. Sper că ați lucrat deja cu backend-ul și ați stocat suficiente întrebări pentru chestionare.
Deci sa începem.
Mai întâi ar trebui să avem un post sau o pagină care să încarce elementele de afișare ale testului. Acest lucru se poate realiza utilizând fie un cod scurt, fie un șablon de pagină. În acest plugin, un scurtcod va fi folosit pentru al face independent de temă.
Codurile scurte ne permit să folosim pluginul ca o componentă independentă, în timp ce șabloanele de pagină depind de temă. Pe de altă parte, un șablon de pagină este mult mai sigur decât codurile scurte, deoarece există posibilitatea de a șterge din greșeală codurile scurte din pagini.Inițial, codul scurt trebuie să trimită categoriile de chei disponibile, astfel încât utilizatorii să poată selecta o categorie pentru a genera testul. Un cod scurt va fi adăugat în constructor folosind add_shortcode
funcția indicată în codul următor.
add_shortcode ('wpq_show_quiz', array ($ this, 'wpq_show_quiz'));
Acum, să examinăm implementarea codului scurt prin preluarea categoriilor de chei disponibile din baza de date.
funcția wpq_show_quiz ($ atts) global $ post; $ html = '„;
Vom folosi o listă neordonată numită cursor
ca recipient pentru Rhino Slider. Inițial vom include setul de întrebări și răspunsuri generate în interiorul bucla, folosind $ questions_str
. Acesta va conține o colecție de elemente de listă.
Apoi trebuie să creați manual un alt element de listă pentru a afișa rezultatele testului și scorul.
Acum sunt configurate toate datele și diapozitivele necesare pentru aplicația de test. Putem inițializa Rhino Slider în quiz.js pentru a vedea testul în acțiune.
jQuery (document) .ready (functie ($) $ ('# slider').
Am folosit câteva stiluri personalizate CSS pentru a îmbunătăți aspectul. Puteți găsi toate CSS modificate sub wp_quiz
secțiunea din rhinoslider-1.05.css fişier. Acum ar trebui să aveți ceva asemănător imaginii următoare.
Odată ce testul este încărcat, puteți utiliza comenzile de navigare pentru a vă deplasa între întrebări și selectați răspunsurile. Ar trebui să faceți clic pe butonul "Obțineți rezultate" după ce toate întrebările sunt răspunse. Acum trebuie să creăm rezultatele testului folosind o solicitare AJAX.
Să implementăm codul jQuery pentru a face cererea AJAX.
$ ("# completeQuiz") faceți clic pe (funcția () wpq_quiz_results ();); Var wpq_quiz_results = funcție () var select_answers = ; $ (this) .attr ("date-quiz-id"); var select_answer = $ (this) .find ('input [type = radio] : select_answer.length! = 0) var select_answer = $ (selected_answer) .val (); select_answers ["qid _" + question_id] = select_answer; altceva selected_answers ["qid _" + question_id] = ";); // Cerere AJAX;
După ce faceți clic pe butonul "Obțineți rezultate", sunăm wpq_quiz_results
funcția folosind jQuery. Fiecare întrebare a fost adăugată la cursorul cu o clasă specială CSS numită ques_answers
.
În timpul trecerii prin fiecare element cu ques_answers
, vom prelua ID-ul întrebării utilizând atributul de date HTML numit date-test-id
și butonul radio selectat utilizând jQuery.
În final, atribuim toate întrebările și răspunsurile selectate într-un tabel numit selected_answers
, pentru a fi transmise în cererea AJAX.
Uitați-vă la următorul cod pentru implementarea solicitării AJAX.
$ .post (quiz.ajaxURL, acțiune: "get_quiz_results", nonce: quiz.quizNonce, date: selected_answers,, funcția (data) // codul de gestionare a rezultatelor AJAX, "json");
Mai întâi vom crea cererea AJAX utilizând datele de configurare atribuite de la wpq_frontend_scripts
funcţie. Lista de răspunsuri generată în secțiunea anterioară va fi trimisă ca parametru de date. Înainte de a manipula rezultatul, trebuie să examinăm implementarea codului lateral al serverului în secțiunea următoare.
Mai întâi trebuie să actualizăm constructorul cu acțiunile necesare pentru utilizarea AJAX atât pentru utilizatorii conectați, cât și pentru utilizatorii obișnuiți, așa cum se arată în codul următor.
add_action ('wp_ajax_nopriv_get_quiz_results', array ($ this, 'get_quiz_results')); add_action ('wp_ajax_get_quiz_results', array ($ this, 'get_quiz_results'));
Apoi putem trece la punerea în aplicare a get_quiz_results
după cum se arată în codul următor.
funcția get_quiz_results () $ score = 0; $ question_answers = $ _POST ["date"]; $ question_results = array (); foreach ($ question_answers ca $ ques_id => $ answer) $ question_id = trim (str_replace ('qid_', '$ ques_id)).', '; $ correct_answer = get_post_meta ($ question_id,' _question_correct_answer ', true); dacă $ answer == $ correct_answer) $ scor ++; $ question_results ["$ question_id"] = array ("answer" => $ answer, "correct_answer" => $ correct_answer, "mark" => "corect"); altfel $ question_results ["$ question_id"] = array ("answer" => $ answer, "correct_answer" => $ correct_answer, "mark" => "incorect"); $ total_questions = count ($ question_answers) ; $ quiz_result_data = array ("total_questions" => $ total_questions, "score" => scor $, "result" => $ question_results); echo json_encode ($ quiz_result_data);
Cod Explicație
$ _POST
mulțime.qid_
prefix.get_post_meta
funcţie.$ question_results
pe baza statutului rezultatului.scor $
variabil.$ quiz_result_data
array să fie trimis ca răspuns.Până acum, am creat solicitarea AJAX și am implementat răspunsul la server. În următoarea secțiune vom finaliza procesul de generare a rezultatelor testului prin gestionarea răspunsului AJAX.
În partea de tratare a răspunsului, avem câteva sarcini, inclusiv afișarea rezultatelor testului și a scorurilor. Deci, voi separa codul în câteva secțiuni pentru a clarifica explicația. Luați în considerare următorul cod care conține cererea AJAX completă.
$ .post (quiz.ajaxURL, acțiune: 'get_quiz_results', nonce: quiz.quizNonce, date: selected_answers, funcția (data) // Secțiunea 1 var total_questions = date.total_questions; $ ('# slider'). date ('rhinoslider') următorul ($ ('rhino-item' + total_questions)); '
Întrebare | Răspuns | Răspuns corect | Rezultat |
'+ quiz_index +' | '+ ques.answer +' | '+ ques.correct_answer +' | „; result_html + = '|
„; result_html + = ' |