Wie werden die Blöcke angezeigt, die auf einer bestimmten Seite in Drupal angezeigt werden sollen?

10

Betrachten Sie ein Modul Wüsten:

  • Seite 1:- deserts/*
  • Seite 2:- deserts/*/*
  • Seite 3:- deserts/*/*/*

Ein dynamischer Inhalt ...

Ich habe drei Blöcke, nämlich a, b und c:

  • Block a sollte nur auf Seite 1 angezeigt werden
  • Block b sollte nur auf Seite 2 angezeigt werden
  • Block a sollte nur auf Seite 3 angezeigt werden

Wie soll diese Einschränkung erfolgen?

Ajmal
quelle
Drupal 6 oder 7? 6 erleichtert das Definieren von PHP-Code für die Blocksichtbarkeit.
Mołot
Es ist drupal7 molot
Ajmal
2
@ Ajmal Es wäre nützlich, wenn Sie die gegebenen Antworten kommentieren und erklären könnten, warum sie nicht geholfen haben. Die Leute werden (natürlich) davon ausgehen, dass die Antwort mit hoher Stimme die richtige ist, und keine Alternative anbieten, wenn Sie nicht erklärt haben, warum diese Antwort für Sie nicht funktioniert.
Clive
Ich habe die Seite, die desert/*/*/ desert/*/editmein Block für alle desert/*/*nicht für anzeigen sollte. desert/*/edit In diesem Fall funktioniert es nicht für mich.
Ajmal
1
Vielleicht bin ich es nur, aber das scheint verwirrend. *bedeutet Platzhalter. Wenn Sie also nach einer Lösung fragen, für die der Block angezeigt wird, desert/*/*bedeutet dies, dass er für oder für diese Angelegenheit angezeigt werden sollte . desert/*/editdesert/*/whatever
CDMO

Antworten:

18

Verwenden Sie das Kontextmodul . Obwohl ich im Allgemeinen kein Fan dieses Moduls bin, ist dies einer der Fälle, in denen es nützlich ist.

Fügen Sie eine Bedingung für einen Pfad hinzu. Wenn ich also einen Block auf Seite 1, aber nicht auf Seite 2 oder 3 haben möchte, würde ich die Pfade so schreiben, einen für jeden Block:

Fall 1 - Block A.

Wüsten / *
~ Wüsten / * / *
~ Wüsten / * / * / *

Fall 2 - Block B.

~ Wüsten / *
Wüsten / * / *
~ Wüsten / * / * / *

Fall 3 - Block C.

~ Wüsten / *
~ Wüsten / * / *
Wüsten / * / * / *

Das ~ bedeutet in diesem Fall auszuschließen. Fügen Sie danach den Block zu der Region hinzu, in der er angezeigt werden soll. Sie können auch bestimmte Pfade hinzufügen, die andernfalls ausgeschlossen wären, und umgekehrt.

kyletaylored
quelle
Es gilt für diesen Fall. Aber wir wollen dies für alle möglichen Szenarien beheben, das ist die ursprüngliche Lösung. Es gibt einen Fall, in dem dies nicht zutrifft. Ich habe diesen Fall oben erklärt. Bitte beziehen Sie sich darauf
Ajmal
Ich habe meine Antwort aktualisiert und hoffe, dass dies besser erklärt wird. Sie würden eine Regel für jeden Block erstellen.
Kyletaylored
4

Sie können die Sichtbarkeitsoption "Seiten, auf denen dieser PHP-Code TRUE (nur für Experten) zurückgibt" verwenden. Aber das Einfügen von PHP-Code in die Datenbank ist meiner Meinung nach eine schlechte Praxis. Verwenden Sie stattdessen das Modul für erweiterte Blocksichtbarkeit oder die Implementierung von hook_block_list_alter()z

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;
    }
  }
}

Hinweis: Es gibt wahrscheinlich eine intelligentere Möglichkeit, Ihre Sichtbarkeitsregel zu implementieren.

Pierre Buyle
quelle
0

Sie sollten in der Lage sein, dies mithilfe des Regelblock-Sichtbarkeitsmoduls zum Laufen zu bringen. Hier ist ein Zitat von seiner Projektseite:

Mit dem Modul Blockblocksichtbarkeit können Regelkomponenten zur Steuerung der Blocksichtbarkeit verwendet werden. Dies bietet Drupal-Administratoren und -Entwicklern extreme Flexibilität bei der Steuerung, wann Blöcke auf ihren Websites angezeigt werden sollen, zusätzlich zu den von Drupal bereitgestellten Standardsichtbarkeitsoptionen.

Die allgemeine Idee ist, dass Sie, wenn Sie dies mit Regeln tun können, damit die Blocksichtbarkeit steuern können, sodass die Möglichkeiten unbegrenzt sind:

  • Müssen Sie einen Block nur für Benutzer anzeigen, die vor mehr als einem Monat registriert wurden?

  • Vielleicht haben Sie einen Block, der wochentags nur zwischen 8 und 17 Uhr angezeigt werden muss?

  • Was ist mit dem Ein- oder Ausblenden eines Blocks basierend auf den aktuellen Wetterbedingungen?

All dies kann mithilfe der Sichtbarkeit des Regelblocks erfolgen.

Damit und gemäß dem obigen Abschnitt " Wenn Sie dies mit Regeln tun können, können Sie damit die Blocksichtbarkeit steuern " haben Sie Ihre Frage darauf reduziert, dass Regeln die verschiedenen URLs abfangen, die Ihrer Seite1, Seite2 und Seite3 entsprechen.

Pierre.Vriens
quelle