web-gelistirme-sc.com

Programlı olarak blok oluşturmanın kolay yolu?

Drupal Öğrenme. Artık arka uçtan blok oluşturabileceğimi biliyorum, ancak mümkünse programlı olarak onları önceden tercih ederim. Aslında mümkün olduğuna eminim. Ama en kolay yol nedir?

26
jayarjo

Drupal 7 için:

özel modül içindeki hook_block_info ve hook_block_view kancalarını kullanın. hook_block_info bloğu tanımlar. admin> yapı> bloklar. * hook_block_view * içeriği görüntüler. Aşağıdaki örneklere Drupal API adresinden bakın.

İki bloğun tanımlandığı hook_block_info örneği (Syndicate ve Recent content başlıklı):

    <?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 örneği:

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

Kancaların tam listesi için Drupal.org'daki Bloklar API sayfası konusuna bakın. Drupal 6 biraz farklı. Hook_block_view kanca yok; bunun yerine blokları bildirmek için hook_block kullanın.

34
NEAR DARK

Drupal 6 için kısa yanıt, hook_block uygulayan özel bir modül oluşturmanızdır.

Drupal 7 için, Blok API'sını kullanırsınız.

Bu modül geliştirmeye ilk adımınızsa, Pro Drupal Geliştirme veya Pro Drupal 7 Geliştirme . Bilmeniz gereken hemen hemen her şey orada.

6
mpdonadio

Ne aradığımı arıyorsunuz ve burada buldunuz:

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

Ancak bu işleve baktığınızda db_update komutunu kendiniz yapabileceğinizi göreceksiniz.

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

Drupal 7 bölümünde block_add_block_form_submit içinde modules/block/block.admin.inc.

Bu düzenli blok oluşturma formudur; başka bir işlevi çağırmak yerine yalnızca kayıtları doğrudan eklediği görülüyor. Blok tablosundaki her kaydın tek bir temayla bağlantılı olduğunu unutmayın (sadece etkin olanı kullanabilirsiniz, ancak tüm temalar için kayıt eklemek daha güvenlidir).

block_custom tablosu içeriği tutar.

2
richardg

Blokları dışa aktarmak için Extra Extra modülünü kullanabilirsiniz.

Alternatif olarak, doğrudan bloklar tablosunda kayıtlar oluşturabilirsiniz.

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