SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Drupal CMS
CMS:
píšu jen specifickou funkčnost
        Jak to funguje?
Modularita = znovupoužitelnost


 Modulární   architektura

 Modulární   témata

 Vývoj   vlastního modulu – Drupal API
Instalace:
next, next, next ...
Modulární architektura
Modulární architektura




  Jen 5 základních modulů


 přes 30 modulů v default instalaci
     volitelná jsou i menu, hledání, překlady,
      komentáře, blogy, fórum, ...
Základní moduly
<font color=quot;uglyquot;>Lorem</font> http://ipsum.com a spousta jiných zajímavostí ...
                                                       filter
<p>Lorem <a href=quot;http://ipsum.comquot;>http://ipsum.com</a> a spousta jiných zajímavostí ...</p>




                                                                     node
                user

     system
                          blocks
Další moduly
    „Navěsí se“ na základ


    Svá data si uloží do svých tabulek


    Příklad: comment.module
    Node table
       nid            user id           title                text
       1                1               Hello world
       2                1               Lorem                Ipsum ...
       3                1               Had leze z díry      vystrkuje kníry
    Comments table
      nid        id             replies to         user id      title          text
       1         1                NULL                1         Windowsy?      Určitě jo!

       2         2                NULL                1         Sic amet       del requiem

       1         3                  1                 2         Jojo…          Windows rulez
Hook = komunikace mezi moduly
                           Jááá    comments.module
      Renderujeme node,
      chcete k němu něco
            přidat?
                             taxonomy.module             Jááá
       Kdo implementuje
       hook_node( … )?
                                        vote.module
                           Moi aussi




Drupal core
                           taxonomy module hook_nodeapi($node...):
                           $node[“tags”][“content”] =
  OK, pošleme vám
                                   array( “tag1”, “tag2”);
   objekt node...
                           $node[“tags”][“weight”] = 60;
 Přidejte a uberte co
     potřebujete                   //mezi telo a komentare
Důležité hooky
    Oprávnění – hook_perm()

    function mymodule_perm() {
      return array( 'access mymodule',
                    'administer mymodule');
    }
     Přidej do tabulky ‘oprávnění’ tato dvě
Důležité hooky
    Menu a routing – hook_menu() položky

                           Název
function mymodule_menu() {
                                          v menu
   $items['admin/settings/uploadcv/edit/%'] = array(
        'title' => 'Edit consultant',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('uploadcv_admin_edit', 3, 4),
        'access arguments' => array('administer uploadcv'),
        'type' => MENU_CALLBACK,
        'parent' => 'admin/settings/uploadcv',
        'file' => 'uploadcv.admin.inc',
   );
}

     Přidej se do menu/routovací tabulky
Důležité hookyfunkce jejíž výstup
kde 3 a 4 = 3. a 4.
                                    se pošle uživateli
   parametr z url
 (počítáno routing – hook_menu()
   Menu a od 0)
function mymodule_menu() {
   $items['admin/settings/uploadcv/edit/%'] = array(
        'title' => 'Edit consultant',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('uploadcv_admin_edit', 3, 4),
        'access arguments' => array('administer uploadcv'),
        'type' => MENU_CALLBACK,
                                                     s těmito třemi
        'parent' => 'admin/settings/uploadcv',
        'file' => 'uploadcv.admin.inc',
                                                       parametry
   );
}

    Přidej se do menu/routovací user musí mít
                                 tabulky
                                   tato práva
Důležité hooky
    Menu a routing – hook_menu()              položka nebude v

                                                    menu
function mymodule_menu() {
   $items['admin/settings/uploadcv/edit/%'] = array(
        'title' => 'Edit consultant',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('uploadcv_admin_edit', 3, 4),
        'access arguments' => array('administer uploadcv'),
        'type' => MENU_CALLBACK,
                                                      rodič položky
        'parent' => 'admin/settings/uploadcv',
                                                (povede na něj odkaz)
        'file' => 'uploadcv.admin.inc',
   );
}

     Přidej se do menu/routovací tabulky
                                     soubor který se pro
                                    toto volání includuje
