際際滷

際際滷Share a Scribd company logo
Drupal                       Programavimas                 Patarimai




         Drupal programavimas: principai ir patarimai
                        町vadas pradedantiems


                           Domas Monkus
               domas@monkus.lt :: http://domas.monkus.lt



                          2009 lapkriio 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 kon鍖g笛ruojame
             reikiamus modulius
         3   Dizainas ir lokalizacija
         4   Ra邸ome speci鍖nius
             modulius
Drupal                 Programavimas   Patarimai



Drupal pritaikymas savo reikmms
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 nra 眺gyvendinta?

                2   Ar ne眺manoma sukombinuoti keli迭 moduli迭?
                3   Ar nra 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 鍖ksuota
Drupal                                Programavimas                   Patarimai



Modulio informacija: [modulis].info

             Modulio informacija.
             Reikalinga moduli迭 posistemei: moduli迭 priklausomybs,
             versijos, apra邸ymai, grupavimas.
             Tekstinis failas.
         name = FileField
         description = De鍖nes a 鍖le 鍖eld type.
         dependencies[] = content
         package = CCK
         core = 6.x
         php = 5.2

         version = "6.x-3.0-alpha5"
         core = "6.x"
         project = "鍖le鍖eld"
         datestamp = "1223412644"
Drupal                             Programavimas       Patarimai



Diegimo instrukcijos: [modulis].install



         Veiksmai, kurie atliekami diegiant modul眺.
         function 鍖le鍖eld_install() {
           content_notify(install, 鍖le鍖eld);
         }
         Migracij迭 tarp versij迭 proced笛ros.
         function 鍖le鍖eld_update_2() {
           cache_clear_all(*, cache_menu, TRUE);
           return array();
         }
Drupal                               Programavimas                      Patarimai



Hooks:        Drupal varomoji jga




         Kas yra hookai?
         Moduli迭 funkcijos, kurios i邸kvieiamos tam tikrais u転klausos
         apdorojimo (pvz. formos siuntimo) etapais drupal 邸erdies
         nuo転i笛ra.

             Fiksuotos formos funkcijos
             function [modulis]_[hook](...) {
                ...
             }
Drupal             Programavimas   Patarimai



Hook迭 daugja..
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=/tasdomas/drupal-programavimas-praktika-ir-patarimai/"http:/drupal.lt/鍖les/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迭 sra邸as
              con鍖gure - blok迭 kon鍖g笛ravimo forma
              save - bloko nustatym迭 saugojimas
              view - bloko i邸vedimas
         $delta - bloko nr. (pagal sra邸)
         $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 => 鍖le,
           #title => t(町kelk nauj fail),
           #size => 40,
         );

         hookai:
              hook_form - elemento redagavimo forma
              hook_forms - modulio form迭 sra邸as
              hook_form_alter - bet kurios form API formos keitimas
              hook_[form_id]_alter - konkreios 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 SQLu.
         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
                     paprasiausios 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.,
          鍖le => 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 nagrinjimo iki
               pavyzdinio turinio generavimo
               coder - kodo kult笛ra
               drush - drupal komandinje eilutje
Drupal                        Programavimas            Patarimai



Kur ie邸koti pagalbos?




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




         Klausimai?

More Related Content

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 lapkriio 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 kon鍖g笛ruojame reikiamus modulius 3 Dizainas ir lokalizacija 4 Ra邸ome speci鍖nius modulius
  • 6. Drupal Programavimas Patarimai Drupal pritaikymas savo reikmms
  • 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 nra 眺gyvendinta? 2 Ar ne眺manoma sukombinuoti keli迭 moduli迭? 3 Ar nra 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 鍖ksuota
  • 13. Drupal Programavimas Patarimai Modulio informacija: [modulis].info Modulio informacija. Reikalinga moduli迭 posistemei: moduli迭 priklausomybs, versijos, apra邸ymai, grupavimas. Tekstinis failas. name = FileField description = De鍖nes a 鍖le 鍖eld type. dependencies[] = content package = CCK core = 6.x php = 5.2 version = "6.x-3.0-alpha5" core = "6.x" project = "鍖le鍖eld" datestamp = "1223412644"
  • 14. Drupal Programavimas Patarimai Diegimo instrukcijos: [modulis].install Veiksmai, kurie atliekami diegiant modul眺. function 鍖le鍖eld_install() { content_notify(install, 鍖le鍖eld); } Migracij迭 tarp versij迭 proced笛ros. function 鍖le鍖eld_update_2() { cache_clear_all(*, cache_menu, TRUE); return array(); }
  • 15. Drupal Programavimas Patarimai Hooks: Drupal varomoji jga Kas yra hookai? Moduli迭 funkcijos, kurios i邸kvieiamos 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迭 daugja..
  • 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=/tasdomas/drupal-programavimas-praktika-ir-patarimai/"http:/drupal.lt/鍖les/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迭 sra邸as con鍖gure - blok迭 kon鍖g笛ravimo forma save - bloko nustatym迭 saugojimas view - bloko i邸vedimas $delta - bloko nr. (pagal sra邸) $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 => 鍖le, #title => t(町kelk nauj fail), #size => 40, ); hookai: hook_form - elemento redagavimo forma hook_forms - modulio form迭 sra邸as hook_form_alter - bet kurios form API formos keitimas hook_[form_id]_alter - konkreios 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 SQLu. 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 paprasiausios 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., 鍖le => 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 nagrinjimo iki pavyzdinio turinio generavimo coder - kodo kult笛ra drush - drupal komandinje eilutje
  • 32. Drupal Programavimas Patarimai Kur ie邸koti pagalbos? drupal.org #drupal, #drupal-support (irc.freenode.net) drupal.lt
  • 33. Drupal Programavimas Patarimai Klausimai?