logo

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - नया लेआउट बिल्डर अनुभव❗

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - स्टाइलिश, कस्टमाइज़ेबल ब्लॉक टाइप्स: स्लाइडशो, टैब्स, कार्ड्स, एकॉर्डियन्स और कई अन्य। बैकग्राउंड, DOM बॉक्स, जावास्क्रिप्ट प्लगइन्स के लिए बिल्ट-इन सेटिंग्स। आज ही लेआउट बिल्डिंग का भविष्य अनुभव करें।

डेमो EBT मॉड्यूल्स EBT मॉड्यूल्स डाउनलोड करें

❗एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - नया पैराग्राफ्स अनुभव

एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - एनालॉजिकल पैराग्राफ आधारित मॉड्यूल्स का सेट।

डेमो EPT मॉड्यूल्स EPT मॉड्यूल्स डाउनलोड करें

स्क्रॉल

Form API Drupal 7 — Drupal में फ़ॉर्म बनाना

14/10/2025, by Ivan

पिछले पाठों में हमने hook_block_info(), hook_block_view(), hook_menu(), hook_permission() जैसे हुक्स से परिचय किया था, और अब हम प्रोग्राम के माध्यम से जितनी चाहें उतनी पेज और ब्लॉक बना सकते हैं। इस पाठ में हम Drupal 7 के Form API का उपयोग करके फ़ॉर्म बनाना सीखेंगे। हम अपने मॉड्यूल की प्रशासनिक कार्यक्षमता के लिए एक फ़ॉर्म बनाएंगे और पहले से जाने हुए अधिकतम हुक्स का उपयोग करेंगे ताकि ज्ञान को मजबूत किया जा सके।

सबसे पहले, हम 3 ब्लॉक्स बनाएंगे — मुझे लगता है कि यह आपके लिए कोई कठिनाई नहीं होगी।

function sitemade_block_info(){
    $blocks = array(); // खाली ऐरे इनिशियलाइज़ करते हैं
    $blocks[1]['info'] = 'उपयोगकर्ताओं की सूची'; // एडमिन पैनल में ब्लॉक का शीर्षक
    $blocks[2]['info'] = 'नोड्स की सूची';
    $blocks[3]['info'] = 'टर्म्स की सूची';
    return $blocks; // ब्लॉकों की सूची लौटाते हैं
}
 
function sitemade_block_view($delta = ''){
    $block = array(); // ब्लॉक के लिए खाली ऐरे
    switch ($delta){
        case 1: // वही delta जो हमने hook_block_info() में लौटाई थी
          $block['subject'] = 'उपयोगकर्ता'; // ब्लॉक का शीर्षक
          $block['content'] = ''; // कंटेंट वेरिएबल
          $query = db_select('users', 'u') // उपयोगकर्ताओं का चयन
            ->fields('u', array('uid', 'name')) // चयनित फील्ड्स
            ->orderBy('u.uid', 'DESC') // UID के अनुसार उल्टा क्रम
            ->range(0, 5) // 5 उपयोगकर्ता
            ->execute(); // क्वेरी चलाते हैं
          $users = $query->fetchAll(PDO::FETCH_ASSOC); 
          foreach($users as $user){
            $block['content'] .='';
          }
        break;
        case 2:
          $block['subject'] = 'नोड्स';
          $block['content'] = '';
          $query = db_select('node', 'n')
            ->fields('n', array('nid', 'title'))
            ->orderBy('n.nid', 'DESC')
            ->range(0, 10)
            ->execute();
          $nodes = $query->fetchAll(PDO::FETCH_ASSOC);
          foreach($nodes as $node){
            $block['content'] .='';
        }            
        break;
        case 3:
          $block['subject'] = 'टर्म्स';
          $block['content'] = '';
          $query = db_select('taxonomy_term_data', 't')
            ->fields('t', array('tid', 'name'))
            ->orderBy('t.tid', 'DESC')
            ->range(0, 10)
            ->execute();
          $terms = $query->fetchAll(PDO::FETCH_ASSOC);
          foreach($terms as $term){
            $block['content'] .='';
          }            
        break;
    }
    return $block;
}

अब कैश को साफ करें ताकि हमारे नए ब्लॉक्स एडमिन इंटरफ़ेस में दिखाई दें। फिर इन ब्लॉकों को बाएँ साइडबार में रखें:

Drupal blocks

