Copernica Marketing Software - Presentatie Copernica Developers training

1,001 views

Published on

Presentatie Fundamentals training tijdens het Copernica seminar van 10 november 2009 in Eindhoven

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,001
On SlideShare
0
From Embeds
0
Number of Embeds
139
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Copernica Marketing Software - Presentatie Copernica Developers training

  1. 1. Developer training Copernica Marketing Software Dinsdag 10 november 2009 Emiel Bruijntjes
  2. 2. <ul><li>Onderwerpen </li></ul><ul><li>Ontwikkelen van HTML templates </li></ul><ul><li>Personaliseren </li></ul><ul><li>Inladen en vormgeven van externe content in nieuwsbrieven </li></ul><ul><li>Aanroepen van de POM SOAP API </li></ul><ul><li>Expressies en condities </li></ul>
  3. 3. <ul><li>HTML Templates </li></ul><ul><li>Copernica kent geen HTML beperkingen ... </li></ul><ul><li>… maar e-mailprogramma's wel! </li></ul>
  4. 4. <ul><li>Een paar HTML adviezen </li></ul><ul><li>Gebruik eenvoudige HTML (versie 1.0) </li></ul><ul><li>Layout met tabllen </li></ul><ul><li>Vermijd achtergronden </li></ul><ul><li>Geen floating of gepositioneerde images </li></ul><ul><li>Geen onbekende lettertypes </li></ul><ul><li>Geen style blocks, geen externe stylesheets </li></ul>
  5. 5. <ul><li>Tip: omzetten van style blokken </li></ul><ul><li><style> </li></ul><ul><li>div { </li></ul><ul><li>font-weight: bold; </li></ul><ul><li>} </li></ul><ul><li></style> </li></ul><ul><li><div style=”font-weight: bold;”>abc</div> </li></ul><ul><li><b>abc</b> </li></ul>
  6. 6. <ul><li>Afbeeldingen en bestanden </li></ul><ul><li><img src=”bestand.gif”> </li></ul><ul><li><script src=”voorbeeld.js”></script> </li></ul><ul><li><link rel=”stylesheet” type=”text/css” href=”style.css”/> </li></ul>
  7. 7. <ul><li>Ruimte reserveren voor content </li></ul><ul><li>[text name=”naam_van_blok”] </li></ul><ul><li>[image name=”naam_van_blok”] </li></ul><ul><li>[loop name=”naam_van_blok”]...[/loop] </li></ul>
  8. 8. <ul><li>Punten van aandacht </li></ul><ul><li>Gebruik unieke namen voor de blokken </li></ul><ul><li>Gebruik [ldelim] en [rdelim] voor [ en ] </li></ul><ul><li>De blokken kennen verschillende attributen </li></ul>
  9. 9. Loop in een template [loop name=”voorbeeld”] <div> <b>Deze code wordt herhaald</b> </div> [/loop]
  10. 10. Geneste loops [loop name=”voorbeeld”] <div> <b>[text name=”tekst”]</b> </div> [/loop]
  11. 11. Onhandige loops <table> [loop name=”voorbeeld”] <tr> <td>[text name=”tekst”]</td> </tr> [/loop] </table>
  12. 12. Hoe dit beter kan [loop name=”x” begin=”<table>” end=”</table>”] <tr> <td>[text name=”tekst”]</td> </tr> [/loop]
  13. 13. <ul><li>Bizarre truc </li></ul><ul><li><a href=“[text name=link]”>Hier komt een link</a> </li></ul><ul><li>Hoe kan dit beter? </li></ul><ul><li><a href=“{$property.linkurl}”>{property.linktext}</a> </li></ul>
  14. 14. <ul><li>Een teller van loops </li></ul><ul><li>[$loop. naam_van_loop.naam_van_subloop. iteration] </li></ul><ul><li>[loop name=myloop] </li></ul><ul><li><a href=“{$property.link[$loop.myloop.iteration]}”>…</a> </li></ul><ul><li>[/loop] </li></ul>
  15. 15. <ul><li>Einde HTML </li></ul><ul><li>Zijn er vragen? </li></ul><ul><li>(stripverhaal volgt) </li></ul>
  16. 16.
  17. 17. <ul><li>De moraal </li></ul><ul><li>… vertrouw nooit de input van een gebruiker </li></ul>
  18. 18. <ul><li>Personaliseren </li></ul><ul><li>Beste {$voornaam} </li></ul><ul><li>Welkom op ons seminar! </li></ul>
  19. 19. <ul><li>Personaliseren </li></ul><ul><li>Beste {$voornaam|escape} </li></ul><ul><li>Welkom op ons seminar! </li></ul>
  20. 20. <ul><li>Personaliseren - modifiers </li></ul><ul><li>{$var|escape} vervang HTML code door entities: < -> &lt; </li></ul><ul><li>{$var|nl2br} vervang regeleindes door <br/> </li></ul><ul><li>{$var|strip_tags} verwijder HTML tags </li></ul><ul><li>{$var|date_format} toon een datum op een nette wijze </li></ul><ul><li>{$var|truncate} kort een variabele in </li></ul><ul><li>{$var|trim} verwijder whitespace </li></ul><ul><li>Meerdere modifiers: {$var|trim|truncate:40|escape} </li></ul>
  21. 21. <ul><li>Gegevens uit andere database </li></ul><ul><li>Beste {$voornaam|escape} </li></ul><ul><li>Het adres van het dichtsbijzijnde filiaal is </li></ul><ul><li>{$filiaaladres|escape} </li></ul><ul><li>{$filiaalplaats|escape} </li></ul>
  22. 22. <ul><li>Gegevens uit andere database </li></ul><ul><li>Beste {$voornaam|escape} </li></ul><ul><li>Het adres van het dichtsbijzijnde filiaal is </li></ul><ul><li>{loadprofile from=Filialen postcode=$filaalcode assign=filiaal} </li></ul><ul><li>{$filiaal.adres|escape} </li></ul><ul><li>{$filiaal.plaats|escape} </li></ul>
  23. 23. <ul><li>Einde personaliseren </li></ul><ul><li>Zijn er vragen? </li></ul>
  24. 24. <ul><li>Inladen van externe content </li></ul><ul><li>HTML code </li></ul><ul><li>RSS/Atom feeds </li></ul><ul><li>Allerlei andere bestanden en content in XML formaat </li></ul>
  25. 25. <ul><li>Inladen van HTML code </li></ul><ul><li>{fetch url=http://www.example.com} </li></ul>
  26. 26. <ul><li>Let op </li></ul><ul><li>Afbeeldingen, scripts en stylesheets worden niet meegenomen </li></ul><ul><li>De content is niet gepersonaliseerd </li></ul>
  27. 27. <ul><li>Personaliseren in eigen content </li></ul><ul><li>Gebruik een gepersonaliseerde URL </li></ul><ul><li>{fetch url=http://www.x.nl/voornaam=$voornaam} </li></ul><ul><li>(let op belasting voor de webserver) </li></ul>
  28. 28. <ul><li>Inladen van XML code </li></ul><ul><li>Bijvoorbeeld RSS of ATOM feeds </li></ul><ul><li>Ook enquêtes en webforms van Copernica </li></ul><ul><li>Alle andere mogelijke XML input </li></ul>
  29. 29. Wat is XML? <persoon> <voornaam>Simon</voornaam> <achternaam>De Vries</achternaam> </persoon> <persoon> <voornaam>Sara</voornaam> <achternaam>Bergman</achternaam> </persoon>
  30. 30. <ul><li>Invoegen van XML </li></ul><ul><li>{loadfeed feed=http://www.voorbeeld.com} </li></ul><ul><li>Copernica downloadt de feed (+cache) </li></ul><ul><li>Detecteert type (Atom, RSS) </li></ul><ul><li>Converteert feed naar HTML </li></ul><ul><li>Plaatst dit in mailing of website </li></ul>
  31. 31. <ul><li>Omzetten van XML naar HTML </li></ul><ul><li>De omzetregels zijn gedefinieerd in XSLT </li></ul><ul><li>Copernica gebruikt standaard XSLT's voor RSS en ATOM feeds, surveys en webforms </li></ul>
  32. 32. <ul><li>Voorbeeld feed </li></ul><ul><li><nieuws> </li></ul><ul><li><artikel> </li></ul><ul><li><titel>Dit is de titel van een bericht</titel> </li></ul><ul><li><datum>2009-05-13</datum> </li></ul><ul><li><body> </li></ul><ul><li>Hier komt het volledige artikel </li></ul><ul><li></body> </li></ul><ul><li></artikel> </li></ul><ul><li><artikel> </li></ul><ul><li>… </li></ul><ul><li></artikel> </li></ul><ul><li></nieuws> </li></ul>
  33. 33. <ul><li>Voorbeeld XSLT </li></ul><ul><li><xsl:template match=&quot;/&quot;> </li></ul><ul><li><h2>Nieuws</h2> </li></ul><ul><li><xsl:for-each select=&quot;nieuws/artikel&quot;> </li></ul><ul><li><div><b><xsl:value-of select=&quot;titel&quot;/></b></div> </li></ul><ul><li><div><xsl:value-of select=&quot;body&quot;/></div> </li></ul><ul><li></xsl:for-each> </li></ul><ul><li></xsl:template> </li></ul><ul><li>Meer informatie: www.w3schools.com </li></ul>
  34. 34. <ul><li>Een eigen XSLT toepassen </li></ul><ul><li>{loadfeed feed=&quot;…&quot; xslt=&quot;naam/adres&quot;} </li></ul><ul><li>{survey name=&quot;…&quot; xslt=&quot;naam/adres&quot;} </li></ul><ul><li>{webform name=&quot;…&quot; xslt=&quot;naam/adres&quot;} </li></ul>
  35. 35. <ul><li>De standaard XSLT's </li></ul><ul><li>Output zonder opmaak: </li></ul><ul><li><div class=&quot;x&quot;>…</div> </li></ul><ul><li><div class=&quot;y&quot;>…</div> </li></ul><ul><li>… zodat je met een stylesheet opmaak kunt veranderen! </li></ul>
  36. 36. <ul><li>Stylesheets met Copernica </li></ul><ul><li>Bestaat uit onderdelen: </li></ul><ul><ul><li>Algemeen; </li></ul></ul><ul><ul><li>Rss; </li></ul></ul><ul><ul><li>Atom; </li></ul></ul><ul><ul><li>Survey; </li></ul></ul><ul><ul><li>Webform; </li></ul></ul>
  37. 37. <ul><li>Stylesheets met Copernica </li></ul><ul><li>Het uiteindelijke <style> … </style> wordt uitgebreid met de benodigde settings </li></ul><ul><li>Overigens <style> blokken kunnen worden omgezet naar style=&quot;…&quot; attributen </li></ul>
  38. 38. <ul><li>Mailings </li></ul><ul><li>Standaard template </li></ul><ul><li>Content wordt automatisch ingelezen </li></ul><ul><li>Standaard XSLT </li></ul><ul><li>Standaard style </li></ul><ul><li>FOCUS OP CONTENT! </li></ul>
  39. 39. <ul><li>Einde externe content </li></ul><ul><li>Zijn er vragen? </li></ul><ul><li>(Rebus volgt) </li></ul>
  40. 40.
  41. 41. <ul><li>POM SOAP API </li></ul><ul><li>Applicatie is gelaagd opgebouwd: </li></ul><ul><ul><li>Database </li></ul></ul><ul><ul><li>Object model </li></ul></ul><ul><ul><li>User interface </li></ul></ul><ul><li>Het object model is via SOAP toegankelijk </li></ul>
  42. 42. <ul><li>Voorbeelden </li></ul><ul><li>In online documentatie zijn voorbeeldscripts in PHP, C# en Java beschikbaar </li></ul>
  43. 43. <ul><li>Objecten en methodes </li></ul><ul><li>Elke methode heeft de vorm Classname_methodename </li></ul><ul><ul><li>Database_retrieve </li></ul></ul><ul><ul><li>EmailingDocument_createEmailing </li></ul></ul><ul><ul><li>PdfTemplate_createDocument </li></ul></ul><ul><li>Elke methode krijgt in ieder geval een ID parameter mee </li></ul><ul><li>Het ID is uniek voor dit object binnen het account </li></ul>
  44. 44. <ul><li>Speciale methodes </li></ul><ul><li>Classname_retrieve: alle properties van een object opvragen </li></ul><ul><li>Classname_update: properties van een object bijwerken </li></ul><ul><li>Classname_remove: object verwijderen </li></ul><ul><li>Let op: verplicht een ID meegeven om object te identificeren! </li></ul>
  45. 45. <ul><li>Wat als je het ID niet weet? </li></ul><ul><li>Pom is opgebouwd als boomstructuur: </li></ul><ul><ul><li>Account </li></ul></ul><ul><ul><ul><li>Templates </li></ul></ul></ul><ul><ul><ul><ul><li>Documenten </li></ul></ul></ul></ul><ul><ul><ul><li>Databases </li></ul></ul></ul><ul><ul><ul><ul><li>Velden </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Interesses </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Profielen </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Collecties </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Collectievelden </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Subprofielen </li></ul></ul></ul></ul></ul>
  46. 46. <ul><li>Object zoeken op basis van naam </li></ul><ul><li>Dit is niet erg voor top-level objecten </li></ul><ul><li>Anders kun je opvragen vanuit de parent: </li></ul><ul><ul><li>EmailingTemplate_document </li></ul></ul><ul><ul><ul><li>Meegeven: ID van de template </li></ul></ul></ul><ul><ul><ul><li>Meegeven: naam van het document </li></ul></ul></ul><ul><ul><ul><li>Retourneert: gegevens en ID van het document </li></ul></ul></ul>
  47. 47. <ul><li>Gereduceerde objecten </li></ul><ul><li>Classname_retrieve retourneert alle properties, </li></ul><ul><li>Alle overige methodes retourneren standaard een beperkt aantal properties (naam + ID) </li></ul><ul><li>Als de parameter 'allproperties' wordt meegegeven, dan wel volledige objecten </li></ul>
  48. 48. <ul><li>Meerdere objecten </li></ul><ul><li>Indien een methode meerdere objecten teruggeeft, kan de output worden gelimiteerd met parameters 'start'en 'length' </li></ul>
  49. 49. <ul><li>Documentatie </li></ul><ul><li>In de online documentatie worden alle methodes toegelicht </li></ul><ul><li>Copernica voegt op basis van gebruikerservaringen nieuwe methodes toe </li></ul>
  50. 50. <ul><li>Einde POM SOAP API </li></ul><ul><li>Zijn er nog vragen? </li></ul>
  51. 51. <ul><li>Condities en expressies </li></ul><ul><li>Op basis van SpiderMonkey (JavaScript engine van Firefox) </li></ul><ul><li>Te gebruiken bij blokken in HTML documenten, en bij opvolgacties </li></ul><ul><li>Condities moeten naar ‘true’ of ‘false’ evalueren </li></ul><ul><li>De beschikbare variabelen zijn gelijk aan de personalisatievariabelen </li></ul>
  52. 52. <ul><li>Condities bij blokken </li></ul><ul><li>Bij tekstblokken kon dit ook al met smarty: {if $woonplaats == ‘amsterdam’} </li></ul><ul><li>In loopblokken en imageblokken kun je geen Smarty gebruiken, … </li></ul><ul><li>maar wel condities! </li></ul><ul><li>Imageblok alleen bij bepaalde woonplaats ? Woonplaats == ‘amsterdam’ </li></ul><ul><li>Loopblok dynamisch aantal iteraties geven? Geslacht == ‘man’ ? 5 : 4 </li></ul>
  53. 53. <ul><li>Condities bij opvolgacties </li></ul><ul><li>Probleem: opvolgactie wordt ingeroosterd voor over een week, maar in de tussentijd meldt iemand zich af! </li></ul><ul><li>Oplossing: aan de opvolgactie kan een conditie worden gekoppeld. </li></ul>

×