creazione menu_router

3 contenuti / 0 new
Ultimo contenuto
creazione menu_router

Salve,

Attraverso hook_menu creo dei normalissimi menu tranquillamente.
Avrei però adesso la necessità di creare un menu router, ad esempio come node/%node.

Il codice di questo menu item è ciò che mi sarei aspettato, e cioè la definizione di title, page, access e type.
Sul database, precisamente nella tabella menu_router, le seguenti colonne load_functions (in questo caso node_load) e path (definita come node/%) hanno dei valori inaspettati - poiché io ignoro -.
Una sola stranezza nella definizione nello hook_menu: "'page arguments' => array(1),"; che significherebbe quell'array(1)?

Non avendo trovato materiale su internet che mi permettesse di creare un router, metto su un test, creando due menu item del tutto simili a node e node/%node; ma qui iniziano le sorprese.
Non ho modo di indicare la load_functions e il page arguments ha parametri un po' strani che non saprei spiegare - alla fine ho passato 1 come per node -.
Sul database, sempre nella medesima tabella, il mio finto menu_router manca infatti di load_functions (senza la quale il page callback non si ritrova la variabile ricavata dalla load_functions direttamente dal placeholder della path) e la path è identica alla definizione nel mio hook_menu e non come per node che, definita come node/%node su script, su database abbiamo invece node/%.

La domanda è: come si crea un menu router?
Non sembra una cosa aliena visto che, oltre a node, si ha per forum, taxonomy...

Uno sguardo sotto il cofano...

Felagund wrote:
...Il codice di questo menu item è ciò che mi sarei aspettato, e cioè la definizione di title, page, access e type.
Sul database, precisamente nella tabella menu_router, le seguenti colonne load_functions (in questo caso node_load) e path (definita come node/%) hanno dei valori inaspettati - poiché io ignoro -.
Una sola stranezza nella definizione nello hook_menu: "'page arguments' => array(1),"; che significherebbe quell'array(1)?

Definisce dove nel URL si trova gli argomenti che Drupal deve passare. L'URL è node/%, quindi il '%' corresponde al elemento 1 (node è elemento 0)

Felagund wrote:
Non avendo trovato materiale su internet che mi permettesse di creare un router, metto su un test, creando due menu item del tutto simili a node e node/%node; ma qui iniziano le sorprese.
Non ho modo di indicare la load_functions e il page arguments ha parametri un po' strani che non saprei spiegare - alla fine ho passato 1 come per node -.
Sul database, sempre nella medesima tabella, il mio finto menu_router manca infatti di load_functions (senza la quale il page callback non si ritrova la variabile ricavata dalla load_functions direttamente dal placeholder della path) e la path è identica alla definizione nel mio hook_menu e non come per node che, definita come node/%node su script, su database abbiamo invece node/%.

Tutto viene creato in codice...

Felagund wrote:
La domanda è: come si crea un menu router?
Non sembra una cosa aliena visto che, oltre a node, si ha per forum, taxonomy...

Andiamo a vedere. Vai in modules/node, apri node.module cerca 'node/%' se vuoi o vai alla riga 1518:
  $items['node/%node'] = array(
    'title callback' => 'node_page_title',
    'title arguments' => array(1),
    'page callback' => 'node_page_view',
    'page arguments' => array(1),
    'access callback' => 'node_access',
    'access arguments' => array('view', 1),
    'type' => MENU_CALLBACK);

Eco fatto ;-) Ogni 'callback' corresponde ad una funzione ovviamente. Vedi http://drupal.org/node/102338

Più imparo, più dubito.

Ok, fin qui c'ero arrivato - a parte che in node/% node è 0 e % è 1 - ma sapevo che ogni callback è una funzione e tutte quelle belle cose lì indicano un particolare parametro - avevo letto le API -.

Avevo già letto e visto la definizione di node_menu e anche provato con un test simile, ma avevo già scritto nel post precedente che non era andata bene.

Il link finale sembra risolva il mio problema però, thx.