2010-02-15 11 views
8

के खिलाफ उपयोगकर्ता की जानकारी मान्य करें मैं पंजीकरण मॉड्यूल में हुक करना चाहता हूं। मेरे पास पहले से ही 50000 उपयोगकर्ता का डेटाबेस है जो मेरी पुरानी वेबसाइट का उपयोग करते हैं। अब मैं ड्रूपल में प्रवास कर रहा हूं।ड्रूपल पंजीकरण में हुक करें और व्यवसाय तर्क

मैंने अभी भी ड्रोपल डेटाबेस में प्रविष्टियों को माइग्रेट नहीं किया है। मैं अपने पुराने डेटाबेस के खिलाफ जांच करूँगा।

जब कोई उपयोगकर्ता ड्रूपल में पंजीकरण करने का प्रयास करता है, तो मुझे यह जांचना होगा कि उसने जो उपयोगकर्ता नाम दिया है वह 50000 (और बढ़ती) प्रविष्टियों की सूची में पहले से मौजूद है या नहीं। यदि यह अस्तित्व में है, तो मुझे पंजीकरण त्रुटि को एक त्रुटि संदेश दिखा रहा है जिसमें कहा गया है कि उपयोगकर्ता नाम मौजूद है ..

मुझे किस हुक का उपयोग करना चाहिए? यदि मेरा कोड आंकड़ा है कि सत्यापन विफल हुआ है, तो मैं त्रुटि संदेश प्रदर्शित करने के लिए ड्रोपल कैसे बता सकता हूं?

संपादित करें: मैंने hook_user में लगाया और 'validate' op के लिए चेक किया। मैं त्रुटि संदेशों को सत्यापित और असाइन करने में सक्षम हूं। लेकिन यह सभी रूपों के लिए हो रहा है। मैं केवल नए खाता निर्माण फॉर्म को प्रमाणित करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

धन्यवाद। कुछ

// Alter the registration form 
function yourModuleName_form_user_register_alter(&$form, &$form_state) { 
    // Add your own function to the array of validation callbacks 
    $form['#validate'][] = 'yourModuleName_user_register_validate'; 
} 

// Perform your own validation 
function yourModuleName_user_register_validate($form, &$form_state) { 
    // Extract the submitted name 
    $name = $form_state['values']['name']; 
    // Check it according to your own logic 
    $is_valid_name = your_check_for_valid_name(); 
    // File error, when not valid 
    if (!$is_valid) { 
    form_set_error('name', t('Name already taken, please choose a different one')); 
    } 
} 

उत्तर

18

आप कुछ हद तक तो की तरह, hook_form_FORM_ID_alter() का उपयोग कर पंजीकरण फार्म के लिए एक अतिरिक्त सत्यापन कॉलबैक फ़ंक्शन पंजीकरण करना होगा Drupal 7 के लिए उदाहरण:

/** 
* Implements of hook_user_insert(). 
*/ 
function foo_user_insert(&$edit, $account, $category) { 
    // foo_user_submit($edit, $account); 
} 

/** 
* Implementation of hook_user_delete(). 
*/ 
function foo_user_delete($account) { 
    // foo_user_delete($account); 
} 

/** 
* Implements hook_form_FORM_ID_alter(). 
* Form ID: user_register_form 
*/ 
function foo_form_user_register_form_alter($form, &$form_state) { 
    if ($form['#user_category'] == 'account' && !isset($form['#user']->uid)) { 
    // Foo code 
    } 
} 

/** 
* Implements hook_form_FORM_ID_alter(). 
* Form ID: user_profile_form 
*/ 
function foo_form_user_profile_form_alter($form, &$form_state) { 
    // Set a custom form validate and submit handlers. 
    $form['#validate'][] = 'foo_account_validate'; 
    $form['#submit'][] = 'foo_account_submit'; 
} 

/** 
* Implements of hook_form_alter(). 
* This is the same as: hook_form_FORM_ID_alter() 
*/ 
function foo_form_alter(&$form, $form_state, $form_id) { 
    switch ($form_id) { 
    case "user_profile_form": 
    case "user_register_form": 
     break; 
    } 
} 
+1

+1 बहुत बहुत धन्यवाद। यह काम करता है, मैं उस विशेष रूप के क्षेत्र (ओं) के लिए सत्यापन सेट करने में सक्षम हूं। मुझे FORM_ID चीज़ के बारे में पता नहीं था, मैंने कुछ अन्य हुक का उपयोग किया था और यह सभी रूपों के लिए चल रहा था: डी – user266803

+0

हालांकि यह एक अच्छा समाधान है, ध्यान रखें कि वर्तमान में ड्रूपल hook_form_FORM_ID_alter के बाद hook_form_alter चलाता है। तो सड़क के नीचे एक मामला हो सकता है जहां एक और मॉड्यूल आपके hook_form_FORM_ID_alter परिवर्तनों को ओवर-राइड करेगा। उस समय का 95% जब आप किसी समस्या में भाग नहीं लेते हैं, लेकिन कुछ कहते हैं कि यह hook_form_alter और स्विच स्टेटमेंट का उपयोग करने के लिए सबसे सुरक्षित है। –

+0

यदि आपका सत्यापन फ़ंक्शन केवल एक फ़ील्ड की जांच कर रहा है, तो इसके बजाय [एलिमेंट वैलिडेशन] (https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#element_validate) फ़ंक्शन बनाने पर विचार करें। – rymo

6
Drupal 6. पर

हेनरिक ओपल जवाब काम ड्रुपल 7 उपयोग के लिए yourModuleName_form_user_register_form_alter

संबंधित मुद्दे