Tjena!
Sitter och uppdaterar mig lite med Drupal 7:s API. Jag är väl inte direkt kung på att bygga moduler, men har gjort en del iallafall och håller på att lära mig.
Men nu är det en sak, där jag måste missa något, för jag förstår inte hur detta är gjort.
Kollar man på node.module (Drupal 7), så har dom en hook_menu funktion som bl.a. tillhandahåller länkar för att administrera innehållstyper.
Om man kollar på sökvägen för att radera innehållstyper:
$items['admin/structure/types/manage/%node_type/delete'] = array(
'title' => 'Delete',
'page arguments' => array('node_type_delete_confirm', 4),
'access arguments' => array('administer content types'),
'file' => 'content_types.inc',
);
Här är ju %node_type en placeholder, där innehållstypens namn sätts. Så som jag tidigare byggt moduler så kanske jag skickar med ett id där. Som jag sedan i delete-funktionen kan hämta från databasen.
Men kollar man på funktionen som anropas "node_type_delete_confirm":
function node_type_delete_confirm($form, &$form_state, $type) {
$form['type'] = array('#type' => 'value', '#value' => $type->type);
$form['name'] = array('#type' => 'value', '#value' => $type->name);
Här är ju variabeln $type, redan ett objekt som innehåller den content_type som ska raderas.
Likaså i funktionen för att skapa/redigera innehållstyper. Där är variablen $type ett färdigt bojekt som innehåller all information om den innehållstyp som ska redigeras. Dom hämtar aldrig någon sådan info från databasen i dessa funktioner.
Hur är detta gjort? Var är funktionen som plockar node-typen från url:en och gör om den till ett objekt?
Missar jag något? Eller är jag helt ute och cyklar? :)
M.V.H. Johan
Comments
Auto loader
Du är inte alls ute och cyklar. Det finns ett auto loader-api kopplat till hook_menu() som är lite svårt att hänga med på bara genom att läsa koden. På dokumentationssidan för hook_menu() kan man läsa:
Det är alltså den där "%node_type" som är nyckeln. I och med att det inte bara står "%" så letar Drupal automatiskt upp en funktion som heter node_type_load() och låter den ladda objektet med det ID man skickar in. Resultatet skickas sedan till sidans callback-funktion. Det här är tänkt att förenkla modulbyggandet genom att objekt alltid laddas via en central funktion, men det är som sagt lite svårt att fatta vad det är som händer om man inte är välbekant med APIt.
/ Hannes Lilljequist – SthlmConnection
Ah!! Då är jag med :) Tack
Ah!! Då är jag med :)
Tack för infon!