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?
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.
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à.
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();
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.
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)