it-swarm.com.de

Einfache Möglichkeit, Blöcke programmgesteuert zu erstellen?

Drupal lernen. Ich weiß jetzt, dass ich Block über das Backend erstellen kann, aber ich würde sie lieber programmgesteuert vorab erstellen, wenn es möglich ist. Tatsächlich bin ich mir ziemlich sicher, dass es möglich ist. Aber was ist der einfachste Weg?

26
jayarjo

Für Drupal 7:

Verwenden Sie hook_block_info und hook_block_view Hooks in Ihrem benutzerdefinierten Modul . hook_block_info definiert den Block. Es wird in admin > Struktur > Blöcke . * hook_block_view * zeigt den Inhalt an. Siehe Beispiele unten aus der Drupal API.

Beispiel für hook_block_info, in dem zwei Blöcke definiert sind (mit dem Titel "Syndicate" und "Recent Content"):

    <?php
function hook_block_info() {
  // This example comes from node.module.
  $blocks['syndicate'] = array(
    'info' => t('Syndicate'), 
    'cache' => DRUPAL_NO_CACHE,
  );

  $blocks['recent'] = array(
    'info' => t('Recent content'),
    // DRUPAL_CACHE_PER_ROLE will be assumed.
  );

  return $blocks;
}
?>

Beispiel für hook_block_view:

<?php
function hook_block_view($delta = '') {
  // This example is adapted from node.module.
  $block = array();

  switch ($delta) {
    case 'syndicate':
      $block['subject'] = t('Syndicate');
      $block['content'] = array(
        '#theme' => 'feed_icon', 
        '#url' => 'rss.xml', 
        '#title' => t('Syndicate'),
      );
      break;

    case 'recent':
      if (user_access('access content')) {
        $block['subject'] = t('Recent content');
        if ($nodes = node_get_recent(variable_get('node_recent_block_count', 10))) {
          $block['content'] = array(
            '#theme' => 'node_recent_block', 
            '#nodes' => $nodes,
          );
        }
        else {
          $block['content'] = t('No content available.');
        }
      }
      break;
  }
  return $block;
}
?>

Eine vollständige Liste der Hooks finden Sie auf der Blocks API-Seite auf Drupal.org. Drupal 6 ist etwas anders. Es gibt keinen Hook für hook_block_view. Verwenden Sie stattdessen hook_block , um Blöcke zu deklarieren.

34
NEAR DARK

Für Drupal 6) lautet die kurze Antwort, dass Sie ein benutzerdefiniertes Modul erstellen, das hook_block implementiert.

Für Drupal 7) verwenden Sie die Block API .

Wenn dies Ihr erster Ausflug in die Modulentwicklung ist, empfehle ich dringend Pro Drupal Development oder Pro Drupal 7 Development) . So ziemlich alles, was Sie wissen müssen, ist da drin.

6
mpdonadio

Vielleicht suchen Sie nach dem, wonach ich gesucht habe, und haben es hier gefunden:

/modules/block/block.module:
block_custom_block_save ($ edit, $ delta).

Wenn Sie sich diese Funktion ansehen, werden Sie feststellen, dass Sie das db_update einfach selbst ausführen können.

db_update('block_custom')
->fields(array(
  'body' => $edit['body']['value'],
  'info' => $edit['info'],
  'format' => $edit['body']['format'],
))
->condition('bid', $delta)
->execute();
3
Dan Shumaker

Schauen Sie sich in Drupal 7 _ block_add_block_form_submit im modules/block/block.admin.inc.

Dies ist das reguläre Formular zur Blockerstellung. Es scheint, als würden die Datensätze nur direkt eingefügt, anstatt eine andere Funktion aufzurufen. Beachten Sie, dass jeder Datensatz in der Blocktabelle mit einem einzelnen Thema verknüpft ist (Sie können nur das aktive verwenden, es ist jedoch sicherer, Datensätze für alle Themen einzufügen).

Die Tabelle block_custom enthält den Inhalt.

2
richardg

Sie können das Modul Features Extra verwenden, um Blöcke zu exportieren.

Alternativ können Sie einfach Datensätze direkt in der Blocktabelle erstellen.

INSERT INTO blocks (
  module, delta, theme, status, weight, region, custom,
  throttle, visibility, pages, title, cache)
VALUES (
  'views','blog-block_1','mytheme',1,10,'sidebar_first',0,0,1,'blog\r\nblog/*','',-1)
1
Dylan Tack