प्रोग्राम बनाने के लिए आसान तरीका? [बन्द है]


26

द्रुपाल सीखना। मुझे अब पता है कि मैं बैकएंड के माध्यम से ब्लॉक बना सकता हूं, लेकिन मैं उन्हें प्रोग्रामेटिक रूप से तैयार करूंगा, अगर यह संभव है। वास्तव में मुझे पूरा यकीन है कि यह संभव है। लेकिन सबसे आसान तरीका क्या है?


विस्तार ब्लॉग: goo.gl/kD3TZu
सुरेश कामुशी

जवाबों:


34

ड्रुपल 7 के लिए:

अपने कस्टम मॉड्यूल में हुक_ब्लॉक_इनफो और हुक_ब्लॉक_व्यू हुक का उपयोग करें । हुक_ब्लॉक_इन्फो ब्लॉक को परिभाषित करता है। यह व्यवस्थापक > संरचना > ब्लॉकों में दिखाई देगा । * hook_block_view * सामग्री प्रदर्शित करता है। Drupal API से नीचे के उदाहरण देखें।

हुक_ब्लॉक_इन्फो का उदाहरण, जहां दो ब्लॉक परिभाषित किए गए हैं (शीर्षक और हाल की सामग्री):

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

हुक_ब्लॉक_व्यू का उदाहरण:

<?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 पर ब्लॉक एपीआई पेज देखें । Drupal 6 थोड़ा अलग है। कोई हुक_ब्लॉक_व्यू हुक नहीं है; इसके बजाय ब्लॉक घोषित करने के लिए हुक_ब्लॉक का उपयोग करें ।


6

Drupal 6 के लिए, संक्षिप्त उत्तर यह है कि आप एक कस्टम मॉड्यूल बनाते हैं जो हुक_ब्लॉक को लागू करता है

Drupal 7 के लिए, आप ब्लॉक एपीआई का उपयोग करते हैं ।

यदि यह मॉड्यूल विकास में आपका पहला कदम है, तो मैं प्रो Drupal विकास या Pro Drupal 7 विकास की अत्यधिक अनुशंसा करता हूं । बहुत ज्यादा सब कुछ तुम्हें पता करने की जरूरत है वहाँ में है।


ऐसा लगता है कि हुक_ब्लॉक का उपयोग केवल अलग मॉड्यूल में किया जा सकता है: | मुझे अभी भी नहीं मिला कि यह जटिलता क्यों है ... क्या ड्रुपल में सब कुछ के लिए मॉड्यूल होना एक सामान्य अभ्यास है?
जरजो

2
हाँ, मॉड्यूल Drupal की एक प्रमुख अवधारणा है। ज्यादातर तरीकों से, ड्रुपल अपने आप में मॉड्यूल का एक सेट है और मॉड्यूल हुक के माध्यम से सब कुछ हो जाता है।
mpdonadio

3

आप शायद वही देख रहे होंगे जो मैं ढूंढ रहा था और यहाँ पाया:

/modules/block/block.module:
/modules/block/block.module block_custom_block_save ($ संपादित करें, $ डेल्टा)।

लेकिन जब आप इस फ़ंक्शन को देखते हैं तो आप देखेंगे कि आप केवल db_update कर सकते हैं।

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

2

Drupal 7 में, पर एक नज़र block_add_block_form_submitमें modules/block/block.admin.inc

यह नियमित ब्लॉक निर्माण फॉर्म है; यह केवल दूसरे फ़ंक्शन को कॉल करने के बजाय सीधे रिकॉर्ड सम्मिलित करने के लिए प्रकट होता है। ध्यान दें कि ब्लॉक तालिका में प्रत्येक रिकॉर्ड एक ही विषय से जुड़ा हुआ है (आप केवल सक्रिय एक का उपयोग कर सकते हैं लेकिन यह अन्य विषयों के लिए रिकॉर्ड सम्मिलित करने के लिए सुरक्षित है)।

Block_custom तालिका सामग्री रखती है।


1

आप ब्लॉक को निर्यात करने के लिए फीचर्स एक्स्ट्रा मॉड्यूल का उपयोग कर सकते हैं ।

वैकल्पिक रूप से, सीधे ब्लॉक तालिका में सीधे रिकॉर्ड बनाएं।

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
अतिरिक्त मॉड्यूल या प्रत्यक्ष एसक्यूएल क्वेरी ... मुझे लगता है कि चारों ओर कुछ क्लीनर होना चाहिए।
जयरजो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.