it-swarm-eu.dev

Snadný způsob, jak vytvářet bloky programově?

Učení Drupalu. Teď vím, že mohu vytvořit blok skrz backend, ale raději bych je programově upravoval, pokud je to možné. Ve skutečnosti jsem si docela jistý, že je to možné. Jaký je ale nejjednodušší způsob?

26
jayarjo

Pro Drupal 7:

Použijte hook_block_info a hook_block_view hooks ve vašem vlastní modul . hook_block_info definuje blok. Zobrazí se ve admin > struktuře > bloky . * hook_block_view * zobrazuje obsah. Viz příklady níže z rozhraní API Drupal).

Příklad hook_block_info, kde jsou definovány dva bloky (s názvem Syndikovat a Poslední obsah):

    <?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;
}
?>

Příklad 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;
}
?>

Úplný seznam háčků naleznete na stránce Blocks API page na adrese Drupal.org. Drupal 6 je trochu odlišný. Neexistuje žádný hook_block_view hook, místo toho použijte hook_block pro deklaraci bloků.

34
NEAR DARK

Pro Drupal 6, krátká odpověď je, že vytvoříte vlastní modul, který implementuje hook_block .

Pro Drupal 7) použijete Block API .

Pokud je to váš první vpád do vývoje modulu, vřele doporučuji Pro Drupal Vývoj nebo Pro Drupal 7 Vývoj) . Je tam skoro všechno, co potřebujete vědět.

6
mpdonadio

Možná hledáte to, co jsem hledal, a najdete ho zde:

/modules/block/block.module:
block_custom_block_save ($ edit, $ delta).

Ale když se podíváte na tuto funkci, uvidíte, že můžete udělat pouze db_update sami.

db_update('block_custom')
->fields(array(
  'body' => $edit['body']['value'],
  'info' => $edit['info'],
  'format' => $edit['body']['format'],
))
->condition('bid', $delta)
->execute();
3
Dan Shumaker

V Drupal 7, podívejte se na block_add_block_form_submit v modules/block/block.admin.inc.

Toto je forma pravidelného vytváření bloku; zdá se, že pouze vkládá záznamy přímo, a ne vyvolává jinou funkci. Všimněte si, že každý záznam v tabulce bloků je propojen s jedním motivem (stačí použít aktivní, ale je bezpečnější vkládat záznamy pro všechna témata).

Tabulka block_custom obsahuje obsah.

2
richardg

K exportu bloků můžete použít modul Features Extra .

Nebo jednoduše vytvořte záznamy přímo v tabulce bloků.

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)
1
Dylan Tack