Drupalを学ぶ。バックエンドを介してブロックを作成できることはわかっていますが、可能であれば、プログラムでそれらを事前に作成したいと思います。実際、それが可能であると確信しています。しかし、最も簡単な方法は何ですか?
Drupal 7の場合:
カスタムモジュール で hook_block_info および hook_block_view フックを使用します。 hook_block_infoはブロックを定義します。 admin>structure>blocks。 * hook_block_view *はコンテンツを表示します。以下のDrupal APIの例を参照してください。
2つのブロックが定義されているhook_block_infoの例(タイトルはSyndicateおよびRecent content):
<?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;
}
?>
フックの完全なリストについては、Drupal.orgの Blocks APIページ を参照してください。 Drupal 6は少し異なります。hook_block_viewフックはなく、代わりに hook_block を使用してブロックを宣言します。
Drupal 6の場合、簡単な答えは hook_block を実装するカスタムモジュールを作成することです。
Drupal 7の場合、 ブロックAPI を使用します。
これがモジュール開発への最初の取り組みである場合、私は Pro Drupal Development または Pro Drupal 7開発 。あなたが知る必要があるほとんどすべてがそこにあります。
あなたは私が探していたものを探しているかもしれません、そしてそれをここで見つけました:
/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
in 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)