Ha új tartalomtípust (content type) szeretnénk létrehozni a modulunkban, az alábbi angol nyelvű oldalt érdemes elolvasni.
Create new content-type for Drupal 6.x
Egyéb hasznos linkek a témához:
Forms API Reference
Form Generation
Egy modulban több új tartalomtípus
És alább következik a .module fájl kódja (erősen lecsupaszítva, néhány magyarázattal)
A saját névre behelyettesítendő részek magyarázata:
Például:
<?php
/**
* Implementation of hook_node_info().
* Az új tartalom típusról lehet itt megadni információkat. A minimálisan szükséges infók: name, module, description.
* Egyéb, opcionálisan megadható infók:
* - help: (szöveg - alapból '') Súgó szöveg, amely az új tartalmi elem létrehozásakor a lap tetején jelenik majd meg
* - has_title: (logikai - alapból TRUE) Legyen-e 'tite' mező
* - title_label: (szöveg - alapból 'Title') Mi legyen a 'title' mező felirata
* - has_body: (logikai - alapból TRUE) Legyen-e 'body' mező
* - body_label: (szöveg - alapból 'Body') Mi legyen a 'body' mező felirata
* - min_word_count: (egész szám - alapból 0) A 'body' mező minimlis szóhossza
* - locked: (logikai - alapból TRUE) Módosíthassa-e a tartalomtípus gép-nevét az adminisztrátor
*/
function TECHNICAL-NAME_node_info() {
return array(
'TECHNICAL-NAME' => array(
'name' => t('USER-FRIENDLY-NAME'),
'module' => 'TECHNICAL-NAME',
'description' => "CREATE-CONTENT-DESCRIPTION",
)
);
}
/**
* Implementation of hook_perm().
* Itt soroljuk fel milyen jogosultságokat akarunk megkülönböztetni a modul használói körében.
*/
function TECHNICAL-NAME_perm() {
return array('create TECHNICAL-NAME', 'edit own TECHNICAL-NAME');
}
/**
* Implementation of hook_access().
* Itt szabályozzuk, hogy mely műveleteket ki hajthatja végre.
* Az $op lehetséges értékei alapértelmezésben: create, delete, update, view
*/
function TECHNICAL-NAME_access($op, $node) {
global $user;
if ($op == 'create') {
// Only users with permission to do so may create this node type.
return user_access('create TECHNICAL-NAME');
}
// Users who create a node may edit or delete it later, assuming they have the
// necessary permissions.
if ($op == 'update' || $op == 'delete') {
if (user_access('edit own TECHNICAL-NAME') && ($user->uid == $node->uid)) {
return TRUE;
}
}
}
/**
* Implementation of hook_form().
* A formot leíró hook-ban a különböző adatbeviteli mezőket definiáljuk.
* A használható mezők típusainak leírása itt olvasható: forms_api_reference
*/
function TECHNICAL-NAME_form(&$node) {
$type = node_get_types('type', $node);
// We need to define form elements for the node's title and body.
$form['title'] = array(
'#type' => 'textfield',
'#title' => check_plain($type->title_label),
'#required' => TRUE,
'#default_value' => $node->title,
'#weight' => -5
);
// We want the body and filter elements to be adjacent. We could try doing
// this by setting their weights, but another module might add elements to the
// form with the same weights and end up between ours. By putting them into a
// sub-array together, we're able force them to be rendered together.
$form['body_filter']['body'] = array(
'#type' => 'textarea',
'#title' => check_plain($type->body_label),
'#default_value' => $node->body,
'#required' => FALSE
);
$form['body_filter']['filter'] = filter_form($node->format);
// NOTE in node_example there is some addition code here not needed for this simple node-type
return $form;
}
/**
* Implementation of hook_help().
*/
function TECHNICAL-NAME_help($path, $arg) {
switch ($path) {
case 'admin/help#TECHNICAL-NAME':
return '<p>' . t('ADMIN-HELP-TEXT') . '</p>';
break;
}
}
?>
Egy modulban több új tartalomtípus
Ha egy modulban több új tartalomtípust szeretnénk létrehozni akkor a hook_node_info függvényben kell a 'module' bejegyzéseiken módosítani, és a két függvényt (hook_access és hook_form) külön-külön mindegyik új tartalomtípusra megírni a fentiek szerint.
Például:
<?php
function TECHNICAL-NAME_node_info() {
return array(
'type1' => array(
'module' => 'TECHNICAL-NAME_type1'
),
'type2' => array(
'module' => 'TECHNICAL-NAME_type2'
)
);
}
function TECHNICAL-NAME_type1_form();
function TECHNICAL-NAME_type1_access();
function TECHNICAL-NAME_type2_form();
function TECHNICAL-NAME_type2_access(); ?>