Rendere visibile ai non amministratori una voce di menu

7 contenuti / 0 new
Ultimo contenuto
Rendere visibile ai non amministratori una voce di menu

Salve a tutti,
ho scritto un modulo per un cliente.
Un due parole ha un front-end (che non ci interessa adesso) e un back-end che deve essere visibile non a tutti, ma solo ad un limitato numero di ruoli.
Le pagine di back-end sono definite nel .module come "/admin/pratiche/", con il risultato ovvio di andare a finire nel menu di amministrazione, non raggiungibile dai non amministratori.
Avevo brevemente pensato anche di metterlo fuori dal path di "admin/ " ma finendomi nel front-end, oltre ad obbligarmi a rivedere qualcosa nel codice del modulo, mi perde anche un po' di appeal visivo (l'area di admin è molto più seria del lato utente).

Potrei in qualche modo rendere visibile questa voce "Gestione Pratiche Edilizie" al difuori di admin? Volendo anche a tutti gli utenti registrati, tanto poi riesco a limitarne l'uso a chi voglio io (un bel messaggio "tu non puoi usarlo" mi basta).

Questo è il codice incriminato. Come funziona poi dentro non ha adesso importanza.
Grazie

<?php
function gestione_pratiche_menu() {
 
$items['pratiche/form'] = array(
   
'title' => t('Consulta lo stato della tua pratica'),
   
'page callback' => 'form_gestione_pratiche_empty',
   
'access arguments' => array('access content'),
   
'description' => t('Gestione Pratiche'),
   
'type' => MENU_CALLBACK,
   
'file' => "gestione_pratiche.inc.php",
  );
 
$items['pratiche/status'] = array(
   
'title' => t('Consulta lo stato della tua pratica'),
   
'page callback' => 'form_gestione_pratiche_render',
   
'access arguments' => array('access content'),
   
'type' => MENU_CALLBACK,
   
'file' => "gestione_pratiche.inc.php",
  );
 
$items['admin/pratiche/list'] = array(
   
'title' => 'Gestione Pratiche Edilizie',
   
'description' => t("Elenca tutte le pratiche"),
   
'page callback' => 'list_pratiche',
   
'access arguments' => array('administer site configuration'),
   
'type' => MENU_NORMAL_ITEM,
   
'file' => 'gestione_pratiche.admin.inc.php',
  );
 
$items['admin/pratiche/new'] = array(
   
'title' => 'Inserimento Pratiche Edilizie',
   
'description' => t("Rende possibile l'inserimento o la modifica di una pratica"),
   
'page callback' => 'drupal_get_form',
   
'page arguments' => array('form_gestione_pratiche_admin'),
   
'access arguments' => array('administer site configuration'),
   
'type' => MENU_CALLBACK,
   
'file' => 'gestione_pratiche.admin.inc.php',
  );
 
$items['admin/pratiche/mod/%'] = array(
   
'title' => 'Modifica Pratica',
   
'description' => t("Rende possibile la modifica di una pratica esistente"),
   
'page callback' => 'drupal_get_form',
   
'page arguments' => array('form_gestione_pratiche_admin',3),
   
'access arguments' => array('administer site configuration'),
   
'type' => MENU_CALLBACK,
   
'file' => 'gestione_pratiche.admin.inc.php',
  );
  return
$items;
}
function
gestione_pratiche_perm() {
    return array(
'amministra pratiche');
}
 
?>

Crea una nuova permission, e poi sostituisci 'administer site configuration' con quello che ti inventi tu. Il fatto che non sia visibile agli altri non dipende tanto dall'essere dentro admin, ma dall'utilizzare quell'access argument. (vedi http://api.drupal.org/api/drupal/developer--hooks--node.php/function/hoo...)

Non capisco perché dici che facendolo uscire da admin ti finisce nel frontend: intendi dire il tema? Ho trovato un pezzetto di codice che forse ti può aiutare http://icodesnip.com/snippet/php/drupal-force-the-administration-theme-o...

Ciao

Angelo Turetta

Funziona tutto all 99%.
Adesso i ruoli abilitati vedono le pagine, ma ancora non riesco a capire come mostrare la voce di menù in spalla sinistra, diciamo sotto agli altri menu.
In questo momento ovviamente dovrei scrivere direttamente l'indirizzo sulla address bar, invece gli utenti non amministratori non vedono nessuna voce "gestione pratiche" nel menu.

Soluzioni?
Grazie

Non trovo velocemente un modo di creare un nuovo menu (con relativo blocco). Puoi provare cosa succede specificando l'attributo "menu_name" per le voci di amministrazione. http://api.drupal.org/api/drupal/modules--system--system.api.php/functio...

In alternativa crea un nuovo menu (aggiungici le voci con i path che ti servono) e assegna il relativo blocco alla region che preferisci

Angelo Turetta

Con "menu_name" non riesco a farci nulla, sebbene in teoria una volta che ho creato un menu "my_menu" e ho inserito la direttiva "menu_name" dovrebbe funzionare.

Ho inoltre inserito, come alternativa, una voce nel menu my_menu con la path corretta (ossia 'admin/pratiche/list'); ho poi settato la visibilità del blocco per essere visibile a Admin e a Ruolo1, ma non lo vedo, o al massimo lo vedo solo front-end.

Dove sbaglio???

Ho riguardato adesso il codice.

Per essere visibili in un menu, i link devono essere di tipo MENU_NORMAL_ITEM, i MENU_CALLBACK sono invisibili

Se vuoi che si vedano nel menu di navigazione (quello che compare agli utenti autenticati) togli il path admin/ iniziale

Angelo Turetta

Grazie,
adesso credo che ci siamo.
Mi sono limitato a cambiare il path di
$items['admin/pratiche/list'] = array(...
in
$items['pratiche/list'] = array(...

e poi ho forzato la visualizzazione dell'admin theme con lo snippet che mi avevi suggerito.
Ora sembra che funzioni tutto.

Grazie mille.