Weitere ähnliche Inhalte Ähnlich wie Drupal Development (Part 2) (20) Kürzlich hochgeladen (20) Drupal Development (Part 2)7. ...and change
behavior
http://www.flickr.com/photos/spiicytuna/188111824
10. $form[‘foo’] = array(
‘#type’ => ‘textarea’,
‘#required’ => TRUE,
‘#title’ => t(‘Your foo’),
‘#default_value’ => “Some text…”,
‘#resizable’ => TRUE,
);
11. $form[‘bar’] = array(
‘#type’ => ‘fieldset’,
‘#title’ => t(‘Several bars’),
‘#collapsible’ => TRUE,
‘#collapsed’ => FALSE,
);
13. $form[‘bar’][‘baz’] = array(
‘#type’ => ‘select’,
‘#title’ => t(‘Baz in a bar’),
‘#options’ => array(
1 => t(‘Option one’),
2 => t(‘Option two’),
3 => t(‘Option three’),
),
‘#multiple’ => TRUE,
‘#default_value’ => 2,
‘#weight’ => -10
);
15. function mymodule_settings_page() {
return drupal_get_form(‘mymodule_form’);
}
function mymodule_form() {
$form[‘foo’] = array(
‘#type’ => ‘textarea’,
‘#title’ => t(‘Your foo’),
‘#default_value’ => t(‘Enter your text here…’),
);
$form[‘submit’] = array(
‘#type’ => ‘submit’,
‘#value’ => t(‘Pity the foo’),
);
return $form;
}
16. function mymodule_settings_page() {
return drupal_get_form(‘mymodule_form’);
}
function mymodule_form() {
$form[‘foo’] = array(
‘#type’ => ‘textarea’,
‘#title’ => t(‘Your foo’),
‘#default_value’ => t(‘Enter your text here…’),
);
$form[‘submit’] = array(
‘#type’ => ‘submit’,
‘#value’ => t(‘Pity the foo’),
);
return $form;
}
17. function mymodule_form_alter($form, &$state, $id) {
if ($id == ‘yourmodule_form’) {
unset($form[‘your_field’]);
$form[‘my_extra_field’] = array(
‘#type’ => ‘textarea’,
‘#title’ => t(‘THIS field is mine.’,
‘#weight’ => -10,
);
$form[‘#validate’][] = ‘my_validation_code’;
$form[‘#submit’][] = ‘my_submit_code’;
}
}
18. function mymodule_form_validate($form, &$state) {
if ($state[‘values’][‘foo’] == ‘Yo Momma’) {
form_set_error(‘foo’, t(‘Show some respect.’));
}
}
function mymodule_form_submit($form, &$state) {
variable_set(‘my_foo’, $state[‘values’][‘foo’]);
}
19. Key Pieces
• Form ID
• Form Builder function
• Validation functions
• Submission functions
• “Form State”
24. function build_my_page() {
$output = ‘<h3>My stuff</h3>'
$records = get_records();
$output .= ‘<ul>’;
foreach ($records as $record) {
$output .= “<li>”. $record->name .”</li>”;
}
$output .= ‘</ul>’;
return $output;
}
25. function build_my_page() {
$output = ‘<h3>My stuff</h3>'
$records = get_records();
$output .= ‘<ul>’;
foreach ($records as $record) {
$output .= “<li>”. $record->name .”</li>”;
}
$output .= ‘</ul>’;
return $output;
}
function build_my_page() {
$records = get_records();
foreach ($records as $record) {
$items[] = $records->name;
}
return theme(‘item_list’,
$items, t(‘My stuff’));
}
26. function mymodule_theme() {
return array(
'mymodule_data' => array(
'arguments' => array(
'data' => NULL,
'option' => TRUE)));
}
function theme_mymodule_data($data, $option) {
$output = ‘<em>’. $data->foo .’</em>’;
if ($option) {
$output .= ‘ <b>’. $data->bar .’</b>’;
}
return $output;
}
30. function get_my_data($username) {
$sql = “SELECT * FROM users “;
$sql .= “WHERE name = ‘$username’”;
$results = mysql_query($sql);
return $results;
}
function get_my_data($username) {
$sql = “SELECT * FROM {users} u “;
$sql .= “WHERE u.name = ‘%s’”;
$results = db_query($sql, $username);
return $results;
}
34. $link = “<a href=‘/about-us’>About!</a>”;
http://www.mysite.com/node/1
http://www.mysite.com/seo-friendly-name
http://www.mysite.com/subdirectory/node/1
http://www.mysite.com/index.php?q=node/1
http://www.mysite.com/fr/node/1
35. $link = “<a href=‘/about-us’>About!</a>”;
http://www.mysite.com/node/1
http://www.mysite.com/seo-friendly-name
http://www.mysite.com/subdirectory/node/1
http://www.mysite.com/index.php?q=node/1
http://www.mysite.com/fr/node/1
$link = l($title, $url);
39. function my_message($name) {
return “This is your message, $name!”;
}
function my_message($name) {
$values = array(‘%name’ => $name);
$message = ‘This is your message, %name!’;
return t($message, $values);
}
42. /**
* Prepares a structured form array by adding required elements,
* executing any hook_form_alter functions, and optionally
* inserting a validation token to prevent tampering.
*
* @param $form_id
* A unique string identifying the form for validation,
* submission, theming, and hook_form_alter functions.
* @param $form
* An associative array containing the structure of the form.
* @param $form_state
* A keyed array containing the current state of the form.
* Passed in here so that hook_form_alter() calls can use it,
* as well.
*/
function drupal_prepare_form($form_id, &$form, &$form_state) {
// Actual codes goes here…
}
52. function get_my_data($name, $date) {
$sql = “SELECT * FROM {users} u “;
$sql .= “WHERE u.name = ‘%s’ ”;
$sql .= “AND u.created > %d ”;
$results = db_query($sql, $name, $date);
return $results;
}
53. function get_my_data($name, $date) {
$sql = “SELECT * FROM {users} u “;
$sql .= “WHERE u.name = ‘%s’ ”;
$sql .= “AND u.created > %d ”;
$results = db_query($sql, $name, $date);
return $results;
}
%s, %d, %f, and %b are your friends
71. function my_module_stuff($reset = FALSE) {
static $stuff;
if (!isset($stuff) || $reset) {
if (!$reset && ($cache = cache_get('my_stuff'))) {
$stuff = $cache->data;
make your
}
else {
own cache
// Do your expensive calculations here,
// and populate $my_data with stuff..
cache_set('my_stuff', $stuff);
}
}
return $stuff;
}
78. • Always use FormAPI
• Follow best practices (Coder helps!)
• It’s always the DB’s fault (cache)
• Don’t trust anyone (sanitize output)
• Participate!
Hinweis der Redaktion
http://www.flickr.com/photos/mhzmaster/1004261881
wrote forms in straight html
duplicated workflow code
duplicated security code (hopefully)
hack, hack, hack to customize
build arrays to describe the form
use standard workflow (drupal_get_form())
security is automatic
THEN render to HTML.