Drupal Programavimas: praktika ir patarimai
-
Upload
tasdomas -
Category
Technology
-
view
2.660 -
download
9
Transcript of 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
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 drupal2 Diegiame ir konfigūruojame
reikiamus modulius3 Dizainas ir lokalizacija4 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, Advancedhelp, CAPTCHA, Webform, Link,Wysiwyg, Nodewords, Lightbox2, XMLsitemap, Backup and Migrate, Calendar, Devel, Panels
...
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?
Drupal Programavimas Patarimai
Drupal šerdies komponentai
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)
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
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"
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žklausosapdorojimo (pvz. formos siuntimo) etapais drupal šerdiesnuožiūra.
Fiksuotos formos funkcijosfunction [modulis]_[hook](...) {
...}
Drupal Programavimas Patarimai
Hook’ų daugėja..
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>’;}
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 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,);
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 formahook_forms - modulio formų sąrašashook_form_alter - bet kurios form API formos keitimashook_[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 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
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
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 modulisunit testaineatskiriama Drupal šerdies patch review proceso dalisDrupal 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:[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
Drupal Programavimas Patarimai
Kur ieškoti pagalbos?
drupal.org#drupal, #drupal-support (irc.freenode.net)drupal.lt
Drupal Programavimas Patarimai
Klausimai?