Kann ein Modul wissen, wann eines seiner Blöcke auf dem Dashboard ausgegeben wird, und den Inhalt dieses Blocks zu ändern?

drupal.stackexchange https://drupal.stackexchange.com/questions/514

  •  16-10-2019
  •  | 
  •  

Frage

Drupal 7 verfügt über ein neues Kernmodul (Dashboard.Module), mit dem Benutzer mit den richtigen Berechtigungen Blöcke hinzufügen können, die von Drittanbieter-Websites zum Dashboard definiert werden, das als Overlay auf der aktuellen Seite angezeigt wird.

Ist es für ein Modul möglich, das Blöcke implementiert, um zu wissen, wann der Block auf dem Dashboard gerendert wird?
Die Idee wäre, den Inhalt des Blocks zu ändern und ihn (zum Beispiel) kleiner zu machen.

War es hilfreich?

Lösung 2

Als ich den Code von Dashboard.module betrachte, fand ich die folgende Funktion:

/**
 * Implements hook_block_list_alter().
 *
 * Skip rendering dashboard blocks when not on the dashboard page itself. This
 * prevents expensive dashboard blocks from causing performance issues on pages
 * where they will never be displayed.
 */
function dashboard_block_list_alter(&$blocks) {
  if (!dashboard_is_visible()) {
    foreach ($blocks as $key => $block) {
      if (in_array($block->region, dashboard_regions())) {
        unset($blocks[$key]);
      }
    }
  }
}

Dashboard_is_visible () ist die Funktion, die zurückgibt TRUE Wenn das Armaturenbrett sichtbar ist, und Dashboard_regions () ist die Funktion, die ein Array zurückgibt, das die Liste der im Dashboard enthaltenen Regionen enthält.

Dies sind die Funktionen, mit denen ein Modul wissen kann, wann seine Blöcke im Dashboard gerendert werden. Das einzige Problem besteht darin, dass das Modul weiß, in welcher Region seine Blöcke zugeordnet sind, da das Blockobjekt nicht an die übergeben wird Hook_block_view (). Drupal 7 verwendet neue Haken, Hook_block_view_alter ()) und Hook_block_view_module_delta_alter (), dessen zweiter Parameter das Blockobjekt ist. Die Implementierung eines dieser Hooks ist möglich, um den Block zu ändern, der auf der Tatsache basiert, dass der Block im Dashboard gerendert wird oder nicht.

Angenommen das mymodule ist der Modul -Kurzname und test_block ist der Delta -Wert, das Modul sollte die folgende Funktion verwenden:

/**
 * Implements hook_block_view_MODULE_DELTA_alter().
 */
function mymodule_block_view_mymodule_test_block_alter(&$data, $block) {
  if (dashboard_is_visible() && in_array($block->region, dashboard_regions())) {
    // The block is rendered in the dashboard.
  }
}

Andere Tipps

Sie können das URL -Argument überprüfen, auf dem der Block angezeigt wird, und wenn er dann mit einem erwarteten Muster -IE /Dashboard übereinstimmt, können Sie den Inhalt des Blocks ändern. Diese Lösung funktioniert nur, wenn Sie den Block selbst codiert haben.

UPDATE: Diese Methode funktioniert weiterhin, obwohl ich nicht genug vertraut bin, genug Drupal 7S -Dashboard -Modul, um weiter zu kommentieren. Das einzige, was ich vorschlagen würde, ist die Ausgabe von Seitenvariablen und zu sehen, ob etwas vom Dashboard -Modul festgelegt ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit drupal.stackexchange
scroll top