Come visualizzare i blocchi da visualizzare in una determinata pagina in Drupal?


10

Considera i deserti di un modulo:

  • Pagina 1:- deserts/*
  • pagina 2:- deserts/*/*
  • pagina 3: - deserts/*/*/*

Un contenuto dinamico ...

Ho tre blocchi, vale a dire a, bec:

  • Il blocco a deve essere visualizzato solo nella pagina 1
  • Il blocco b deve essere visualizzato solo nella pagina2
  • Il blocco a dovrebbe essere visualizzato solo nella pagina 3

Come dovrebbe fare questa restrizione?


Drupal 6 o 7? 6 semplifica la definizione del codice PHP per la visibilità dei blocchi.
Mołot,

È drupal7 molot
Ajmal,

2
@Ajmal Sarebbe utile se potessi commentare le risposte fornite e spiegare perché non hanno aiutato. Le persone presumeranno (naturalmente) che la risposta più votata sia quella corretta e non continueranno a fornire un'alternativa, se non hai spiegato perché quella risposta non funziona per te.
Clive

Ho la pagina che il desert/*/*/ desert/*/editmio blocco dovrebbe visualizzare per tutto il desert/*/*non per desert/*/edit In questo caso non funziona per me ..
Ajmal

1
Forse sono solo io, ma questo sembra confuso. *significa carattere jolly. Quindi, per chiedere una soluzione in cui il blocco appare per desert/*/*implica che dovrebbe presentarsi per desert/*/edito, se è per questo, desert/*/whatever.
cdmo,

Risposte:


18

Usa il modulo contestuale . Sebbene non sia generalmente un fan di questo modulo, questo è uno dei casi in cui è utile.

Aggiungi una condizione per un percorso. Quindi, se voglio un blocco a pagina 1, ma non a pagina 2 o 3, scriverei i percorsi in questo modo, uno per ogni blocco:

Caso 1 - Blocco A

deserti / *
~ Deserti / * / *
~ Deserti / * / * / *

Caso 2 - Blocco B

~ Deserti / *
deserti / * / *
~ Deserti / * / * / *

Caso 3- Blocco C

~ Deserti / *
~ Deserti / * / *
deserti / * / * / *

~ Significa escludere in questo caso. Successivamente, aggiungi il blocco alla regione in cui desideri che venga visualizzato. Puoi anche aggiungere di nuovo percorsi specifici che altrimenti potrebbero essere esclusi e viceversa.


Vale per questo caso. Ma vogliamo risolverlo per tutti i possibili scenari, questa è la soluzione originale, c'è un caso in cui non regge. ho spiegato questo caso sopra. quindi si prega gentilmente di riferirlo
Ajmal

Ho aggiornato la mia risposta, quindi spero che questo lo spiegherà meglio. Faresti una regola per ogni blocco.
kyletaylored il

4

Puoi utilizzare l'opzione di visibilità "Pagine su cui questo codice PHP restituisce VERO (solo per esperti)". Ma inserire il codice PHP nel database è, IMHO, una cattiva pratica. Invece, considera l'utilizzo di qualcosa come il modulo di visibilità del blocco esteso o l'implementazione di hook_block_list_alter()come

function MODULE_block_list_alter(&$blocks) {
  global $theme_key;
  foreach ($blocks as $key => $block) {
    if (!isset($block->theme) || !isset($block->status) || $block->theme != $theme_key || $block->status != 1) {
      // This block was added by a contrib module, leave it in the list.
      continue;
    }
    switch ("{$block->module}_{$block->delta}") {
      case "moduleA_deltaA":
        if (arg(0) != 'deserts' || !arg(1) || arg(2)) {
          unset($blocks[$key]);
        }
        break;
      case "moduleB_deltaB":
        if (arg(0) != 'deserts' || !arg(1) || !arg(2) || arg(3)) {
          unset($blocks[$key]);
        }
        break;
      case "moduleC_deltaC":
        if (arg(0) != 'deserts' || !arg(1) || !arg(2) || !arg(3)) {
          unset($blocks[$key]);
        }
        break;
    }
  }
}

Nota: esiste probabilmente un modo più intelligente di implementare la regola di visibilità.


0

Dovresti essere in grado di farlo funzionare utilizzando il modulo di visibilità del blocco Regole . Ecco una citazione dalla sua pagina del progetto:

Il modulo Visibilità del blocco regole consente di utilizzare i componenti delle regole per controllare la visibilità del blocco. Ciò fornisce agli amministratori e agli sviluppatori di Drupal un'estrema flessibilità nel controllare quando i blocchi dovrebbero essere visualizzati sui loro siti Web, oltre alle opzioni di visibilità predefinite fornite da Drupal.

L'idea generale è che se puoi farlo con le Regole, puoi usarlo per controllare la visibilità dei blocchi, quindi le possibilità sono illimitate:

  • Devi mostrare un blocco solo per gli utenti registrati più di un mese fa?

  • Forse hai un blocco che deve essere mostrato solo tra le 8:00 e le 17:00 nei giorni feriali?

  • Che dire di mostrare o nascondere un blocco in base alle condizioni meteorologiche attuali?

Tutto ciò può essere fatto utilizzando la visibilità del blocco Regole.

Detto questo, e come da " se riesci a farlo con le Regole, puoi usarlo per controllare la visibilità dei blocchi " sopra, hai ridotto la tua domanda per far sì che le Regole intercettino i vari URL corrispondenti alla tua pagina1, pagina2 e pagina3.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.