Come si può consentire a un editor di modificare il testo in un blocco, ma non apportare altre modifiche alla configurazione, come spostare il blocco da una regione all'altra?
Come si può consentire a un editor di modificare il testo in un blocco, ma non apportare altre modifiche alla configurazione, come spostare il blocco da una regione all'altra?
Risposte:
In Drupal, solo gli utenti con l'autorizzazione per amministrare i blocchi possono modificare le impostazioni dei blocchi, inclusa la regione a cui è assegnato il blocco.
Per quanto ne so, non ci sono moduli che consentono di assegnare agli utenti un'autorizzazione più granulare. Dovresti scrivere il tuo modulo personalizzato che mostra solo i campi che un utente può modificare.
Ad esempio, il codice seguente altererebbe la compilazione del modulo da block_admin_configure () , la funzione che crea il modulo di configurazione per qualsiasi blocco, per consentire agli utenti con l'autorizzazione "modifica titoli di blocco" di modificare il titolo del blocco.
function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
if (isset($form['settings']['title'])) {
$form['settings']['title']['#access'] = user_access('edit block titles');
}
}
La funzione è l'implementazione di hook_form_FORM_ID_alter () creata per un modulo chiamato mymodule.module.
I campi per le impostazioni delle regioni (le aree tematiche in cui viene emesso un blocco) sono contenuti $form['regions']
; Il set di campi contiene un campo di selezione per ciascuno abilitato.
Per mostrare il campo impostato solo agli utenti con l'autorizzazione "modifica aree di blocco", è possibile utilizzare il seguente codice, ad esempio.
function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
if (isset($form['regions'])) {
$form['regions']['#access'] = user_access('edit block regions');
}
}
Gli utenti con il permesso di amministrare i blocchi possono modificare la regione assegnata ai blocchi da http://example.com/admin/structure/block . Per non consentire all'utente senza l'autorizzazione "modifica aree di blocco" di accedere a quella pagina, è necessario modificare il gestore di accesso di quel menu e sostituire il gestore di accesso predefinito con uno personalizzato che ritorni FALSE
quando gli utenti non dispongono di tale autorizzazione.
Per ulteriori informazioni, vedere hook_menu e hook_menu_alter () .
Vedi il modulo Block Access .
Questo modulo aggiunge una serie di autorizzazioni globali per la creazione, visualizzazione, spostamento, abilitazione, disabilitazione e configurazione di blocchi, nonché autorizzazioni a livello di singolo blocco.
Dopo essere tornati a questa domanda dopo circa un anno, ci sono due metodi che sono molto semplici.
Crea un blocco e inserisci il seguente codice nel corpo del blocco:
<?php
$node = node_load(77);//77 is the nid of the node I want to put in the block.
$node_content = node_view($node,"full");
print render($node_content);
?>
Oppure è possibile creare un blocco vista e filtrare sull'ID nodo.
Ora dai a qualcuno il permesso di modificare il tipo di contenuto ma non il permesso di crearlo o eliminarlo.
Una soluzione semplice che consiglierei è di controllare il modulo Boxes . Questo modulo fornirà una piacevole opzione di modifica in linea (tramite AJAX) per i blocchi, il che renderebbe super semplice per gli editor la modifica del testo nei blocchi. Le autorizzazioni dovrebbero comunque essere "amministrare i blocchi" per gli editor, ma poiché ora saranno in grado di modificare i blocchi in linea, non è necessario che arrivino mai alla pagina di configurazione dei blocchi.
Ora, se continui a insistere sulla rimozione dell'accesso alla pagina di configurazione del blocco, puoi semplicemente fare una semplice modifica del menu che modifica l'autorizzazione richiesta per la pagina di configurazione del blocco, come il seguente codice.
function hook_menu_alter(&$items) {
//Example Use Case, switching permission from "administer block" to "administer site configuration"
$items['admin/structure/block']['access arguments'] = array('administer site configuration');
}
Il modulo Bean è una possibile alternativa per rispondere a questa domanda. Ecco una citazione sulla sua pagina di progetto:
Pensa a un Bean come un metodo per fornire nuovi tipi (rispetto al nodo sarebbe un tipo di contenuto) che quindi fornisce un'interfaccia di aggiunta del contenuto per creare tutti i blocchi necessari (vedi screenshot sotto). Il contenuto del bean può quindi essere posizionato attorno al sito come qualsiasi altro blocco.
Combinato con le opzioni disponibili per la concessione delle autorizzazioni Bean appropriate , dovrebbe darti molta flessibilità su come esattamente vuoi usare questo (ottimo) modulo nel tuo caso specifico: per ogni singolo blocco creato con il modulo BEAN, puoi usare la tipica pagina Autorizzazioni (at admin/people/permissions
) per concedere l'accesso Aggiungi / Modifica / Visualizza / Elimina ai ruoli selezionati.
Questo modulo funziona perfettamente anche in combinazione con i moduli di integrazione delle funzionalità UUID e UUID . E dopo aver acquisito familiarità con il modulo Bean, potresti trovare altri casi nel tuo sito in cui desideri utilizzare anche questo modulo (che in qualche modo compensa il fatto che è necessario aggiungere un altro modulo).
Tutorial video Tutorial del modulo Drupal Bean - l'utilizzo dell'interfaccia utente di Bean Admin fornisce un'ottima introduzione per comprendere davvero la potenza di questo modulo e il tipo di cose che puoi fare con esso (usando solo tecniche di costruzione del sito, senza codifica personalizzata). Mostra anche come il modulo Bean trasforma i blocchi Drupal in entità fieldable.
Questo modulo è iniziato solo da D7 (a causa delle "entità" che sono state introdotte solo in D7) e ha già oltre 22 KB di installazioni segnalate. Coloro che non lo usano ancora dovrebbero sicuramente iniziare a guardarlo in preparazione di un giorno l'aggiornamento a D8. Perché questo è ciò che è attualmente mostrato nella sua pagina del progetto (ho aggiunto il grassetto markup qui):
Questo modulo è stato incluso con il core Drupal 8 . Fare riferimento a questo problema per ulteriori informazioni.