Forms API
Forms API




Definice formuláře,
                        Validace   Akce po odeslání
    zobrazení
Forms API
function mymodule_agreement() {
   return drupal_get_form('uploadcv_accept_form');
                                                zpracuj formulář s
}
                                                  tímto názvem
function mymodule_agreement_form() {
   //definice formuláře
}
function mymodule_agreement_validate($form_id, $form_values) {
   if ( $form_values['values']['legal_accept‘]==0 ) {
     form_set_error('legal_accept', t('You must accept to continue.'));
   } //podmínky – s nastavenou chybou formulář nezvaliduje
}
function mymodule_agreement_submit($form_id, $form_values) {
   drupal_set_message(t('Thank you for agreeing.'));
   drupal_goto(“login/nextstepquot;);
} //funkce _submit proběhne jen když _validate nenajde chybu
Forms API
$form = array();
                                       identifikace
$form['id'] = array(
                                        formuláře
    '#type' => 'value',
    '#value' => 'legal');
$form['legal'] = array(
     '#type' => 'fieldset',
     '#title' => t('Terms and Conditions of Use'),
     '#weight' => 29 );
$form['legal']['conditions'] = array(
     '#type' => 'item',
     '#title' => t('Terms & Conditions'),
     '#value' => 'Legal Blah blah',
     '#rows' => 10,
     '#weight' => 0,
     '#attributes' => array('readonly' => '')
     );
$form['legal']['legal_accept'] = array(
     '#type' => 'checkbox',
     '#title' => t('I accept Terms & Conditions of Use'),
     '#default_value' => 0,
     '#weight' => 50,
     '#required' => TRUE);
$form['save'] = array(
     '#type' => 'submit',
     '#value' => t('Proceed to upload'),
     '#weight' => 100);
return $form;
Forms API
$form = array();
$form['id'] = array(
     '#type' => 'value',
                                            fieldset s
     '#value' => 'legal');
                                           legendem
$form['legal'] = array(
    '#type' => 'fieldset',
    '#title' => t('Terms and Conditions of Use'),
    '#weight' => 29 );
$form['legal']['conditions'] = array(
     '#type' => 'item',
     '#title' => t('Terms & Conditions'),
     '#value' => 'Legal Blah blah',
     '#rows' => 10,
     '#weight' => 0,
     '#attributes' => array('readonly' => '')
     );
$form['legal']['legal_accept'] = array(
     '#type' => 'checkbox',
     '#title' => t('I accept Terms & Conditions of Use'),
     '#default_value' => 0,
     '#weight' => 50,
     '#required' => TRUE);
$form['save'] = array(
     '#type' => 'submit',
     '#value' => t('Proceed to upload'),
     '#weight' => 100);
return $form;
Forms API
$form = array();
$form['id'] = array(
     '#type' => 'value',
     '#value' => 'legal');
$form['legal'] = array(
     '#type' => 'fieldset',
     '#title' => t('Terms and Conditions of Use'),
     '#weight' => 29 );
$form['legal']['conditions'] = array(
    '#type' => 'item',
    '#title' => t('Terms & Conditions'),
    '#value' => 'Legal Blah blah',
    '#rows' => 10,
    '#weight' => 0,
                                                              item – prostě
    '#attributes' => array('readonly' => '')
                                                            text s nadpisem,
    );
$form['legal']['legal_accept'] = array(
                                                               je read only
     '#type' => 'checkbox',
     '#title' => t('I accept Terms & Conditions of Use'),
     '#default_value' => 0,
     '#weight' => 50,
     '#required' => TRUE);
$form['save'] = array(
     '#type' => 'submit',
     '#value' => t('Proceed to upload'),
     '#weight' => 100);
return $form;
Forms API
$form = array();
$form['id'] = array(
     '#type' => 'value',
     '#value' => 'legal');
$form['legal'] = array(
     '#type' => 'fieldset',
     '#title' => t('Terms and Conditions of Use'),
     '#weight' => 29 );
$form['legal']['conditions'] = array(
     '#type' => 'item',
     '#title' => t('Terms & Conditions'),
     '#value' => 'Legal Blah blah',
     '#rows' => 10,
     '#weight' => 0,
     '#attributes' => array('readonly' => '')
     );
$form['legal']['legal_accept'] = array(
    '#type' => 'checkbox',
    '#title' => t('I accept Terms & Conditions of Use'),
    '#default_value' => 0,
                                             checkbox – povinný:
    '#weight' => 50,
                                             required = TRUE
    '#required' => TRUE);
$form['save'] = array(
     '#type' => 'submit',
     '#value' => t('Proceed to upload'),
     '#weight' => 100);
return $form;
Forms API
$form = array();
$form['id'] = array(
     '#type' => 'value',
     '#value' => 'legal');
$form['legal'] = array(
     '#type' => 'fieldset',
     '#title' => t('Terms and Conditions of Use'),
     '#weight' => 29 );
$form['legal']['conditions'] = array(
     '#type' => 'item',
     '#title' => t('Terms & Conditions'),
     '#value' => 'Legal Blah blah',
     '#rows' => 10,
     '#weight' => 0,
     '#attributes' => array('readonly' => '')
     );
$form['legal']['legal_accept'] = array(
     '#type' => 'checkbox',
     '#title' => t('I accept Terms & Conditions of Use'),
     '#default_value' => 0,
     '#weight' => 50,
     '#required' => TRUE);
$form['save'] = array(
                                                            submit
    '#type' => 'submit',
                                                            weight rozhoduje o pořadí
    '#value' => t('Proceed to upload'),
    '#weight' => 100);
return $form;
Modul může:
  implementovat systémové hooky


 vytvořit vlastní hook

 využívat funkce Drupal API
       formuláře
       překlad textů
       abstrakce databáze
       posílání mailů
       upload souborů
       hledání
       node access – kontrola přístupu
Modulární témata
<?php print $header; ?>




                                <?php if ($right): ?>
                                <div id=quot;sidebar-right“>
                                   <?php =$right ?>
                                  </div>
<?php print $content_top; ?>    <?php endif; ?>




                        [themes/tema/tema.info]
                        regions[header] = header
                        regions[right] = right sidebar
                        regions[content_top] = content top
Konverze HTML pro Drupal:
    index.htm → themes/tema/page.tpl.php


    metadata → themes/tema/tema.info


    přidání <?php print $blok; ?>

     případně <?php if ($blok) { ?>wrapper<?php } ?>




             … a pár povinných formalit
Kdo ostyluje zbytek?
Modul poskytuje:
                              může změnit šablona
 Datovou strukturu

 Funkci pro převod datové struktury na HTML
    (konvence – vše je obalené divy s jednoznačnou třídou)
    CSS pro ostylování svého HTML

Time for…

Namedropping
The Onion
SpreadFirefox.com
CreativeBits.org
Moby.com
playboy.de
Otázky?

Weitere ähnliche Inhalte

Was ist angesagt?

Quiz Component For Joomla
Quiz Component For JoomlaQuiz Component For Joomla
Quiz Component For Joomla
guestebb21a
 
Twig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasTwig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadas
Javier Eguiluz
 
Un juego creado en php
Un juego creado en phpUn juego creado en php
Un juego creado en php
Erwin Lobo
 
Quiz Component For Joomla
Quiz Component For JoomlaQuiz Component For Joomla
Quiz Component For Joomla
guestebb21a
 
Introdução a python módulo c
Introdução a python   módulo cIntrodução a python   módulo c
Introdução a python módulo c
Jader Gabriel
 
Crud secara simultan ala php myadmin
Crud secara simultan ala php myadminCrud secara simultan ala php myadmin
Crud secara simultan ala php myadmin
Rizal Di Caprio
 

Was ist angesagt? (20)

Index2
Index2Index2
Index2
 
Palestra sobre MongoDB com PHP no PHP'n'Rio
Palestra sobre MongoDB com PHP no PHP'n'Rio Palestra sobre MongoDB com PHP no PHP'n'Rio
Palestra sobre MongoDB com PHP no PHP'n'Rio
 
Javascript and jQuery for Mobile
Javascript and jQuery for MobileJavascript and jQuery for Mobile
Javascript and jQuery for Mobile
 
Pimp your site with jQuery!
Pimp your site with jQuery!Pimp your site with jQuery!
Pimp your site with jQuery!
 
Quiz Component For Joomla
Quiz Component For JoomlaQuiz Component For Joomla
Quiz Component For Joomla
 
Twig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasTwig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadas
 
Un juego creado en php
Un juego creado en phpUn juego creado en php
Un juego creado en php
 
jQuery入門
jQuery入門jQuery入門
jQuery入門
 
Quiz Component For Joomla
Quiz Component For JoomlaQuiz Component For Joomla
Quiz Component For Joomla
 
Silex al límite
Silex al límiteSilex al límite
Silex al límite
 
Sandra sanchez
Sandra sanchezSandra sanchez
Sandra sanchez
 
Introdução a python módulo c
Introdução a python   módulo cIntrodução a python   módulo c
Introdução a python módulo c
 
Palestra PythonBrasil[8]
Palestra PythonBrasil[8]Palestra PythonBrasil[8]
Palestra PythonBrasil[8]
 
Jquery Framework
Jquery FrameworkJquery Framework
Jquery Framework
 
Peek inside the fantastical Ukrainian Village home and studio of artists Jare...
Peek inside the fantastical Ukrainian Village home and studio of artists Jare...Peek inside the fantastical Ukrainian Village home and studio of artists Jare...
Peek inside the fantastical Ukrainian Village home and studio of artists Jare...
 
Working With Ajax Frameworks
Working With Ajax FrameworksWorking With Ajax Frameworks
Working With Ajax Frameworks
 
Comparison Principle
Comparison PrincipleComparison Principle
Comparison Principle
 
Jquery Introduction Hebrew
Jquery Introduction HebrewJquery Introduction Hebrew
Jquery Introduction Hebrew
 
Crud secara simultan ala php myadmin
Crud secara simultan ala php myadminCrud secara simultan ala php myadmin
Crud secara simultan ala php myadmin
 
With enter
With enterWith enter
With enter
 

Drupal Cms Prezentace

  • 2. CMS: píšu jen specifickou funkčnost Jak to funguje?
  • 3. Modularita = znovupoužitelnost  Modulární architektura  Modulární témata  Vývoj vlastního modulu – Drupal API
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 11. Modulární architektura Jen 5 základních modulů   přes 30 modulů v default instalaci  volitelná jsou i menu, hledání, překlady, komentáře, blogy, fórum, ...
  • 12. Základní moduly <font color=quot;uglyquot;>Lorem</font> http://ipsum.com a spousta jiných zajímavostí ... filter <p>Lorem <a href=quot;http://ipsum.comquot;>http://ipsum.com</a> a spousta jiných zajímavostí ...</p> node user system blocks
  • 13. Další moduly „Navěsí se“ na základ  Svá data si uloží do svých tabulek  Příklad: comment.module Node table nid user id title text 1 1 Hello world 2 1 Lorem Ipsum ... 3 1 Had leze z díry vystrkuje kníry Comments table nid id replies to user id title text 1 1 NULL 1 Windowsy? Určitě jo! 2 2 NULL 1 Sic amet del requiem 1 3 1 2 Jojo… Windows rulez
  • 14. Hook = komunikace mezi moduly Jááá comments.module Renderujeme node, chcete k němu něco přidat? taxonomy.module Jááá Kdo implementuje hook_node( … )? vote.module Moi aussi Drupal core taxonomy module hook_nodeapi($node...): $node[“tags”][“content”] = OK, pošleme vám array( “tag1”, “tag2”); objekt node... $node[“tags”][“weight”] = 60; Přidejte a uberte co potřebujete //mezi telo a komentare
  • 15. Důležité hooky Oprávnění – hook_perm()  function mymodule_perm() { return array( 'access mymodule', 'administer mymodule'); }  Přidej do tabulky ‘oprávnění’ tato dvě
  • 16. Důležité hooky Menu a routing – hook_menu() položky  Název function mymodule_menu() { v menu $items['admin/settings/uploadcv/edit/%'] = array( 'title' => 'Edit consultant', 'page callback' => 'drupal_get_form', 'page arguments' => array('uploadcv_admin_edit', 3, 4), 'access arguments' => array('administer uploadcv'), 'type' => MENU_CALLBACK, 'parent' => 'admin/settings/uploadcv', 'file' => 'uploadcv.admin.inc', ); }  Přidej se do menu/routovací tabulky
  • 17. Důležité hookyfunkce jejíž výstup kde 3 a 4 = 3. a 4. se pošle uživateli parametr z url  (počítáno routing – hook_menu() Menu a od 0) function mymodule_menu() { $items['admin/settings/uploadcv/edit/%'] = array( 'title' => 'Edit consultant', 'page callback' => 'drupal_get_form', 'page arguments' => array('uploadcv_admin_edit', 3, 4), 'access arguments' => array('administer uploadcv'), 'type' => MENU_CALLBACK, s těmito třemi 'parent' => 'admin/settings/uploadcv', 'file' => 'uploadcv.admin.inc', parametry ); }  Přidej se do menu/routovací user musí mít tabulky tato práva
  • 18. Důležité hooky Menu a routing – hook_menu() položka nebude v  menu function mymodule_menu() { $items['admin/settings/uploadcv/edit/%'] = array( 'title' => 'Edit consultant', 'page callback' => 'drupal_get_form', 'page arguments' => array('uploadcv_admin_edit', 3, 4), 'access arguments' => array('administer uploadcv'), 'type' => MENU_CALLBACK, rodič položky 'parent' => 'admin/settings/uploadcv', (povede na něj odkaz) 'file' => 'uploadcv.admin.inc', ); }  Přidej se do menu/routovací tabulky soubor který se pro toto volání includuje
  • 20. Forms API Definice formuláře, Validace Akce po odeslání zobrazení
  • 21. Forms API function mymodule_agreement() { return drupal_get_form('uploadcv_accept_form'); zpracuj formulář s } tímto názvem function mymodule_agreement_form() { //definice formuláře } function mymodule_agreement_validate($form_id, $form_values) { if ( $form_values['values']['legal_accept‘]==0 ) { form_set_error('legal_accept', t('You must accept to continue.')); } //podmínky – s nastavenou chybou formulář nezvaliduje } function mymodule_agreement_submit($form_id, $form_values) { drupal_set_message(t('Thank you for agreeing.')); drupal_goto(“login/nextstepquot;); } //funkce _submit proběhne jen když _validate nenajde chybu
  • 22. Forms API $form = array(); identifikace $form['id'] = array( formuláře '#type' => 'value', '#value' => 'legal'); $form['legal'] = array( '#type' => 'fieldset', '#title' => t('Terms and Conditions of Use'), '#weight' => 29 ); $form['legal']['conditions'] = array( '#type' => 'item', '#title' => t('Terms & Conditions'), '#value' => 'Legal Blah blah', '#rows' => 10, '#weight' => 0, '#attributes' => array('readonly' => '') ); $form['legal']['legal_accept'] = array( '#type' => 'checkbox', '#title' => t('I accept Terms & Conditions of Use'), '#default_value' => 0, '#weight' => 50, '#required' => TRUE); $form['save'] = array( '#type' => 'submit', '#value' => t('Proceed to upload'), '#weight' => 100); return $form;
  • 23. Forms API $form = array(); $form['id'] = array( '#type' => 'value', fieldset s '#value' => 'legal'); legendem $form['legal'] = array( '#type' => 'fieldset', '#title' => t('Terms and Conditions of Use'), '#weight' => 29 ); $form['legal']['conditions'] = array( '#type' => 'item', '#title' => t('Terms & Conditions'), '#value' => 'Legal Blah blah', '#rows' => 10, '#weight' => 0, '#attributes' => array('readonly' => '') ); $form['legal']['legal_accept'] = array( '#type' => 'checkbox', '#title' => t('I accept Terms & Conditions of Use'), '#default_value' => 0, '#weight' => 50, '#required' => TRUE); $form['save'] = array( '#type' => 'submit', '#value' => t('Proceed to upload'), '#weight' => 100); return $form;
  • 24. Forms API $form = array(); $form['id'] = array( '#type' => 'value', '#value' => 'legal'); $form['legal'] = array( '#type' => 'fieldset', '#title' => t('Terms and Conditions of Use'), '#weight' => 29 ); $form['legal']['conditions'] = array( '#type' => 'item', '#title' => t('Terms & Conditions'), '#value' => 'Legal Blah blah', '#rows' => 10, '#weight' => 0, item – prostě '#attributes' => array('readonly' => '') text s nadpisem, ); $form['legal']['legal_accept'] = array( je read only '#type' => 'checkbox', '#title' => t('I accept Terms & Conditions of Use'), '#default_value' => 0, '#weight' => 50, '#required' => TRUE); $form['save'] = array( '#type' => 'submit', '#value' => t('Proceed to upload'), '#weight' => 100); return $form;
  • 25. Forms API $form = array(); $form['id'] = array( '#type' => 'value', '#value' => 'legal'); $form['legal'] = array( '#type' => 'fieldset', '#title' => t('Terms and Conditions of Use'), '#weight' => 29 ); $form['legal']['conditions'] = array( '#type' => 'item', '#title' => t('Terms & Conditions'), '#value' => 'Legal Blah blah', '#rows' => 10, '#weight' => 0, '#attributes' => array('readonly' => '') ); $form['legal']['legal_accept'] = array( '#type' => 'checkbox', '#title' => t('I accept Terms & Conditions of Use'), '#default_value' => 0, checkbox – povinný: '#weight' => 50, required = TRUE '#required' => TRUE); $form['save'] = array( '#type' => 'submit', '#value' => t('Proceed to upload'), '#weight' => 100); return $form;
  • 26. Forms API $form = array(); $form['id'] = array( '#type' => 'value', '#value' => 'legal'); $form['legal'] = array( '#type' => 'fieldset', '#title' => t('Terms and Conditions of Use'), '#weight' => 29 ); $form['legal']['conditions'] = array( '#type' => 'item', '#title' => t('Terms & Conditions'), '#value' => 'Legal Blah blah', '#rows' => 10, '#weight' => 0, '#attributes' => array('readonly' => '') ); $form['legal']['legal_accept'] = array( '#type' => 'checkbox', '#title' => t('I accept Terms & Conditions of Use'), '#default_value' => 0, '#weight' => 50, '#required' => TRUE); $form['save'] = array( submit '#type' => 'submit', weight rozhoduje o pořadí '#value' => t('Proceed to upload'), '#weight' => 100); return $form;
  • 27. Modul může: implementovat systémové hooky   vytvořit vlastní hook  využívat funkce Drupal API  formuláře  překlad textů  abstrakce databáze  posílání mailů  upload souborů  hledání  node access – kontrola přístupu
  • 29. <?php print $header; ?> <?php if ($right): ?> <div id=quot;sidebar-right“> <?php =$right ?> </div> <?php print $content_top; ?> <?php endif; ?> [themes/tema/tema.info] regions[header] = header regions[right] = right sidebar regions[content_top] = content top
  • 30. Konverze HTML pro Drupal: index.htm → themes/tema/page.tpl.php  metadata → themes/tema/tema.info  přidání <?php print $blok; ?>   případně <?php if ($blok) { ?>wrapper<?php } ?> … a pár povinných formalit
  • 31. Kdo ostyluje zbytek? Modul poskytuje: může změnit šablona  Datovou strukturu  Funkci pro převod datové struktury na HTML (konvence – vše je obalené divy s jednoznačnou třídou) CSS pro ostylování svého HTML 