it-swarm.asia

طريقة سهلة لإنشاء كتل برمجيا؟

تعلم دروبال. أعلم الآن أنه يمكنني إنشاء كتلة من خلال الواجهة الخلفية ، لكنني أفضل إجرائها مسبقًا برمجيًا ، إذا كان ذلك ممكنًا. في الحقيقة أنا متأكد من أنه ممكن. ولكن ما هي أسهل طريقة؟

26
jayarjo

مقابل 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 للكتل على Drupal.org للحصول على قائمة كاملة بالخطافات. Drupal 6 مختلف قليلاً. لا يوجد خطاف hook_block_view ؛ بدلاً من ذلك استخدم hook_block لإعلان الكتل.

34
NEAR DARK

بالنسبة إلى Drupal 6 ، فإن الإجابة القصيرة هي أنك تنشئ وحدة مخصصة تنفذ hook_block .

من أجل Drupal 7 ، يمكنك استخدام Block API .

إذا كانت هذه أول مشاركة لك في تطوير الوحدة ، فإنني أوصي بشدة Pro Drupal Development أو Pro Drupal 7 Development . كل ما تحتاج إلى معرفته تقريبًا موجود.

6
mpdonadio

ربما تبحث عن ما كنت أبحث عنه ووجدته هنا:

/modules/block/block.module:
block_custom_block_save (تحرير $ ، $ delta).

ولكن عندما تنظر إلى هذه الوظيفة ، سترى أنه يمكنك فقط إجراء db_update بنفسك.

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 ، ألق نظرة على block_add_block_form_submit في modules/block/block.admin.inc.

هذا هو نموذج إنشاء الكتل العادية ؛ يبدو فقط لإدراج السجلات مباشرة بدلاً من استدعاء دالة أخرى. لاحظ أن كل سجل في جدول الحظر مرتبط بموضوع واحد (يمكنك فقط استخدام السجل النشط ولكنه أكثر أمانًا لإدراج السجلات لجميع السمات).

يحتوي الجدول block_custom على المحتوى.

2
richardg

يمكنك استخدام 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)
1
Dylan Tack