SlideShare a Scribd company logo
1 of 18
Lär dig ajaxifiera dina tillägg med jQuery
      Bygg ett säkert röstningstillägg med jQuery




Kristian Erendi
Reptilo.se
Reptilo WordPressbyrå
•   Kristian Erendi
•   @kaptenkrillo
•   kristian@reptilo.se
•   http://www.linkedin.com/in/kristianerendi
•   http://reptilo.se
Syftet med denna presentation

•   Grundläggande förståelse för plugin och jQuery
•   Hooks
•   Shortcodes
•   Gettext – Internationalization eller i18n
•   Ajaxapi - webbsida
•   Nonce – WP rekommenderade säkerhet
•   jQuery
reptilo-vote
• En liten ajax-baserad plugin
• jQuery - javascript bibliotek
• Prova den live på:
  http://reptilo.se/reptilo-vote-plugin/
6
           Hook – add_action
• Lägger till script i HTLM-headern med
  wp_enqueue_scripts
Shortcode
Sidan är laddad hos klienten
• Med aktuell statistik från databasen
Ajax-API
9

•   Ajaxanrop gör man till en publik webbsida
•   http://reptilo.se/wp-content/plugins/reptilo-vote/api/vote.php
•   Läser wp-config – så att allt i WP är tillgängligt
•   Returnerar data i json

OBS webbsidan manipulerar databasen, detta kräver
  säkerhet!
1. Stoppa sql-injection, filtrera parametrarna
2. Kontrollera varifrån anropet kommer, referer
3. WP-nonce
WP-Nonce
Nonce:
• klockslag
• unik sträng
• saltet i wp-config.php
• giltig i 24h
• 837d46052a

Skapa nonce på webbsidan innan man skickar posten
wp_create_nonce(’reptilo-vote’. $post->ID);


