Modo semplice per creare blocchi a livello di codice? [chiuso]


26

Learning Drupal. Ora so che posso creare blocchi attraverso il backend, ma preferirei precrearli a livello di programmazione, se possibile. In effetti sono abbastanza sicuro che sia possibile. Ma qual è il modo più semplice?


blog di dettaglio: goo.gl/kD3TZu
Suresh Kamrushi

Risposte:


34

Per Drupal 7:

Usa hook_block_info e hook_block_view nel tuo modulo personalizzato . hook_block_info definisce il blocco. Apparirà in admin > struttura > blocchi . * hook_block_view * visualizza il contenuto. Vedi gli esempi seguenti dall'API Drupal.

Esempio di hook_block_info, in cui sono definiti due blocchi (intitolato Syndicate e Contenuto recente):

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

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

Fare riferimento alla pagina API Blocks su Drupal.org per l'elenco completo degli hook. Drupal 6 è un po 'diverso. Non esiste un hook hook_block_view; utilizzare invece hook_block per dichiarare i blocchi.


6

Per Drupal 6, la risposta breve è che si crea un modulo personalizzato che implementa hook_block .

Per Drupal 7, usi l' API Block .

Se questa è la tua prima incursione nello sviluppo di moduli, consiglio vivamente Pro Drupal Development o Pro Drupal 7 Development . Praticamente tutto quello che devi sapere è lì dentro.


Sembra che hook_block possa essere utilizzato solo in un modulo separato: | Ancora non capisco perché questa complessità ... È una pratica normale avere moduli per tutto in Drupal?
jayarjo,

2
Sì, i moduli sono un concetto chiave di Drupal. In molti modi, Drupal stesso è un insieme di moduli e tutto viene eseguito tramite hook di moduli.
mpdonadio

3

Potresti cercare quello che stavo cercando e trovarlo qui:

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

Ma quando guardi questa funzione, vedrai che puoi fare tu stesso il db_update.

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

2

In Drupal 7, dare un'occhiata a block_add_block_form_submitin modules/block/block.admin.inc.

Questo è il normale modulo per la creazione di blocchi; sembra semplicemente inserire i record direttamente anziché chiamare un'altra funzione. Si noti che ogni record nella tabella dei blocchi è collegato a un singolo tema (è possibile utilizzare solo quello attivo ma è più sicuro inserire record per tutti i temi).

La tabella block_custom contiene il contenuto.


1

È possibile utilizzare il modulo Funzioni extra per esportare blocchi.

In alternativa, basta creare i record direttamente nella tabella dei blocchi.

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
Modulo aggiuntivo o query sql diretta ... penso che ci dovrebbe essere qualcosa di più pulito intorno a me.
jayarjo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.