web-dev-qa-db-fra.com

Un moyen facile de créer des blocs par programmation?

Apprendre Drupal. Je sais maintenant que je peux créer un bloc via le backend, mais je préfère les pré-créer par programme, si c'est possible. En fait, je suis presque sûr que c'est possible. Mais quelle est la manière la plus simple?

26
jayarjo

Pour Drupal 7:

Utilisez hook_block_info et hook_block_view hooks dans votre module personnalisé . hook_block_info définit le bloc. Il apparaîtra dans admin > structure > bloque . * hook_block_view * affiche le contenu. Voir les exemples ci-dessous de l'API Drupal.

Exemple de hook_block_info, où deux blocs sont définis (intitulé Syndiquer et Contenu récent):

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

Exemple de 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;
}
?>

Reportez-vous à la page API Blocks sur Drupal.org pour la liste complète des hooks. Drupal 6 est un peu différent. Il n'y a pas de hook hook_block_view; utilisez plutôt hook_block pour déclarer des blocs.

34
NEAR DARK

Pour Drupal 6, la réponse courte est que vous créez un module personnalisé qui implémente hook_block .

Pour Drupal 7, vous utilisez Block API .

Si c'est votre première incursion dans le développement de modules, je recommande fortement Pro Drupal Development ou Pro Drupal 7 Development . Presque tout ce que vous devez savoir est là.

6
mpdonadio

Vous cherchez peut-être ce que je cherchais et je l'ai trouvé ici:

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

Mais quand vous regardez cette fonction, vous verrez que vous pouvez simplement faire la mise à jour db_update.

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

Dans Drupal 7, jetez un œil à block_add_block_form_submit dans modules/block/block.admin.inc.

Il s'agit du formulaire de création de bloc normal; il semble simplement insérer directement les enregistrements plutôt que d'appeler une autre fonction. Notez que chaque enregistrement dans la table des blocs est lié à un seul thème (vous pouvez simplement utiliser celui actif mais il est plus sûr d'insérer des enregistrements pour tous les thèmes).

La table block_custom contient le contenu.

2
richardg

Vous pouvez utiliser le module Features Extra pour exporter des blocs.

Alternativement, il suffit de créer des enregistrements directement dans la table des blocs.

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