Ta emot nonce på servern och validera den
check_ajax_referer('reptilo-vote’ . $_REQUEST['postid'],
api/vote.php - Ajax api
Ajaxsvaret som en array i json
jQuery-koden
14
            Vad jQuery-koden gör
1.    Fångar klick på Ja eller Nej
2.    Postparametrar (Ja/nej, post_id, WP_nonce)
3.    Ajaxanropet
4.    Uppdaterar HTML (siffrorna, klickmöjlighet)
5.    Byter färg med CSS
Kort om klassen
• wp_postmeta tabellen för att spara data
get_post_meta($this->postId,…
update_post_meta($this->postId,…

• Räkna ut statistiken när den skapas! Inte när den
  behövs vid sidladdningen
• spara färdig statistik och data i db
get_option("reptiloVoteStats");
update_option('reptiloVoteStats’…
Internationalization – i18n
• Alla texter ska vara översättningsbara
• WP använder gettext
• CodeStylingLocalization – plugin för överättn
• Presentationen:
  http://reptilo.se/reptilo-vote-plugin/

• Plugin-koden:
https://github.com/reptilo/reptilo-vote
Frågor?
Kristian Erendi
kristian@reptilo.se
@kaptenkrillo

More Related Content

Similar to Lär dig ajaxifiera dina tillägg med jQuery

Molntjänster som it superhjältar
Molntjänster som it superhjältarMolntjänster som it superhjältar
Molntjänster som it superhjältarPer Åström
 
HT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appHT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appAnton Tibblin
 
VT2019 - DA355A - jQuery och Ajax
VT2019 - DA355A - jQuery och AjaxVT2019 - DA355A - jQuery och Ajax
VT2019 - DA355A - jQuery och AjaxAnton Tibblin
 
Mindre och snabbare – Cache tips for WordPress developers
Mindre och snabbare – Cache tips for WordPress developersMindre och snabbare – Cache tips for WordPress developers
Mindre och snabbare – Cache tips for WordPress developersSeravo
 
VT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & BootstrapVT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & BootstrapAnton Tibblin
 
VT16 - DA355A - Geolocation & media
VT16 - DA355A - Geolocation & mediaVT16 - DA355A - Geolocation & media
VT16 - DA355A - Geolocation & mediaAnton Tibblin
 
HT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonHT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonAnton Tibblin
 
HT16 - DA156A - Introduktion till JavaScript
HT16 - DA156A - Introduktion till JavaScriptHT16 - DA156A - Introduktion till JavaScript
HT16 - DA156A - Introduktion till JavaScriptAnton Tibblin
 
VT2019 - DA355A - JS-ramverk
VT2019 - DA355A - JS-ramverkVT2019 - DA355A - JS-ramverk
VT2019 - DA355A - JS-ramverkAnton Tibblin
 
Tjejer Kodar 100 - Dag 4 - Django
Tjejer Kodar 100 - Dag 4 - DjangoTjejer Kodar 100 - Dag 4 - Django
Tjejer Kodar 100 - Dag 4 - DjangoEmil Stenström
 
HT17 - DA156A - Sammanfattning av kursen
HT17 - DA156A - Sammanfattning av kursenHT17 - DA156A - Sammanfattning av kursen
HT17 - DA156A - Sammanfattning av kursenAnton Tibblin
 
Varje resa börjar med ett litet steg (internetdagarna 2011)
Varje resa börjar med ett litet steg (internetdagarna 2011)Varje resa börjar med ett litet steg (internetdagarna 2011)
Varje resa börjar med ett litet steg (internetdagarna 2011)Per Åström
 
Tre sårbarheter i webbappar
Tre sårbarheter i webbapparTre sårbarheter i webbappar
Tre sårbarheter i webbapparjohnwilander
 
Hur man kan testa sin HTTPS-server
Hur man kan testa sin HTTPS-serverHur man kan testa sin HTTPS-server
Hur man kan testa sin HTTPS-serverMichael Boman
 

Similar to Lär dig ajaxifiera dina tillägg med jQuery (16)

Molntjänster som it superhjältar
Molntjänster som it superhjältarMolntjänster som it superhjältar
Molntjänster som it superhjältar
 
HT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appHT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web app
 
jQuery and Ajax
jQuery and AjaxjQuery and Ajax
jQuery and Ajax
 
VT2019 - DA355A - jQuery och Ajax
VT2019 - DA355A - jQuery och AjaxVT2019 - DA355A - jQuery och Ajax
VT2019 - DA355A - jQuery och Ajax
 
Mindre och snabbare – Cache tips for WordPress developers
Mindre och snabbare – Cache tips for WordPress developersMindre och snabbare – Cache tips for WordPress developers
Mindre och snabbare – Cache tips for WordPress developers
 
VT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & BootstrapVT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & Bootstrap
 
VT16 - DA355A - Geolocation & media
VT16 - DA355A - Geolocation & mediaVT16 - DA355A - Geolocation & media
VT16 - DA355A - Geolocation & media
 
HT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonHT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med Python
 
HT16 - DA156A - Introduktion till JavaScript
HT16 - DA156A - Introduktion till JavaScriptHT16 - DA156A - Introduktion till JavaScript
HT16 - DA156A - Introduktion till JavaScript
 
OPTIMERA STHLM! Loadimpact
OPTIMERA STHLM! LoadimpactOPTIMERA STHLM! Loadimpact
OPTIMERA STHLM! Loadimpact
 
VT2019 - DA355A - JS-ramverk
VT2019 - DA355A - JS-ramverkVT2019 - DA355A - JS-ramverk
VT2019 - DA355A - JS-ramverk
 
Tjejer Kodar 100 - Dag 4 - Django
Tjejer Kodar 100 - Dag 4 - DjangoTjejer Kodar 100 - Dag 4 - Django
Tjejer Kodar 100 - Dag 4 - Django
 
HT17 - DA156A - Sammanfattning av kursen
HT17 - DA156A - Sammanfattning av kursenHT17 - DA156A - Sammanfattning av kursen
HT17 - DA156A - Sammanfattning av kursen
 
Varje resa börjar med ett litet steg (internetdagarna 2011)
Varje resa börjar med ett litet steg (internetdagarna 2011)Varje resa börjar med ett litet steg (internetdagarna 2011)
Varje resa börjar med ett litet steg (internetdagarna 2011)
 
Tre sårbarheter i webbappar
Tre sårbarheter i webbapparTre sårbarheter i webbappar
Tre sårbarheter i webbappar
 
Hur man kan testa sin HTTPS-server
Hur man kan testa sin HTTPS-serverHur man kan testa sin HTTPS-server
Hur man kan testa sin HTTPS-server
 

More from tdhftw

Den mobila webben, av Peter Frey
Den mobila webben, av Peter FreyDen mobila webben, av Peter Frey
Den mobila webben, av Peter Freytdhftw
 
En dag med WordPress
En dag med WordPressEn dag med WordPress
En dag med WordPresstdhftw
 
Det är innehållet som räknas
Det är innehållet som räknasDet är innehållet som räknas
Det är innehållet som räknastdhftw
 
I don't care what fucking platform you're using
I don't care what fucking platform you're usingI don't care what fucking platform you're using
I don't care what fucking platform you're usingtdhftw
 
#wpsthlm: WordPress prestanda - av Jonas Lejon
#wpsthlm: WordPress prestanda - av Jonas Lejon#wpsthlm: WordPress prestanda - av Jonas Lejon
#wpsthlm: WordPress prestanda - av Jonas Lejontdhftw
 
#wpbar fem
#wpbar fem#wpbar fem
#wpbar femtdhftw
 
WordPress i Sverige
WordPress i SverigeWordPress i Sverige
WordPress i Sverigetdhftw
 

More from tdhftw (7)

Den mobila webben, av Peter Frey
Den mobila webben, av Peter FreyDen mobila webben, av Peter Frey
Den mobila webben, av Peter Frey
 
En dag med WordPress
En dag med WordPressEn dag med WordPress
En dag med WordPress
 
Det är innehållet som räknas
Det är innehållet som räknasDet är innehållet som räknas
Det är innehållet som räknas
 
I don't care what fucking platform you're using
I don't care what fucking platform you're usingI don't care what fucking platform you're using
I don't care what fucking platform you're using
 
#wpsthlm: WordPress prestanda - av Jonas Lejon
#wpsthlm: WordPress prestanda - av Jonas Lejon#wpsthlm: WordPress prestanda - av Jonas Lejon
#wpsthlm: WordPress prestanda - av Jonas Lejon
 
#wpbar fem
#wpbar fem#wpbar fem
#wpbar fem
 
WordPress i Sverige
WordPress i SverigeWordPress i Sverige
WordPress i Sverige
 

Lär dig ajaxifiera dina tillägg med jQuery

  • 1. Lär dig ajaxifiera dina tillägg med jQuery Bygg ett säkert röstningstillägg med jQuery Kristian Erendi Reptilo.se
  • 2. Reptilo WordPressbyrå • Kristian Erendi • @kaptenkrillo • kristian@reptilo.se • http://www.linkedin.com/in/kristianerendi • http://reptilo.se
  • 3. Syftet med denna presentation • Grundläggande förståelse för plugin och jQuery • Hooks • Shortcodes • Gettext – Internationalization eller i18n • Ajaxapi - webbsida • Nonce – WP rekommenderade säkerhet • jQuery
  • 4. reptilo-vote • En liten ajax-baserad plugin • jQuery - javascript bibliotek • Prova den live på: http://reptilo.se/reptilo-vote-plugin/
  • 5.
  • 6. 6 Hook – add_action • Lägger till script i HTLM-headern med wp_enqueue_scripts
  • 8. Sidan är laddad hos klienten • Med aktuell statistik från databasen
  • 9. Ajax-API 9 • Ajaxanrop gör man till en publik webbsida • http://reptilo.se/wp-content/plugins/reptilo-vote/api/vote.php • Läser wp-config – så att allt i WP är tillgängligt • Returnerar data i json OBS webbsidan manipulerar databasen, detta kräver säkerhet! 1. Stoppa sql-injection, filtrera parametrarna 2. Kontrollera varifrån anropet kommer, referer 3. WP-nonce
  • 10. WP-Nonce Nonce: • klockslag • unik sträng • saltet i wp-config.php • giltig i 24h • 837d46052a Skapa nonce på webbsidan innan man skickar posten wp_create_nonce(’reptilo-vote’. $post->ID); Ta emot nonce på servern och validera den check_ajax_referer('reptilo-vote’ . $_REQUEST['postid'],
  • 12. Ajaxsvaret som en array i json
  • 14. 14 Vad jQuery-koden gör 1. Fångar klick på Ja eller Nej 2. Postparametrar (Ja/nej, post_id, WP_nonce) 3. Ajaxanropet 4. Uppdaterar HTML (siffrorna, klickmöjlighet) 5. Byter färg med CSS
  • 15. Kort om klassen • wp_postmeta tabellen för att spara data get_post_meta($this->postId,… update_post_meta($this->postId,… • Räkna ut statistiken när den skapas! Inte när den behövs vid sidladdningen • spara färdig statistik och data i db get_option("reptiloVoteStats"); update_option('reptiloVoteStats’…
  • 16. Internationalization – i18n • Alla texter ska vara översättningsbara • WP använder gettext • CodeStylingLocalization – plugin för överättn
  • 17. • Presentationen: http://reptilo.se/reptilo-vote-plugin/ • Plugin-koden: https://github.com/reptilo/reptilo-vote

Editor's Notes

  1. Tanken är att alla ni som sitter här ska kunna göra enganajaxbaseradeplugins efter denna session. Allt ska bli solklart för er!
  2. Jag heter Egen firma sedan 1 årJobbar framför allt åt webbyråer extra resurserwp sedan 2008 Webb sedan 1998 programmering sedan 1995
  3. Tanken är att ni alla ska förstå hur man bör skriva en pluginjQuery hur lite kod det krävs för att göra så mycket och hur man kan tänka.
  4. Det enda den gör är att lägga till den här lilla rutan där man kan rata inläggetLiten plugin men visar tydligt hur man ska använda ajax och jQurey för att få en skön interaktion
  5. Måste förstå hur WP och plugins jobbarMin plugin besår av 4 delarPublik websidask APIHook - wp_enqueue_scriptsShortcode – All kod i klassen, snyggt och även säkerställa unika funktionsnamnGetext - språkhanteringHook - wp_enqueue_scripts - lägger till CSS-fil och länk till jQuery i HTML-headernShortcode –skapar en instans av klassen som hämtar data från databasen och skriver in HTML och javascript på webbsidanKlickar på JA eller NEJ kommer att fångas av jQuery på HTML-sidan som sen gör ett ajaxanrop till vårt API den publika webbsidanSkapar en ny instans av klassen ReptiloVote som räknar lite och skickar svar som ett jsonobjektjQurey uppdaterar sidanHookShortcodeAjax apiKlassen jQueryGettext - språkhantering
  6. *Avregistrerar alla jquery skriptHämtar den senaste versionen från jquery.comHär kan man diskutera varifrån man ska hämta jQuery biblioteket… googleapi,jquery eller från egen server!!!! Men den diskusionen kan vi ta senareLägger till en css-filDessa kommer att skrivas ut iHRML-headern
  7. Såhär ser att vanligt inlägg ut i adminSåhär lite kod krävs för en shortcodeDet enda som händer här är man gör en ny instans av klassen och anropar en funktionincludeCode()Funktionen hämtar data från db och bygger HTML och jQuerykod som sen retruneras och skrivs till sidan
  8. Såhär ser resultatet utKlicka på en av JA eller NEJ så börjar jQuery-scriptet att jobba
  9. Manilpulerar databasen - VAR FÖRSIKTIG!Jag kollar parametrar mot SQL-injections med - addslashes, det slår sönder sql satsen jag kollar att anropet kommer från samma domän som wordpress är installerad på man kan naturligtvis spoofahostenJson standardiserat sätt att serialisera dataWP-nonce är en unik nyckel som gäller i 24h, den baseras på KlockslagSaltet i WP-configValfri textsträng, som bör sättas ihop med texpostidFunkar dåligt för denna pluginen då det alltid är samma postid och blir således lätt att sniffa…I denna pluginen gör det skillnad hur många gånger man laddar sidan, inte i vanliga fall
  10. Wordpress vill att man ska använda Nonce varje gång man skickar en form eller gör ett ajaxanropNonce är en kod som är giltlg i 24 timmar * Eftersom saltet är unikt för varje wp-installation och strängen gör vi unik genom att lägga på post_Id, då validerar bara noncen bara för denna just denna requestI mitt fall hjälper den inte alls, för om man vill sabotera så är det just på en och samma sida som man vill skicka requesten
  11. Läs wp-configKolla Nonce, check_ajax_refererjag kollar att anropet kommer från samma domän som wordpress är installerad på (HTTP_REFERER)Tar emot parametrarna ochkollar mot SQL-injections med - addslashes, det slår sönder sql satsen
  12. Här skickar vi data som en array och json-encodeatI Firebug – konsol ser vi svaret
  13. noConflict för att det inte ska krocka med andra javascriptbilbliotekConsolen kan vara bra att ha under utveckling, man kan se utskriften i konsolen i texFirebugIE brukar bomba om man har kvar console.log() Ändra färg med nya css:eruppdatera tooltipTa bort klickmöjligheten på länkenObs datat kommer tillbaks som en array i json-format
  14. Initierar klassen med postidVäldigt enkelt att jobba med wp_postmeta tabellenEn snabb plugin – räkna ut statistikenGenerell data ska spars i wp_options tabellen
  15. Registrera språkfilerna i WP, unik sträng för just min plugin och var filerna ligger på filsystemetSåhär skriver man texterna, så att de blir översättningabara