¿Manera fácil de crear bloques mediante programación? [cerrado]


26

Aprendiendo Drupal. Ahora sé que puedo crear bloques a través del backend, pero preferiría crearlos mediante programación, si es posible. De hecho, estoy bastante seguro de que es posible. ¿Pero cuál es la forma más fácil?


blog de detalle: goo.gl/kD3TZu
Suresh Kamrushi

Respuestas:


34

Para Drupal 7:

Use hook_block_info y hook_block_view en su módulo personalizado . hook_block_info define el bloque. Aparecerá en admin > estructura > bloques . * hook_block_view * muestra el contenido. Vea los ejemplos a continuación de la API de Drupal.

Ejemplo de hook_block_info, donde se definen dos bloques (titulados Distribuir y Contenido reciente):

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

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

Consulte la página API de bloques en Drupal.org para obtener una lista completa de ganchos. Drupal 6 es un poco diferente. No hay hook_block_view hook; en su lugar use hook_block para declarar bloques.


6

Para Drupal 6, la respuesta corta es que crea un módulo personalizado que implementa hook_block .

Para Drupal 7, usa la API Block .

Si esta es su primera incursión en el desarrollo de módulos, le recomiendo Pro Drupal Development o Pro Drupal 7 Development . Casi todo lo que necesitas saber está ahí.


Parece que hook_block solo puede usarse en un módulo separado: | Todavía no entiendo por qué esta complejidad ... ¿Es una práctica habitual tener módulos para todo en Drupal?
jayarjo

2
Sí, los módulos son un concepto clave de Drupal. En la mayoría de los casos, Drupal es un conjunto de módulos y todo se hace a través de ganchos de módulo.
mpdonadio

3

Quizás estés buscando lo que estaba buscando y lo encontraste aquí:

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

Pero cuando observa esta función, verá que puede hacer usted mismo la actualización db_update.

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

2

En Drupal 7, echar un vistazo a block_add_block_form_submiten modules/block/block.admin.inc.

Este es el formulario de creación de bloque regular; parece simplemente insertar los registros directamente en lugar de llamar a otra función. Tenga en cuenta que cada registro en la tabla de bloques está vinculado a un solo tema (puede usar el activo pero es más seguro insertar registros para todos los temas).

La tabla block_custom contiene el contenido.


1

Puede usar el módulo Características adicionales para exportar bloques.

Alternativamente, solo cree registros directamente en la tabla de bloques.

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
Módulo adicional o consulta SQL directa ... creo que debería haber algo más limpio.
jayarjo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.