• Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,523
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
7
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Drupal Programavimas Patarimai Drupal programavimas: principai ir patarimai Įvadas pradedantiems Domas Monkus domas@monkus.lt :: http://domas.monkus.lt 2009 lapkričio 3 d. Drupal konferencija Kaune
  • 2. Drupal Programavimas Patarimai Domas Monkus
  • 3. Drupal Programavimas Patarimai Kas yra drupal?
  • 4. Drupal Programavimas Patarimai Ką gali drupal?
  • 5. Drupal Programavimas Patarimai Kaip dirbti su drupal? 1 Diegiame drupal 2 Diegiame ir konfigūruojame reikiamus modulius 3 Dizainas ir lokalizacija 4 Rašome specifinius modulius
  • 6. Drupal Programavimas Patarimai Drupal pritaikymas savo reikmėms
  • 7. Drupal Programavimas Patarimai Standartiniai drupal moduliai
  • 8. Drupal Programavimas Patarimai Moduliai Views, CCK, Token, Pathauto, FileField, Administration menu, ImageField, ImageAPI, ImageCache, Date, IMCE, Google Analytics, Image, FCKeditor, Poormanscron, Advanced help, CAPTCHA, Webform, Link, Wysiwyg, Nodewords, Lightbox2, XML sitemap, Backup and Migrate, Calendar, Devel, Panels ...
  • 9. Drupal Programavimas Patarimai Kada reikia savo modulio? Klausimai 1 Ar tai dar nėra įgyvendinta? 2 Ar neįmanoma sukombinuoti kelių modulių? 3 Ar nėra nieko panašaus?
  • 10. Drupal Programavimas Patarimai Drupal šerdies komponentai
  • 11. Drupal Programavimas Patarimai Drupal architektūra arba ką reikia žinoti prieš pradedant Ne OOP - procedūrinis programavimas Modulinė architektūra Design patterns: inversion of control presentation-abstraction- control (PAC)
  • 12. Drupal Programavimas Patarimai Modulio sandara Kas yra modulis? funkcionalumas išvedimas paskirtis [modulis]/ modulis - aplankas [modulis].info* [modulis].module* sites/default/modules/.. [modulis].install sites/all/modules/.. … struktūra fiksuota
  • 13. Drupal Programavimas Patarimai Modulio informacija: [modulis].info Modulio informacija. Reikalinga modulių posistemei: modulių priklausomybės, versijos, aprašymai, grupavimas. Tekstinis failas. name = FileField description = Defines a file field type. dependencies[] = content package = CCK core = 6.x php = 5.2 version = "6.x-3.0-alpha5" core = "6.x" project = "filefield" datestamp = "1223412644"
  • 14. Drupal Programavimas Patarimai Diegimo instrukcijos: [modulis].install Veiksmai, kurie atliekami diegiant modulį. function filefield_install() { content_notify(’install’, ’filefield’); } Migracijų tarp versijų procedūros. function filefield_update_2() { cache_clear_all(’*’, ’cache_menu’, TRUE); return array(); }
  • 15. Drupal Programavimas Patarimai Hooks: Drupal varomoji jėga Kas yra hook’ai? Modulių funkcijos, kurios iškviečiamos tam tikrais užklausos apdorojimo (pvz. formos siuntimo) etapais drupal šerdies nuožiūra. Fiksuotos formos funkcijos function [modulis]_[hook](...) { ... }
  • 16. Drupal Programavimas Patarimai Hook’ų daugėja..
  • 17. Drupal Programavimas Patarimai Pavyzdys: blokai kaunas.module <?php function kaunas_block($op = ’list’, $delta = 0, $edit = array()) { if ($op == ’list’) { //pranešame apie tai, kokius blokus mokame paišyti $blocks = array(); $blocks[0] = array(’info’ => t(’Kauno Drupal blokas’), ’weight’ => 0, ’status’ => 1, ’region’ => ’left’); return $blocks; } else if ($op == ’view’) { //grąžiname bloko turinį // $delta - bloko nr. if ($delta == 0) { $block = array(’subject’ => t(’Drupal Kaune!’), ’content’ => _kaunas_logo()); return $block; } } } function _kaunas_logo() { //bloko turinys return ’<a href="http://drupal.lt/node/279"> <img src="http://drupal.lt/files/Image/DruapalCon2009_125.jpg" alt="Drupal konferencija" /> </a>’; }
  • 18. Drupal Programavimas Patarimai Pavyzdys: detaliau function kaunas_block($op = ’list’, $delta = 0, $edit = array()) $op - atliekamas veiksmas ’list’ - blokų sąrašas ’configure’ - blokų konfigūravimo forma ’save’ - bloko nustatymų saugojimas ’view’ - bloko išvedimas $delta - bloko nr. (pagal sąrašą) $edit - kai $op == ’save’ - formos duomenys
  • 19. Drupal Programavimas Patarimai Pavyzdys: detaliau if ($op == ’list’) { //pranešame apie tai, kokius blokus mokame išvesti $blocks = array(); $blocks[0] = array(’info’ => t(’Kauno Drupal blokas’), ’weight’ => 0, ’status’ => 1, ’region’ => ’left’); return $blocks; ...
  • 20. Drupal Programavimas Patarimai Pavyzdys: rezultatas
  • 21. Drupal Programavimas Patarimai Meniu sistema meniu valdymas URL dispatch prieigos kontrolė function hook_menu() Grąžinamas masyvas $items[’url’] = array( ’title’ => ’antraštė’, ’description’ => ’aprašymas’, ’page callback’ => ’puslapio funkcija’, ’access arguments’ => array(’prieiga’), ’type’ => TIPAS, );
  • 22. Drupal Programavimas Patarimai Meniu - pavyzdys function kaunas_menu() { $items = array(); $items[’kaunas’] = array( ’title’ => ’Kauno konferencija’, ’description’ => ’Kauno konferencijos puslapis’, ’page callback’ => ’_kaunas_logo’, ’access arguments’ => array(’access content’), ’type’ => MENU_NORMAL_ITEM, ); return $items; } http://localhost/drupal/kaunas
  • 23. Drupal Programavimas Patarimai Form API Formos elementas $form[’new’][’upload’] = array( ’#type’ => ’file’, ’#title’ => t(’Įkelk naują failą’), ’#size’ => 40, ); hook’ai: hook_form - elemento redagavimo forma hook_forms - modulio formų sąrašas hook_form_alter - bet kurios form API formos keitimas hook_[form_id]_alter - konkrečios formos keitimas
  • 24. Drupal Programavimas Patarimai Form API - pavyzdys function kaunas_form_user_login_alter(&$form, &$form_state) { $form[’kaunas’] = array( ’#type’ => ’checkbox’, ’#title’ => t("Esu iš Kauno"), ’#required’ => TRUE, ); }
  • 25. Drupal Programavimas Patarimai DB API(verta atskiro pranešimo) Nuo 6 versijos DB schema aprašoma nebe SQL’u. Nuo 7 versijos užklausų konstravimui naudojamas PDO! Lengvesnis darbas su kitais DB varikliais (postgreSQL, sqlite) Kol kas: $result = db_query_range(’SELECT n.nid, n.title, n.created FROM {node} n WHERE n.uid = %d’, $uid, 0, 10); while ($node = db_fetch_object($result)) { } Daugiau: http://api.drupal.org/api/group/database/6
  • 26. Drupal Programavimas Patarimai Nelįskite prie šerdies!
  • 27. Drupal Programavimas Patarimai Kodo standartai 1 Tarpai ir poslinkiai 2 Funkcijų iškvietimas ir deklaravimas 3 Komentarai ir dokumentacija 4 ... 5 http://drupal.org/coding-standards Įrankiai scripts/code-style.pl kelias/iki/modulio.module Coder modulis kodo kultūra modulių migravimas į naujesnes versijas paprasčiausios saugumo spragos
  • 28. Drupal Programavimas Patarimai Kodo našumas: kešavimas 1 statiniai kintamieji funkcijose function my_module_function($reset = FALSE) { static $my_data; if (!isset($my_data) || $reset) { ... 2 Drupal kešavimo funkcijos cache_set(’mano_info’, ’cache’, serialize($data)); 3 memcache modulis
  • 29. Drupal Programavimas Patarimai Kodo našumas: atmintis Modulio skaidymas į atskirus failus: $items[’views/ajax’] = array( ’title’ => ’Views’, ’page callback’ => ’views_ajax’, ’access callback’ => ’user_access’, ’access arguments’ => array(’access content’), ’description’ => ’Ajax callback for view loading.’, ’file’ => ’includes/ajax.inc’, ’type’ => MENU_CALLBACK, );
  • 30. Drupal Programavimas Patarimai Testavimas simpletest modulis unit testai neatskiriama Drupal šerdies patch review proceso dalis Drupal 7 - 82% testų padengimas
  • 31. Drupal Programavimas Patarimai Įrankiai Versijų kontrolė CVS, SVN, git, darcs, bazaar .. Naujasia drupal versija iš CVS: cvs -z6 -d:pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal checkout drupal Moduliai: devel - viskas nuo loginimo, dizaino nagrinėjimo iki pavyzdinio turinio generavimo coder - kodo kultūra drush - drupal komandinėje eilutėje
  • 32. Drupal Programavimas Patarimai Kur ieškoti pagalbos? drupal.org #drupal, #drupal-support (irc.freenode.net) drupal.lt
  • 33. Drupal Programavimas Patarimai Klausimai?