EDIT: risposta rivisto dopo il chiarimento della mia incomprensione della questione
Se l'immagine di sfondo è da definire per pagina (nodo), il tuo approccio attraverso un il vocabolario della tassonomia sembra la giusta via da seguire. Per rendere i termini disponibili per i CSS, il modo più semplice sarebbe quello di esportarli/usarli come classi nei file node.tpl.php, dove si ha accesso diretto alla variabile $node
. Ma in quel caso, sono in qualche modo sepolti nel mezzo del markup risultante, il che rende un po 'difficile usarli correttamente.
Per aggiungerli alla variabile $body_classes
nel file page.tpl.php, è necessario modificare la funzione zen_preprocess_page()
per aggiungerli, oppure (approccio migliore) aggiungerli ai propri moduli/temi preprocess_page()
la funzione, utilizzando la funzione zen come esempio:
function yourModuleOrTheme_preprocess_page(&$vars) {
// Add classes for body element based on node taxonomy
// Is this a node page?
if ('node' == arg(0) && is_numeric(arg(1))) {
// Yes, extract wanted taxonomy term(s) and add as additional class(es)
$node = node_load(arg(1));
$background_vid = yourFuntionToGetTheBackgroundVocabularyId(); // Could be hardcoded, but better to define as variable
$terms = $node['taxonomy'][$background_vid];
foreach ($terms as $tid => $term) {
// NOTE: The following assumes that the term names can be used directly as classes.
// You might want to safeguard this against e.g. spaces or other invalid characters first.
// Check the zen_id_safe() function for an example (or just use that, if zen is always available)
$vars['body_classes'] .= ' ' . $term;
}
}
}
NOTA: codice non testato, potrebbe contenere errori di battitura e di altre sviste.
(risposta originale prima della modifica - sulla base di un equivoco l'intenzione PO, la lasciò nel caso in cui altri fraintendono come bene :)
L'idea di base sembra fattibile, ma io suggerirei un minore variazione:
Poiché si desidera che l'impostazione sia regolabile per utente, è necessario passare attraverso alcuni anelli per consentire agli utenti di "taggarsi" con un termine di tassonomia. Penso che sarebbe molto più semplice abilitare il (core, ma facoltativo) profile module e configurare lì un campo 'background' (con tipo 'lista selezione'). Il campo verrà visualizzato nella pagina utente (o in una scheda separata in quella pagina, se gli si assegna una categoria), e la selezione dell'utente sarà disponibile dal codice in un secondo momento abbastanza facilmente, ad es. per ricavare una classe per il modello di pagina:
global $user;
// NOTE: The following call would be the explicit way,
// but usually the profile fields get added to the $user object
// automatically on user_load(), so you might not need to call it at all,
// extracting the values directly from the $user object instead
$profile = profile_load_profile($user);
$background = $user->profile_background
Non è un'impostazione che imposto per utente ... è destinata a essere per pagina. L'utente seleziona un tipo di sfondo da una casella di riepilogo quando ha creato una nuova pagina e lo sfondo selezionato sarà sempre lo stesso per quella singola pagina. Sto utilizzando un sottotema di Zen che genera già '$ body_classes' nel tag body di tutte le pagine. Quello che sto pensando di fare è emettere il termine di tassonomia insieme a questo. – Sambo
@Sambo: Vedo, mi dispiace per l'incomprensione. Ho modificato la mia risposta di conseguenza. –