SlideShare a Scribd company logo
1 of 33
Download to read offline
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
Drupal    Programavimas   Patarimai




         Domas Monkus
Drupal            Programavimas   Patarimai



Kas yra drupal?
Drupal            Programavimas   Patarimai



Ką gali drupal?
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
Drupal                 Programavimas   Patarimai



Drupal pritaikymas savo reikmėms
Drupal                   Programavimas   Patarimai



Standartiniai drupal moduliai
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

   ...
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?
Drupal                 Programavimas   Patarimai



Drupal šerdies komponentai
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)
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
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"
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();
         }
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](...) {
                ...
             }
Drupal             Programavimas   Patarimai



Hook’ų daugėja..
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>’;
         }
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
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;
          ...
Drupal                 Programavimas   Patarimai



Pavyzdys: rezultatas
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,
      );
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
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
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,
           );
         }
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
Drupal                    Programavimas   Patarimai



Nelįskite prie šerdies!
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
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
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,
         );
Drupal                         Programavimas                      Patarimai



Testavimas




         simpletest modulis
         unit testai
         neatskiriama Drupal šerdies patch review proceso dalis
         Drupal 7 - 82% testų padengimas
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
Drupal                        Programavimas            Patarimai



Kur ieškoti pagalbos?




         drupal.org
         #drupal, #drupal-support (irc.freenode.net)
         drupal.lt
Drupal   Programavimas   Patarimai




         Klausimai?

More Related Content

Viewers also liked

Managing The Portfolio
Managing The PortfolioManaging The Portfolio
Managing The Portfoliostuart1403
 
Past Tense Invitation Review Q Words
Past Tense Invitation Review Q WordsPast Tense Invitation Review Q Words
Past Tense Invitation Review Q Wordskarenthesecretary
 
Programme Assurance Questionnaire V1.4
Programme Assurance Questionnaire V1.4Programme Assurance Questionnaire V1.4
Programme Assurance Questionnaire V1.4stuart1403
 
actividad del modulo 7
actividad del modulo 7actividad del modulo 7
actividad del modulo 7erick
 
Maddison Ward Talent Led Programmes Public
Maddison Ward Talent Led Programmes PublicMaddison Ward Talent Led Programmes Public
Maddison Ward Talent Led Programmes Publicstuart1403
 
Director Research - Hype Williams
Director Research - Hype WilliamsDirector Research - Hype Williams
Director Research - Hype Williamsguesta44db78
 
Actividad modulo7
Actividad modulo7Actividad modulo7
Actividad modulo7erick
 
художественная культура нидерландов
художественная культура нидерландовхудожественная культура нидерландов
художественная культура нидерландовAnnGo
 
Target Operating Model Definition
Target Operating Model DefinitionTarget Operating Model Definition
Target Operating Model Definitionstuart1403
 

Viewers also liked (11)

Managing The Portfolio
Managing The PortfolioManaging The Portfolio
Managing The Portfolio
 
Past Tense Invitation Review Q Words
Past Tense Invitation Review Q WordsPast Tense Invitation Review Q Words
Past Tense Invitation Review Q Words
 
Programme Assurance Questionnaire V1.4
Programme Assurance Questionnaire V1.4Programme Assurance Questionnaire V1.4
Programme Assurance Questionnaire V1.4
 
actividad del modulo 7
actividad del modulo 7actividad del modulo 7
actividad del modulo 7
 
Maddison Ward Talent Led Programmes Public
Maddison Ward Talent Led Programmes PublicMaddison Ward Talent Led Programmes Public
Maddison Ward Talent Led Programmes Public
 
Director Research - Hype Williams
Director Research - Hype WilliamsDirector Research - Hype Williams
Director Research - Hype Williams
 
Actividad modulo7
Actividad modulo7Actividad modulo7
Actividad modulo7
 
художественная культура нидерландов
художественная культура нидерландовхудожественная культура нидерландов
художественная культура нидерландов
 
corevalue ppt
corevalue pptcorevalue ppt
corevalue ppt
 
Target Operating Model Definition
Target Operating Model DefinitionTarget Operating Model Definition
Target Operating Model Definition
 
Calendario Escolar 2017
Calendario Escolar 2017Calendario Escolar 2017
Calendario Escolar 2017
 

Drupal Programavimas: praktika ir patarimai

  • 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?