Ответы:
Для Drupal 7:
Используйте ловушки hook_block_info и hook_block_view в вашем пользовательском модуле . hook_block_info определяет блок. Это будет отображаться в админ > структура > блоки . * hook_block_view * отображает содержимое. Ниже приведены примеры из Drupal API.
Пример hook_block_info, где определены два блока (под названием «Синдикат» и «Недавнее содержимое»):
<?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;
}
?>
Пример 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;
}
?>
Обратитесь к странице API Blocks на Drupal.org для получения полного списка хуков. Drupal 6 немного отличается. Нет ловушки hook_block_view; вместо этого используйте hook_block для объявления блоков.
Для Drupal 6 краткий ответ заключается в том, что вы создаете пользовательский модуль, реализующий hook_block .
Для Drupal 7 вы используете Block API .
Если это ваш первый опыт разработки модулей, я настоятельно рекомендую Pro Drupal Development или Pro Drupal 7 Development . Здесь есть почти все, что вам нужно знать.
Возможно, вы искали то, что я искал, и нашли это здесь:
/modules/block/block.module:
block_custom_block_save ($ edit, $ delta).
Но когда вы посмотрите на эту функцию, вы увидите, что вы можете просто сделать db_update самостоятельно.
db_update('block_custom')
->fields(array(
'body' => $edit['body']['value'],
'info' => $edit['info'],
'format' => $edit['body']['format'],
))
->condition('bid', $delta)
->execute();
В Drupal 7, взгляните на block_add_block_form_submit
в modules/block/block.admin.inc
.
Это обычная форма создания блока; Кажется, он просто вставляет записи напрямую, а не вызывает другую функцию. Обратите внимание, что каждая запись в таблице блоков связана с одной темой (вы можете просто использовать активную тему, но безопаснее вставить записи для всех тем).
Таблица block_custom содержит содержимое.
Вы можете использовать модуль Features Extra для экспорта блоков.
Или просто создайте записи прямо в таблице блоков.
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)