Come rendere una funzione disponibile solo per determinati spazi?
-
16-10-2019 - |
Domanda
Per un sito Drupal 6 Aprire Atrium (vale a dire, Caratteristiche, gli ambienti, gruppi organici) sto correndo, ho creato un po 'di abitudine funzioni che vengono applicate veramente solo ad una manciata di centinaia di gruppi sul sito.
Nella sua forma attuale, il "personalizzare le funzioni" schermo mostra config tutti le caratteristiche, tra cui quelli che vorrei limitare intenzionalmente per solo un paio di gruppi speciali.
Qual è il modo migliore per prevenire questi dispositivi speciali da essere offerto a tutti i gruppi, pur mantenendo le caratteristiche sui gruppi speciali?
Soluzione
Le caratteristiche per ogni spazio sono configurati tramite la funzione spaces_features_form()
. Si potrebbe implementare hook_form_alter()
per selettivamente e condizionatamente rimuovere funzionalità da gruppi specifici.
function MYMODULE_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'spaces_features_form') {
$space = spaces_get_space();
// Populate the array with hard-coded NIDs, or whatever logic
// needed to determine if these features should be allowed.
if ($space->type == 'og' && !in_array($space->group->nid, array(...))) {
// Hide features foo and bar.
foreach (array('feature_foo', 'feature_bar') as $feature) {
$form['spaces_features'][$feature]['#access'] = FALSE;
}
}
}
}
Altri suggerimenti
Caratteristiche sono moduli. I moduli sono abilitati a livello di sistema e non possono essere collegati a uno spazio o di gruppo. Tuttavia, si potrebbe controllare l'accesso ad essi attraverso la creazione di autorizzazioni personalizzate, vedere hook_perm () .
mi piacerebbe aggiungere a questo suggerimento hook_perm un'alterazione del modulo per disattivare la funzione applicabile in base al tipo di gruppo. hook_form_alter lavoro probabilmente non causa gli elementi correlati funzione non sarà ancora presente. Potrebbe essere necessario registrare un #after_build gancio e quindi modificare il modulo di conseguenza.
Il contesto è sicuramente la strada da percorrere.
Contesto , Caratteristiche e gli ambienti, sono una combinazione potente. Questo post DevelopmentSeed dovrebbe aiutare: Costruire un "Blog Feature" in Drupal con contesto gli ambienti
Potrebbe consentire tutte le caratteristiche fin dall'inizio, ma gestire la visualizzazione dal Context ? Non ho avuto la possibilità di provare ancora Context me stesso, ma suona come una misura.