Programlı bloklar oluşturmanın kolay yolu? [kapalı]


26

Drupal'ı öğrenmek. Şimdi arka uçtan blok oluşturabileceğimi biliyorum, ancak mümkün olduğunda onları programatik olarak ön üretmeyi tercih ederim. Aslında bunun mümkün olduğuna eminim. Ama en kolay yol nedir?


ayrıntılı blog: goo.gl/kD3TZu
Suresh Kamrushi

Yanıtlar:


34

Drupal 7 için:

Özel modülünüzde hook_block_info ve hook_block_view kancalarını kullanın . hook_block_info bloğu tanımlar. Yönetici > yapı > bloklarda görünecektir . * hook_block_view * içeriği görüntüler. Drupal API'sından aşağıdaki örneklere bakın.

İki bloğun tanımlandığı hook_block_info örneği (Syndicate ve Recent içeriği 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ına bakın . Drupal 6 biraz farklı. Hook_block_view hook yok; bunun yerine blokları bildirmek için hook_block kullanın.


6

Drupal 6 için kısa cevap, hook_block'u uygulayan özel bir modül yaratmanızdır .

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

Bu, modül geliştirmeye ilk adımınız ise, Pro Drupal Development veya Pro Drupal 7 Development ürününü tavsiye ederim . Bilmeniz gereken her şey orada.


Hook_block sadece ayrı bir modülde kullanılabiliyor. Hala bu karmaşıklığın nedenini anlamadım ... Drupal'daki her şey için modüllere sahip olmak normal bir uygulama mı?
jayarjo

2
Evet, modüller Drupal'ın kilit bir konseptidir. Çoğu durumda, Drupal'ın kendisi bir modül kümesidir ve her şey modül kancasıyla yapılır.
mpdonadio

3

Aradığımı arıyor ve burada bulmuş olabilirsin:

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

Ancak bu fonksiyona baktığınızda sadece db_update'i 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();

2

Drupal 7 yılında bakmak block_add_block_form_submitiçinde modules/block/block.admin.inc.

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

Block_custom tablo içeriğini bulundurur.


1

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

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

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
Ekstra modül veya doğrudan sql sorgusu ... Bence etrafında temiz bir şey olmalı.
jayarjo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.