33
Drupal Programavimas Patarimai Drupal programavimas: principai ir patarimai Įvadas pradedantiems Domas Monkus [email protected] :: http://domas.monkus.lt 2009 lapkričio 3 d. Drupal konferencija Kaune

Drupal Programavimas: praktika ir patarimai

Embed Size (px)

Citation preview

Page 1: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Drupal programavimas: principai ir patarimaiĮvadas pradedantiems

Domas [email protected] :: http://domas.monkus.lt

2009 lapkričio 3 d.Drupal konferencija Kaune

Page 2: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Domas Monkus

Page 3: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Kas yra drupal?

Page 4: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Ką gali drupal?

Page 5: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Kaip dirbti su drupal?

1 Diegiame drupal2 Diegiame ir konfigūruojame

reikiamus modulius3 Dizainas ir lokalizacija4 Rašome specifinius

modulius

Page 6: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Drupal pritaikymas savo reikmėms

Page 7: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Standartiniai drupal moduliai

Page 8: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Moduliai

Views, CCK, Token, Pathauto,FileField, Administration menu,ImageField, ImageAPI, ImageCache,Date, IMCE, Google Analytics, Image,FCKeditor, Poormanscron, Advancedhelp, CAPTCHA, Webform, Link,Wysiwyg, Nodewords, Lightbox2, XMLsitemap, Backup and Migrate, Calendar, Devel, Panels

...

Page 9: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Kada reikia savo modulio?

Klausimai1 Ar tai dar nėra įgyvendinta?2 Ar neįmanoma sukombinuoti kelių modulių?3 Ar nėra nieko panašaus?

Page 10: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Drupal šerdies komponentai

Page 11: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Drupal architektūra arba ką reikia žinoti prieš pradedant

Ne OOP - procedūrinisprogramavimasModulinė architektūraDesign patterns:

inversion of controlpresentation-abstraction-control(PAC)

Page 12: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Modulio sandara

Kas yra modulis?funkcionalumasišvedimaspaskirtis

[modulis]/[modulis].info*[modulis].module*[modulis].install…

modulis - aplankassites/default/modules/..sites/all/modules/..struktūra fiksuota

Page 13: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Modulio informacija: [modulis].info

Modulio informacija.Reikalinga modulių posistemei: modulių priklausomybės,versijos, aprašymai, grupavimas.Tekstinis failas.

name = FileFielddescription = Defines a file field type.dependencies[] = contentpackage = CCKcore = 6.xphp = 5.2

version = "6.x-3.0-alpha5"core = "6.x"project = "filefield"datestamp = "1223412644"

Page 14: Drupal Programavimas: praktika ir patarimai

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();

}

Page 15: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Hooks: Drupal varomoji jėga

Kas yra hook’ai?Modulių funkcijos, kurios iškviečiamos tam tikrais užklausosapdorojimo (pvz. formos siuntimo) etapais drupal šerdiesnuožiūra.

Fiksuotos formos funkcijosfunction [modulis]_[hook](...) {

...}

Page 16: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Hook’ų daugėja..

Page 17: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Pavyzdys: blokaikaunas.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 turinysreturn ’<a href="http://drupal.lt/node/279">

<img src="http://drupal.lt/files/Image/DruapalCon2009_125.jpg"alt="Drupal konferencija" />

</a>’;}

Page 18: Drupal Programavimas: praktika ir patarimai

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

Page 19: Drupal Programavimas: praktika ir patarimai

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;...

Page 20: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Pavyzdys: rezultatas

Page 21: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Meniu sistema

meniu valdymasURL dispatchprieigos 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,);

Page 22: Drupal Programavimas: praktika ir patarimai

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

Page 23: Drupal Programavimas: praktika ir patarimai

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 formahook_forms - modulio formų sąrašashook_form_alter - bet kurios form API formos keitimashook_[form_id]_alter - konkrečios formos keitimas

Page 24: Drupal Programavimas: praktika ir patarimai

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,

);}

Page 25: Drupal Programavimas: praktika ir patarimai

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

Page 26: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Nelįskite prie šerdies!

Page 27: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Kodo standartai

1 Tarpai ir poslinkiai2 Funkcijų iškvietimas ir deklaravimas3 Komentarai ir dokumentacija4 ...5 http://drupal.org/coding-standards

Įrankiaiscripts/code-style.pl kelias/iki/modulio.moduleCoder modulis

kodo kultūramodulių migravimas į naujesnes versijaspaprasčiausios saugumo spragos

Page 28: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Kodo našumas: kešavimas

1 statiniai kintamieji funkcijosefunction my_module_function($reset = FALSE) {

static $my_data;if (!isset($my_data) || $reset) {...

2 Drupal kešavimo funkcijoscache_set(’mano_info’, ’cache’, serialize($data));

3 memcache modulis

Page 29: Drupal Programavimas: praktika ir patarimai

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,

);

Page 30: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Testavimas

simpletest modulisunit testaineatskiriama Drupal šerdies patch review proceso dalisDrupal 7 - 82% testų padengimas

Page 31: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Įrankiai

Versijų kontrolė CVS, SVN, git, darcs, bazaar ..Naujasia drupal versija iš CVS:cvs -z6 -d:pserver:anonymous:[email protected]:/cvs/drupal checkout drupal

Moduliai:devel - viskas nuo loginimo, dizaino nagrinėjimo ikipavyzdinio turinio generavimocoder - kodo kultūradrush - drupal komandinėje eilutėje

Page 32: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Kur ieškoti pagalbos?

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

Page 33: Drupal Programavimas: praktika ir patarimai

Drupal Programavimas Patarimai

Klausimai?