अब हम एडमिन पैनल में एक पेज बनाएंगे, जहाँ बाद में हम इन तीन ब्लॉक्स के लिए एडमिनिस्ट्रेशन फ़ॉर्म रखेंगे:

function sitemade_permission(){
    return array(
      'admin content blocks' => array(
        'title' => t('Admin content blocks'),
        'description' => t('Nodes, Users, Terms'),
      ),
    );
}
function sitemade_menu(){
    $items = array(); // मेनू आइटम्स का ऐरे
    $items['admin/config/content/content_blocks'] = array(
      'title' => 'उपयोगकर्ता, नोड्स और टर्म्स के ब्लॉक्स',
      'description' => 'ब्लॉक्स का प्रशासन',
      'page callback' => '_sitemade_content_blocks',
      'access arguments' => array('admin content blocks'),
    );
    return $items; 
}
function _sitemade_content_blocks(){
    $content = 'Lorem ipsum!';
    return $content;
}

पेज बनने के बाद, एड्रेस admin/config/content/content_blocks पर इस तरह का एक प्लेसहोल्डर दिखाई देना चाहिए:

Drupal admin page

और अब हम इस पेज के लिए एडमिनिस्ट्रेटर अनुमति सेट करेंगे (इसके लिए हमने hook_permission() जोड़ा था)।

Drupal permission

अब हम अपने हुक्स का कोड बदलेंगे। सबसे पहले हम एडमिन फ़ॉर्म बनाएंगे। हम इन तीन ब्लॉक्स में क्या एडमिनिस्टर करेंगे? मेरा सुझाव है कि हम ब्लॉक का शीर्षक और उसमें प्रदर्शित की जाने वाली एंटिटीज़ (नोड्स, उपयोगकर्ता, टर्म्स) की संख्या को नियंत्रित करें।

सबसे पहले, hook_menu में 'page callback' को बदलना होगा।

function sitemade_menu(){
    $items = array();
    $items['admin/config/content/content_blocks'] = array(
      'title' => 'उपयोगकर्ता, नोड्स और टर्म्स के ब्लॉक्स',
      'description' => 'ब्लॉक्स का प्रशासन',
      'page callback' => 'drupal_get_form',
      'page arguments' => array('_sitemade_content_blocks'),
      'access arguments' => array('admin content blocks'),
    );
    return $items;
}

नीचे drupal_get_form() फ़ंक्शन का विवरण है:

drupal_get_form($form_id)

यह drupal_build_form() की एक रैपर फ़ंक्शन है, जब $form_state की आवश्यकता नहीं होती।

drupal_get_form() के पैरामीटर

$form_id — उस फ़ॉर्म का यूनिक आइडेंटिफायर जिसे प्रोसेस किया जाना है। यदि उसी नाम का फ़ंक्शन मौजूद है, तो वह फ़ॉर्म ऐरे तैयार करने के लिए कॉल किया जाएगा।

drupal_get_form() का रिटर्न वैल्यू

यह एक फ़ॉर्म ऐरे लौटाता है।

अब हमें अपनी फ़ंक्शन _sitemade_content_blocks() को पुनः लिखना होगा ताकि वह एक फ़ॉर्म ऐरे लौटाए।

function _sitemade_content_blocks(){
    $form = array(); 
    $form['nodes-title'] = array(
      '#type' => 'textfield',
      '#title' => t('नोड्स ब्लॉक का शीर्षक'),
      '#default_value' => variable_get('node_block', ''),
      '#size' => 60,
      '#maxlength' => 64,
      '#description' => t('नोड्स के ब्लॉक के लिए शीर्षक'),
    );
...

अब फ़ॉर्म को संभालने के लिए हम hook_formID_validate() और hook_formID_submit() का उपयोग करेंगे — क्रमशः सत्यापन और सबमिशन के लिए।

अंत में, हम फ़ॉर्म के सबमिशन को हैंडल करेंगे ताकि डाले गए मान Drupal की वेरिएबल्स में variable_set() के माध्यम से सहेजे जाएँ और फिर variable_get() के जरिए डिफ़ॉल्ट रूप में फ़ील्ड्स में प्रदर्शित हों।

अंततः, ब्लॉक्स के शीर्षक और उनमें दिखाए जाने वाले एंटिटीज़ की संख्या भी variable_get() से पढ़ी जाएगी, और अब हम परिणाम मुख्य पृष्ठ पर देख सकते हैं।

Drupal block