Successfully reported this slideshow.

Drupal Training - Introductie

2,197 views

Published on

Leer Drupal kennen. Introductietraining voor web masters, beheerders, programmeurs. Deze slides gebruik ik voor een 1-daagse training. Gebaseerd op Drupal 6. Meer info op http://www.tauros.eu

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Drupal Training - Introductie

  1. 2. Agenda <ul><li>Tauros Marketing ICT
  2. 3. Filosofie en architectuur
  3. 4. Beheer
  4. 5. Huisstijl omzetten
  5. 6. Uitbreidingen
  6. 7. Ontwikkelen
  7. 8. Hosting </li></ul>
  8. 9. Tauros Marketing ICT <ul>maakt marketing en verkoop meetbaar en effici ë nt door inzet van open source ICT <li>35, 28, 21, 14, 7 </li></ul>
  9. 10. Filosofie
  10. 11. Filosofie <ul><li>Terminologie
  11. 12. Architectuur
  12. 13. Taxonomie en classificatie
  13. 14. Zoekmachineoptimalisatie
  14. 15. Meertalige sites </li></ul>
  15. 16. Terminologie nodes modules blokken, menu's en regions gebruikers, rollen, toegangsrechten templates presentation logic data
  16. 17. Node <ul><li>Basis data-eenheid
  17. 18. Revisies
  18. 19. Voorbeelden </li><ul><li>Losse pagina's of pagina's in boeken
  19. 20. Discussie-topics in fora
  20. 21. Blog pagina's
  21. 22. Nieuwsartikelen
  22. 23. Eigen typen </li></ul></ul>
  23. 24. Modules <ul><li>Software
  24. 25. Soorten </li><ul><li>Core
  25. 26. Optionele core
  26. 27. Contribs </li></ul></ul>
  27. 28. Blokken en menu's <ul><li>Blokken </li><ul><li>Stukken presenteerbare data
  28. 29. Kunnen afzonderlijk gestyled worden
  29. 30. Plaatsen in regions </li></ul><li>Menu's </li><ul><li>Hierarchische structuur
  30. 31. Refereren aan nodes of stukken code
  31. 32. Kunnen afzonderlijk gestyled worden
  32. 33. Plaatsen in regions </li></ul></ul>
  33. 34. Regions <ul><li>Vaste delen op de pagina
  34. 35. Bevatten </li><ul><li>Inhoud
  35. 36. Blokken
  36. 37. Menu's </li></ul></ul>
  37. 38. region: koptekst region:inhoud region: laatste_versie region: rechts blok: primaire links blok: zoeken region: subkop blok: secundaire links blok: quicklinks blok: login
  38. 39. Gebruikers <ul><li>Root user ID = 1 </li><ul><li>Naam kies je bij installatie </li></ul><li>Anonymous user ID = 0 </li><ul><li>Naam = anonymous of anoniem, ... </li></ul></ul>
  39. 40. Rollen root user anoniem web master financieel medewerker designer arie belle chris diana edo fanny ger
  40. 41. Toegang ('RBAC') <ul><li>Deel precies genoeg uit
  41. 42. Geef één persoon desnoods meer rollen </li><ul><li>Edo: </li><ul><li>Webmaster
  42. 43. Designer </li></ul></ul><li>Let op: anonieme gebruiker ook instellen
  43. 44. Modules bepalen zelf de toegangsrechten </li></ul>
  44. 45. Templates <ul><li>Bepalen de layout van een onderdeel
  45. 46. Elk miniem onderdeel kan een template hebben
  46. 47. Templates zijn onderdeel van een theme
  47. 48. Themes bevatten: </li><ul><li>Templates
  48. 49. CSS
  49. 50. JavaScript </li></ul></ul>
  50. 51. Architectuur
  51. 52. Technology stack Server (afhankelijk van web server en PHP) Web server (Apache, IIS) PHP 5.2.x (5.3 vanaf Drupal 6.14) Drupal Core (3..5MB) MySQL 5.0+ of PostgreSQL 7.4+ Drupal modules
  52. 53. systeembestanden (php) core modules installatieprofielen command line scripts standaard themes systeembestanden (css,js,png) zelfgekozen modules live site development site site-specifieke bestanden (owner = webserver user) site-specifieke themes
  53. 54. URL's <ul><li>http://domein.nl/index.php?q=
  54. 55. http://domein.nl/leesbare-naam </li></ul>mod_rewrite bestanden index.php menusysteem path alias modules
  55. 56. Meerdere sites (multisite) mod_rewrite bestanden sites/domeindirectory sites/default sites/all menusysteem path alias modules index.php
  56. 57. Cache en throttle/afknijpen <ul><li>Caching </li><ul><li>Hele pagina's </li><ul><li>Aggresieve cache werkt niet altijd </li></ul><li>Blokken
  57. 58. Compressie
  58. 59. CSS en JavaScript optimalisatie </li></ul><li>Afknijpen bij hoge belasting </li><ul><li>Anonieme gebruikers of aangemelde gebruikers
  59. 60. Moet in de module ondersteund worden </li></ul></ul>
  60. 61. Standaard inhoudstypen <ul><li>Node
  61. 62. Node revision
  62. 63. Gebruiker
  63. 64. Locale source
  64. 65. Bestand
  65. 66. Reactie
  66. 67. Taxonomie term
  67. 68. Etc... </li></ul>
  68. 69. Node <ul><li>Titel en berichttekst
  69. 70. Workflow/werkschema </li><ul><li>Publiceren, op voorpagina, revisies, etc.
  70. 71. Vertalingen
  71. 72. Eigen meta-tags (keywords, description) </li></ul><li>Reactieinstellingen </li></ul>
  72. 73. Afgeleide inhoudstypen <ul><li>Via modules </li><ul><li>Pagina
  73. 74. Verhaal
  74. 75. Boek
  75. 76. Forum en forumonderwerp </li></ul><li>Zelf maken </li><ul><li>Content Construction Kit (CCK) </li></ul></ul>
  76. 77. Pagina inhoudstype <ul><li>Titel
  77. 78. Menu
  78. 79. Taal
  79. 80. Berichttekst
  80. 81. Invoerformaat
  81. 82. Revisies
  82. 83. Reactieinstellingen
  83. 84. Auteur
  84. 85. Publicatieopties </li></ul>
  85. 86. Filosofie <ul><li>Terminologie
  86. 87. Architectuur
  87. 88. Taxonomie en classificatie
  88. 89. Zoekmachineoptimalisatie
  89. 90. Meertalige sites </li></ul>
  90. 91. Begrippen <ul><li>Woordenschat (vocabulary)
  91. 92. Termen
  92. 93. Synoniemen
  93. 94. Hierarchisch
  94. 95. Vast of vrij
  95. 96. Gelinkt aan inhoudstypen </li></ul>
  96. 97. Voorbeeld woordenschat <ul><li>Organisatie </li><ul><li>Bedrijf </li><ul><li>MKB </li><ul><li>Hitech </li></ul><li>Groot </li><ul><li>Hitech </li></ul><li>Brancheorganisatie </li></ul><li>Overheid </li><ul><li>Rijk
  97. 98. Provincie
  98. 99. Gemeente </li></ul><li>Maatchappelijke instelling </li><ul><li>Universiteit
  99. 100. Onderzoeksinstelling
  100. 101. Onderwijinstelling
  101. 102. School </li></ul><li>Particulier </li></ul></ul>Synomien <ul><li>Informatietype </li><ul><li>Financiering
  102. 103. Informatie </li><ul><li>Kennis </li><ul><li>Beschikbaar
  103. 104. Beschermen
  104. 105. Exploiteren
  105. 106. Inkopen
  106. 107. Samen ontwikkelen
  107. 108. Zelf ontwikkelen </li></ul><li>Talenten
  108. 109. Beleid
  109. 110. Convenant
  110. 111. Handhaving
  111. 112. Vergunningen
  112. 113. Wet- en regelgeving </li></ul><li>Samenwerking </li><ul><li>Partners </li></ul></ul></ul>Inhoudstype Brochure
  113. 114. Filosofie <ul><li>Terminologie
  114. 115. Architectuur
  115. 116. Taxonomie en classificatie
  116. 117. Zoekmachineoptimalisatie
  117. 118. Meertalige sites </li></ul>
  118. 119. Standaard mogelijkheden <ul><li>Standaard </li><ul><li>http://<domein>/index.php?q=node/15 </li></ul><li>Clean URL's (mod_rewrite toegang) </li><ul><li>http://<domein>/node/15 </li></ul><li>Centrale keywords/description </li></ul>
  119. 120. Extra modules <ul><li>Aggregator </li><ul><li>RSS/RDF/Atom feeds genereren en externe feeds opnemen in site </li></ul><li>Global Redirect </li><ul><li>Zoekt URL alias. Als gevonden: 301 redirect </li></ul><li>Meta tags </li><ul><li>Elke pagina eigen keywords en description </li></ul><li>Page Title </li><ul><li>Definieer inhoud van de title tag. I.t.t. H1 tag </li></ul><li>Pathauto </li><ul><li>(Automatische) URL alias n.a.v. node titel </li></ul><li>Sitemap </li><ul><li>Pagina met een sitemap </li></ul><li>XML Sitemap </li></ul>
  120. 121. Filosofie <ul><li>Terminologie
  121. 122. Architectuur
  122. 123. Taxonomie en classificatie
  123. 124. Zoekmachineoptimalisatie
  124. 125. Meertalige sites </li></ul>
  125. 126. Inhoudstypen <ul><li>Mogelijkheden </li><ul><li>Geen vertaling
  126. 127. Taalonafhankelijke versie
  127. 128. Taalversie </li></ul><li>Modules (buiten de standaard modules) </li><ul><li>I18n, l10n_client
  128. 129. Translation Overview module
  129. 130. Translation table
  130. 131. Node translation </li></ul></ul>
  131. 132. Taalkeuze anoniem aangemeld voorbeeld geen prefix prefix + fallback domein Standaardtaal (eerste taal bij installatie) Altijd standaardtaal Voorkeurtaal Anders standaard Taalcode in pad <domein>/contact <domain>/en/contact Taalcode Anders standaardtaal Taalcode Anders standaardtaal Taalcode in pad <domein>/contact <domain>/en/contact Taalcode Anders browser-taal Anders standaardtaal Taalcode Anders voorkeurtaal Anders browser-taal Anders standaardtaal Taaldomain en.domein.nl www.domein.nl Taaldomein Anders standaardtaal Taaldomein Anders standaardtaal methode
  132. 133. Beheer
  133. 134. Aanmaken, revisie <ul><li>Inhoud aanmaken
  134. 135. Revisie aanmaken </li></ul>
  135. 136. Verwijderen
  136. 137. Voorbeeld eigen inhoudstype
  137. 138. Menu's <ul><li>Navigatie
  138. 139. Primaire links
  139. 140. Secundaire links
  140. 141. Eigen menu's </li></ul>
  141. 142. Menu's tonen
  142. 143. Rapportage + Google Analytics
  143. 144. Backups <ul><li>Basis </li><ul><li>Sites/xxx/files directory -> FileZilla
  144. 145. Database -> PhpMyAdmin export </li></ul><li>Werkdirectories van extra modules
  145. 146. Backup-tool modules?
  146. 147. Server backup (incrementals) </li></ul>
  147. 148. Updates <ul><li>Rapportage </li><ul><li>Beschikbare updates
  148. 149. Status rapportage </li></ul><li>Site offline
  149. 150. Backup maken
  150. 151. Modules updaten </li><ul><li>Download
  151. 152. Extract </li></ul><li>http://<site>/update.php
  152. 153. Testen
  153. 154. Site on-line </li></ul>
  154. 155. Meerdere Drupal versies <ul><li>Losse installaties van Drupal versies
  155. 156. Symlink naar de juiste versie </li></ul>
  156. 157. Huisstijl omzetten
  157. 158. Om te beginnen <ul><li>Denk aan multi-site
  158. 159. Theme per rol
  159. 160. Administratie theme
  160. 161. Themes worden gecached </li><ul><li>Admin -> Settings -> Prestatie -> Opschonen
  161. 162. Ga naar de admin theme pagina </li></ul><li>Devel module
  162. 163. Theming guide: http://drupal.org/theme-guide </li></ul>
  163. 164. Welke directory? <ul><li>drupalroot/themes </li><ul><li>Geldig voor alle sites
  164. 165. Alleen meegeleverde themes </li></ul><li>drupalroot/sites/all/themes </li><ul><li>Eigen themes (of gedownloaded) </li></ul><li>drupalroot/sites/<site>/themes </li><ul><li>Site-specifieke, eigen themes (of gedownloaded) </li></ul></ul>
  165. 166. Anatomie van een theme <ul><li>Naam (leesbaar en systeem)
  166. 167. Bestanden </li><ul><li><naam>.info
  167. 168. screenshot.png (150x90)
  168. 169. page.tpl.php
  169. 170. page-front.tpl.php
  170. 171. block.tpl.php
  171. 172. css, js, media </li></ul></ul>
  172. 173. Voorbeeld: fluid
  173. 174. fluid.info name = Tauros v4 fluid description = Tauros Marketing ICT version 4 core = 6.x engine = phptemplate stylesheets[all][] = layout.css stylesheets[all][] = markup.css stylesheets[all][] = block.css regions[left] = Left sidebar $left regions[before_content] = Before content $before_content regions[content] = Content $content regions[header] = Header $header regions[footer] = Footer $footer regions[bodyend] = End of body $bodyend version = &quot;6.x-1.0&quot; $head $head_title $styles $scripts $logo page.tpl.php
  174. 175. page.tpl.php <head> ... <head> <title><?=$head_title ?></title> <?php print $head ?> <?php print $styles ?> <?php print $scripts ?> <!--[if IE 6]> <link rel=&quot;stylesheet&quot; href=&quot;/sites/www.tauros.eu/themes/fluid/ie.css&quot; type=&quot;text/css&quot;/> <![endif]--> </head> ...
  175. 176. page.tpl.php <body> <div class=&quot;main-content&quot;> <?php if ($breadcrumb && !$is_front){ ?> <?=$breadcrumb ?> <?php } ?> <?php if ($messages != &quot;&quot;){ ?> <div id=&quot;message&quot;><?php print $messages ?></div> <?php } ?> <?php if ($help != &quot;&quot;){ ?> <p id=&quot;help&quot;><?php print $help ?></p> <?php } ?> <?php if ($tabs != &quot;&quot;){ ?> <?php print $tabs ?> <?php } ?> <?php if ($title != &quot;&quot;){ ?> <h1 id=&quot;title&quot;><?php print $title ?></h1> <?php } ?> <?php print $before_content ?> <?php print $content ?> </div>
  176. 177. block.tpl.php <div class=&quot;block block-<? print $block->module?>&quot; id=&quot;block- <?php print $block->module . &quot;-&quot; . $block->delta ?>&quot;> <div class=&quot;block-tl&quot;></div> <div class=&quot;block-tr&quot;></div> <?php if ( $block->subject ){ ?> <h2><?=$block->subject?></h2> <?php } ?> <div class=&quot;block-left&quot;> <div class=&quot;block-right&quot;> <div class=&quot;block-content&quot;> <?=$block->content?> </div> </div> </div> <div class=&quot;block-bl&quot;></div> <div class=&quot;block-br&quot;></div> </div>
  177. 178. Aanpassen <ul><li>CSS </li><ul><li>Als HTML markup werkbaar is </li></ul><li>Template overrides </li><ul><li>Als HTML markup gewijzigd moet worden </li></ul><li>PHP functies </li><ul><li>Als inhoud gewijzigd moet worden </li></ul></ul>
  178. 179. Template overrides <ul><li>Kopieer de template file en wijzig
  179. 180. Cre ë er een specifieke template file </li><ul><ul><li>Zie Themer info in Devel </li></ul><li>block-locale-0.tpl.php
  180. 181. block-locale.tpl.php
  181. 182. block-left.tpl.php
  182. 183. block.tpl.php </li></ul></ul>
  183. 184. Devel module output
  184. 185. Voorbeeld: block-locale.tpl.php <div class=&quot;block block-<? print $block->module?>&quot; id=&quot;block-<?php print $block->module . &quot;-&quot; . $block->delta ?>&quot;> <div class=&quot;block-tl&quot;></div> <div class=&quot;block-tr&quot;></div> <?php if ( $block->subject ){ ?> <h2><?=$block->subject?></h2> <?php } ?> <div class=&quot;block-left&quot;> <div class=&quot;block-right&quot;> <div class=&quot;block-content&quot;> <p>Kies een taal</p> <?=$block->content?> </div> </div> </div> <div class=&quot;block-bl&quot;></div> <div class=&quot;block-br&quot;></div> </div>
  185. 186. Function overrides <ul><li>In template.php
  186. 187. Zie ook api.drupal.org (via Devel)
  187. 188. Hooks </li></ul>
  188. 189. Voorbeeld hooks voor een block in fluid theme, geo module 1. fluid_preprocess_block( &$variables ) 2. fluid_preprocess( &$variables ) 3. phptemplate_preprocess_block( &$variables ) 4. phptemplate_preprocess( &$variables ) 5. geo_preprocess_block( &$variables ) 6. geo_preprocess_block( &$variables ) 7. template_preprocess( &$variables ) 8. template_preprocess( &$variables ) &$variables -> http://drupal.org/node/226776
  189. 190. Nog specifieker
  190. 191. Voorbeeld: template.php <?php // Add off-page icon to external links function fluid_menu_item_link ( &$link ) { if (empty($link['localized_options'])) { $link['localized_options'] = array(); } if ( strpos( $link['href'], 'http' ) === 0 ) { return l($link['title'], $link['href'], $link['localized_options']). '&nbsp;<img src=&quot;/sites/www.tauros.eu/themes/fluid/img/link.png&quot;/>'; } else { return l($link['title'], $link['href'], $link['localized_options']); } }
  191. 192. De stappen <ul><li>Maak de statische layout(s) en test ze </li><ul><li>Gebruik <div id=””> voor regions
  192. 193. browsershots.org </li></ul><li>Bouw de templates </li><ul><li>Pagina templates
  193. 194. Blokken templates
  194. 195. Extra PHP code </li></ul></ul>
  195. 196. Uitbreidingen
  196. 197. Modules <ul><li>Core in <drupalroot>/modules
  197. 198. Extra </li><ul><li><drupalroot>/sites/all/modules
  198. 199. <drupalroot>/sites/default/modules </li></ul><li>Site-specifiek </li><ul><li><drupalroot>/sites/<site>/modules </li></ul></ul>
  199. 200. Hoe kies je een module <ul><li>Lees module projectpagina
  200. 201. Bekijk usage statistics
  201. 202. Recente activiteit in pending patches </li></ul>
  202. 203. Installatie/deinstallatie <ul><li>Download
  203. 204. Uitpakken in juiste .../modules directory
  204. 205. admin/build/modules </li><ul><li>Dependencies controleren
  205. 206. Aanzetten </li></ul><li>admin/by-module
  206. 207. admin/build/block
  207. 208. Uitzetten
  208. 209. De-installeren
  209. 210. Directory verwijderen </li></ul>
  210. 211. Goede modules <ul><li>Views
  211. 212. CCK </li><ul><li>Filefield / FileFieldMeta / ImageField
  212. 213. Date / DateAPI </li></ul><li>ImageAPI / ImageCache / IMCE
  213. 214. WysiwygAPI + TinyMCE
  214. 215. Webform
  215. 216. Search
  216. 217. Search404
  217. 218. Devel </li></ul>
  218. 219. Views <ul><li>“VisualSQL”
  219. 220. Data extractie
  220. 221. Presentatie
  221. 222. Waar beginnen we
  222. 223. SELECT zooi FROM hopen ORDER BY dinges GROUP BY koppie LIMIT niet-te-veel
  223. 224. Nu opmaken voor uitvoer </li></ul>
  224. 225. Perspectief <ul><li>Node
  225. 226. Node revisie
  226. 227. Aggregator item
  227. 228. Bestand
  228. 229. Gebruiker
  229. 230. Locale source
  230. 231. Reactie
  231. 232. Taxonomie term
  232. 233. Access log </li></ul>
  233. 234. type uitvoer uitvoerdetails gerelateerde tabellen url params velden sorteren filteren SELECT WHERE ORDER BY JOIN FROM LIMIT
  234. 235. Stappen <ul><li>Defaults instellen
  235. 236. Specifieke presentatie kiezen </li><ul><li>Block
  236. 237. Pagina
  237. 238. Feed
  238. 239. Bijlage </li></ul><li>Presentatie aanpassen
  239. 240. Let op: schakelt soms om naar default </li></ul>
  240. 242. CCK <ul><li>Maak eigen inhoudstypes
  241. 243. Honderden veldsoorten beschikbaar </li><ul><li>Zie modules op drupal.org </li></ul></ul>
  242. 245. Ontwikkelen
  243. 246. Omgevingen <ul><li>PHP </li><ul><li>Templates en blokken
  244. 247. Modules </li></ul><li>jQuery </li><ul><li>Front-end </li></ul><li>http://drupal.org/developing/modules </li></ul>
  245. 248. OOP? <ul><li>Drupal is procedureel
  246. 249. 'Namespaces' </li><ul><li>Directorynamen en bestandsnamen
  247. 250. Functienamen </li></ul><li>Procedureel starten, OO verder gaan </li></ul>
  248. 251. Hooks <ul><li>Drupal laadt modules
  249. 252. Registreren hook functies
  250. 253. http://api.drupal.org
  251. 254. Bijvoorbeeld: </li><ul><li>Hook in api.drupal.org: hook _cron()
  252. 255. Jouw module: unity_check_tool
  253. 256. Jouw hook functie: unity_check_tool_cron() </li></ul></ul>
  254. 257. API's <ul><li>Forms API </li><ul><li>Formulieren maken en beheren
  255. 258. Array-gedreven formulierendefinities
  256. 259. http://api.drupal.org/api/group/form_api/6 </li></ul><li>Database API </li><ul><li>Database abstraction layer
  257. 260. db_xxxx() functies (db_query, db_query_range)
  258. 261. http://api.drupal.org/api/group/database/6 </li></ul><li>Schema API </li><ul><li>Schema abstraction layer
  259. 262. http://api.drupal.org/api/group/schemaapi/6 </li></ul></ul>
  260. 263. Handige functies t( 'Er zijn %u gebruikers ingelogd', array( '%u' => $cnt ) ) l( 'contact opnemen', 'contact' ) drupal_get_path( 'module', 'unity_check_tool' ) variable_set(), variable_get(), variable_del() $r = db_query( “SELECT name FROM {users} WHERE id=%d”, $uid ) Vergelijk sprintf() $o = db_fetch_object( $r )
  261. 264. Menustructuur MENU_NORMAL_ITEM MENU_SUGGESTED_ITEM MENU_LOCAL_TASK MENU_DEFAULT_LOCAL_TASK MENU_CALLBACK
  262. 265. To UI or not to UI <ul><li>Geen admin- en gebruikersinterface </li><ul><li>Geen paden en menu's registreren </li></ul><li>Wel admin-, geen gebruikersinterface </li><ul><li>Admin paden en system forms registreren </li></ul><li>Geen admin-, wel gebruikersinterface </li><ul><li>Gebruikerspaden en forms registreren </li></ul><li>Beide interfaces </li><ul><li>Alle paden en forms registreren </li></ul><li>Pagina en/of block uitvoer </li></ul>
  263. 266. Anatomie van een module <ul><li>Systeemnaam (unity_check_tool)
  264. 267. Directory </li><ul><li>/sites/all/modules/unity_check_tool
  265. 268. /sites/<site>/modules/unity_check_tool </li></ul><li>Basisbestanden </li><ul><li>unity_check_tool.info -> Informatie voor Drupal
  266. 269. unity_check_tool.module -> De logica
  267. 270. unity_check_tool.install -> Optioneel </li></ul></ul>
  268. 272. unity_check_tool.info name = UCT core description = Perform unity checks on finite element analysis data core = 6.x package = Unity Check Tool
  269. 273. unity_check_tool.module <ul><li>Wijzig bestaande formulieren
  270. 274. Registreer menuitems
  271. 275. Registreer formulieren
  272. 276. Maak formulier validate/submit functies
  273. 277. Processing functies
  274. 278. Block uitvoer functie
  275. 279. Andere hooks (hook_cron() etc) </li></ul>
  276. 280. Wijzig bestaande formulieren function moed_register _form_alter( &$form, $form_state, $form_id) { switch ( $form_id ) // Zie <form ..><input type=”hidden” name=”form_id”.../> { case 'user_register': case 'user_profile_form': $form['1. Ondernemingsgegevens']['profile_kvknr']['#element_validate'] = array('_moed_register_profile_kvknr_validate'); $form['2. Contactgegevens']['profile_plaats']['#element_validate'] = array('_moed_register_profile_plaats_validate'); $form['2. Contactgegevens']['profile_latitude']['#element_validate'] = array('_moed_register_profile_geocode_validate'); $form['2. Contactgegevens']['profile_longitude']['#element_validate'] = array('_moed_register_profile_geocode_validate'); $form['3. Website']['profile_website']['#element_validate'] = array('_moed_register_profile_website_validate'); $form['#submit'][] = '_moed_register_user_register_submit'; break; case 'cooperatie_node_form': $form['field_plaats']['#element_validate'] = array('_moed_register_cooperatie_plaats_validate'); $form['field_latitude']['#element_validate'] = array('_moed_register_cooperatie_geocode_validate'); $form['field_longitude']['#element_validate'] = array('_moed_register_cooperatie_geocode_validate'); break; default: break; } }
  277. 281. Registreer menuitems function unity_check_tool _menu() { // hook_menu return array( 'unity_check_tool' => array( // Job import and list pages 'title' => 'Unity Check Tool', 'page callback' => 'drupal_get_form', 'page arguments' => array( 'unity_check_tool_user_form' ), 'access arguments' => array( 'use unity check tool' ), 'description' => 'Use Unity Check Tool to perform unity checks on your finite element analysis output data, using normative methods.', 'file' => 'unity_check_tool_main.inc.php' ), 'unity_check_tool/import' => array( // Main user entry point 'title' => 'Import', 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -2 ), 'unity_check_tool/jobs' => array( // Main user entry point to list current jobs 'title' => 'Jobs', 'page callback' => 'unity_check_tool_jobs', 'access arguments' => array( 'use unity check tool' ), 'description' => 'Select an existing job from the list.', 'type' => MENU_LOCAL_TASK, 'file' => 'unity_check_tool_main.inc.php', 'weight' => -1 ) ) }
  278. 282. Maak formulier function unity_check_tool _user_form() { return array( 'information' => array( '#type' => 'markup', '#value' => t('<div>Upload a file from your finite element analysis application. After importing your file, a job is created and you will be able to add properties to all elements in the file.</div>') ), 'unity_check_tool_input_file' => array( '#type' => 'file', '#title' => t('Calculation result file'), '#description' => t('This is an output file from your finite element analysis application'), '#size' => 80, ) ); }
  279. 283. Validate/submit function unity_check_tool _user_form_validate( $form, &$form_state ) { // Length must be greater than or equal to zero if ( $form_state['values']['unity_check_tool_l'] < 0 ) { form_set_error( 'unity_check_tool_l', t('Initial length must be a value greater than or equal to zero') ); } } function unity_check_tool_user_form_submit( $form, $form_state ) { // Get the file $file = file_save_upload( 'unity_check_tool_input_file' ); // Gather the default values $defaults = array( 'l' => $form_state['values']['unity_check_tool_l'], 'material' => $form_state['values']['unity_check_tool_material'], 'tensile' => $form_state['values']['unity_check_tool_tensile'], 'elementtype' => $form_state['values']['unity_check_tool_elementtype'] ); // Now that the file is in the temporary directory, creae the calculation scheduler and let is process the file $scheduler = new uctScheduler(); $scheduler->processInputFile( $file, $defaults ); }
  280. 284. Block uitvoer function geolocate _block( $op = 'list', $delta = 0, $edit = array() ) { switch ( $op ) { default: case 'list': // Define the block $block = array( 0 => array( 'info' => geolocate_string(35), 'weight' => 0, 'status' => 1, 'region' => 'content' ) ); break; case 'save': case 'configure': // Nothing to save or configure break; case 'view': $result = db_query( “SELECT * FROM {users}” ); $output = '<div class=&quot;view-content&quot;><div class=&quot;item-list&quot;><ul>'; while ( $data = db_fetch_array( $result ) ) { $output .= geolocate_show_company_details( $data, $role_id, $distance ); } $output .= '</ul></div></div>'; $block = array( 'subject' => t('Aangesloten leden'), 'content' => $output ); break; } return $block; }
  281. 285. Toegangsrechten /** * hook_perm * * Declare permissions for UCT * * @return string[] Main permissions for the roles */ function unity_check_tool _perm() { return array( 'use unity check tool', 'import profbib for unity check tool', 'administer unity check tool' ); }
  282. 286. Admin settings formulier registratie function unity_check_tool _menu() { return array( // Administartor entry point 'admin/settings/unity_check_tool' => array( 'title' => 'Unity Check Tool', 'page callback' => 'drupal_get_form', 'page arguments' => array( 'unity_check_tool_admin_form' ), 'access arguments' => array( 'administer unity check tool' ), 'description' => 'Administer Unity Check Tool settings and data.', 'file' => 'unity_check_tool_admin.inc.php' ), 'admin/settings/unity_check_tool/admin' => array( 'title' => 'Settings', 'page callback' => 'drupal_get_form', 'page arguments' => array( 'unity_check_tool_admin_form' ), 'access arguments' => array( 'administer unity check tool' ), 'description' => 'Administer Unity Check Tool settings and data.', 'type' => MENU_DEFAULT_LOCAL_TASK, 'file' => 'unity_check_tool_admin.inc.php', 'weight' => -2 ), // Profbib admin entry point 'admin/settings/unity_check_tool/profbib' => array( 'title' => 'Profbib', 'page callback' => 'drupal_get_form', 'page arguments' => array( 'unity_check_tool_profbib_form' ), 'access arguments' => array( 'import profbib for unity check tool' ), 'description' => 'Import new or updated profbib element information into Unity Check Tool.', 'type' => MENU_LOCAL_TASK, 'file' => 'unity_check_tool_profbib.inc.php', 'weight' => -1 ) ); }
  283. 287. Admin settings formulier definitie function unity_check_tool _admin_form() { $form = array( 'unity_check_tool_job_lifetime' => array( '#type' => 'textfield', '#title' => 'Job lifetime [days]', '#default_value' => variable_get('unity_check_tool_job_lifetime', 30 ), '#size' => 4, '#maxlength' => 4, '#description' => 'The number of days to keep older jobs in the database', '#required' => true ), 'unity_check_tool_tensile_strength' => array( '#type' => 'textfield', '#title' => 'Default Young's modulus [N/mm^2]', '#default_value' => variable_get('unity_check_tool_tensile_strength', 210000 ), '#size' => 20, '#maxlength' => 20, '#description' => 'This is the tensile strength to use on all elements where none is defined', '#required' => true ), 'unity_check_tool_epsilon' => array( '#type' => 'textfield', '#title' => 'Default decision margin', '#default_value' => variable_get('unity_check_tool_epsilon', 0.05 ), '#size' => 20, '#maxlength' => 20, '#description' => 'If a unity check falls within this margin, it's considered a pass. I.e. 0.05 means 0.95&lt;=result&lt;=1.05 =&gt; pass', '#required' => true ) ); return system_settings_form( $form ); } function unity_check_tool_admin_form_validate( $form, &$form_state ) ...
  284. 288. Module-installatie <ul><li>Optioneel <modulenaam>.install bestand
  285. 289. Eigen tabellen? Dan zeker een .install bestand
  286. 290. Module in xxx.tar.gz </li><ul><li>Hele moduledirectory inpakken </li></ul></ul>
  287. 291. .install call sequence <ul><li>Module voor het eerst enablen </li><ul><li>hook_install() of hook_install_N() </li></ul><li>Module disablen </li><ul><li>Geen calls </li></ul><li>Module de-installeren </li><ul><li>hook_uninstall() </li></ul></ul>
  288. 292. .install bestand (1) /** * hook_install * * Install tables * * @return void */ function unity_check_tool _install() { drupal_install_schema( ' unity_check_tool ' ); } /** * hook_uninstall * * Uninstall tables * * @return void */ function unity_check_tool _uninstall() { drupal_uninstall_schema( ' unity_check_tool ' ); }
  289. 293. .install bestand (2) /** * hook_schema * * Create database tables * * @return array Database tables */ function unity_check_tool _schema() { return array( // Input classes table 'unity_check_tool_input_filters' => array( 'description' => t('UCT input filter classes to read calculation results data'), 'fields' => array( 'classname' => array( 'description' => t('Class name for input filter objects'), 'type' => 'varchar', 'length' => 255, 'not null' => true, 'default' => '' ), … ); }
  290. 294. Hosting
  291. 295. Systeemeisen <ul><li>Eenvoudige site </li><ul><li>32MB werkgeheugen
  292. 296. 3 MB file space voor Drupal code
  293. 297. 1 database, 60 tabellen, 6 MB </li></ul><li>Maar dan </li><ul><li>max_post_size, max_upload_size
  294. 298. max_execution_time 30..60 seconden
  295. 299. Extra modules = extra tabellen
  296. 300. Media bestanden </li></ul></ul>
  297. 301. Shared host <ul><li>E é n zaak belangrijk </li><ul><li>Owner van de files directory moet de web server user zijn </li></ul><li>Heb je maar 1 database? </li><ul><li>Tabel-prefix per site </li></ul><li>Geen cron? </li><ul><li>Cron handmatig of vanaf een andere host (wget) </li></ul></ul>
  298. 302. Dedicated host <ul><li>Gebruik bij voorkeur multi-site setup
  299. 303. Nadeel: shared code base </li></ul>
  300. 304. Q A

×