drupal programavimas: praktika ir patarimai
TRANSCRIPT
![Page 1: Drupal Programavimas: praktika ir patarimai](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/2.jpg)
Drupal Programavimas Patarimai
Domas Monkus
![Page 3: Drupal Programavimas: praktika ir patarimai](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/3.jpg)
Drupal Programavimas Patarimai
Kas yra drupal?
![Page 4: Drupal Programavimas: praktika ir patarimai](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/4.jpg)
Drupal Programavimas Patarimai
Ką gali drupal?
![Page 5: Drupal Programavimas: praktika ir patarimai](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/6.jpg)
Drupal Programavimas Patarimai
Drupal pritaikymas savo reikmėms
![Page 7: Drupal Programavimas: praktika ir patarimai](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/7.jpg)
Drupal Programavimas Patarimai
Standartiniai drupal moduliai
![Page 8: Drupal Programavimas: praktika ir patarimai](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/10.jpg)
Drupal Programavimas Patarimai
Drupal šerdies komponentai
![Page 11: Drupal Programavimas: praktika ir patarimai](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/16.jpg)
Drupal Programavimas Patarimai
Hook’ų daugėja..
![Page 17: Drupal Programavimas: praktika ir patarimai](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/20.jpg)
Drupal Programavimas Patarimai
Pavyzdys: rezultatas
![Page 21: Drupal Programavimas: praktika ir patarimai](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/26.jpg)
Drupal Programavimas Patarimai
Nelįskite prie šerdies!
![Page 27: Drupal Programavimas: praktika ir patarimai](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/30.jpg)
Drupal Programavimas Patarimai
Testavimas
simpletest modulisunit testaineatskiriama Drupal šerdies patch review proceso dalisDrupal 7 - 82% testų padengimas
![Page 31: Drupal Programavimas: praktika ir patarimai](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/32.jpg)
Drupal Programavimas Patarimai
Kur ieškoti pagalbos?
drupal.org#drupal, #drupal-support (irc.freenode.net)drupal.lt
![Page 33: Drupal Programavimas: praktika ir patarimai](https://reader034.vdocuments.mx/reader034/viewer/2022051015/555de7c5d8b42a192c8b553f/html5/thumbnails/33.jpg)
Drupal Programavimas Patarimai
Klausimai?