drupal programavimas: praktika ir patarimai

Post on 21-May-2015

2.660 Views

Category:

Technology

9 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Drupal Programavimas Patarimai

Drupal programavimas: principai ir patarimaiĮvadas pradedantiems

Domas Monkusdomas@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 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:anonymous@cvs.drupal.org:/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?

top related