Réponses:
Pour Drupal 7:
Utilisez les hooks hook_block_info et hook_block_view dans votre module personnalisé . hook_block_info définit le bloc. Il apparaîtra dans admin > structure > blocs . * 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 crochet hook_block_view; utilisez plutôt hook_block pour déclarer des blocs.
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 l' API Block .
Si c'est votre première incursion dans le développement de modules, je recommande fortement le développement Pro Drupal ou le développement Pro Drupal 7 . Presque tout ce que vous devez savoir est là.
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 juste 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();
Dans Drupal 7, jetez un oeil à block_add_block_form_submit
en 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.
Vous pouvez utiliser le module Fonctionnalités supplémentaires pour exporter des blocs.
Alternativement, créez simplement 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)