Respostas:
Para o Drupal 7:
Use hook_block_info e hook_block_view ganchos em seu módulo personalizado . hook_block_info define o bloco. Ele será exibido em admin > estrutura > blocos . * hook_block_view * exibe o conteúdo. Veja exemplos abaixo na API Drupal.
Exemplo de hook_block_info, em que dois blocos são definidos (intitulado Conteúdo sindicalizado e 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;
}
?>
Exemplo 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 a página da API de blocos no Drupal.org para obter a lista completa de ganchos. Drupal 6 é um pouco diferente. Não há gancho hook_block_view; em vez disso, use hook_block para declarar blocos.
Para o Drupal 6, a resposta curta é que você cria um módulo personalizado que implementa hook_block .
Para o Drupal 7, você usa a API de bloqueio .
Se esta é sua primeira incursão no desenvolvimento de módulos, eu recomendo o Pro Drupal Development ou o Pro Drupal 7 Development . Praticamente tudo o que você precisa saber está lá.
Você pode estar procurando o que eu estava procurando e o encontrou aqui:
/modules/block/block.module:
block_custom_block_save ($ edit, $ delta).
Mas quando você olha para esta função, verá que pode fazer o db_update sozinho.
db_update('block_custom')
->fields(array(
'body' => $edit['body']['value'],
'info' => $edit['info'],
'format' => $edit['body']['format'],
))
->condition('bid', $delta)
->execute();
No Drupal 7, dê uma olhada block_add_block_form_submit
em modules/block/block.admin.inc
.
Este é o formulário regular de criação de blocos; parece apenas inserir os registros diretamente, em vez de chamar outra função. Observe que cada registro na tabela de blocos está vinculado a um único tema (você pode apenas usar o ativo, mas é mais seguro inserir registros para todos os temas).
A tabela block_custom mantém o conteúdo.
Você pode usar o módulo Recursos extras para exportar blocos.
Como alternativa, basta criar registros diretamente na tabela de blocos.
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)