2012-09-13 6 views
5

मैं इस ट्यूटोरियल की लाइनों के साथ अपने उपयोगकर्ता पंजीकरण पृष्ठ पर कुछ टेक्स्ट फ़ील्ड में कुछ कस्टम स्वत: पूर्ण कार्यक्षमता जोड़ने की कोशिश कर रहा हूं; http://drupal.org/node/854216ड्रूपल एफएपीआई त्रुटि; स्ट्रिंग ऑफसेट्स से न ही ओवरलोडेड ऑब्जेक्ट्स

मैं सफलतापूर्वक इसे पूरा करने में सक्षम हूं, लेकिन अब जब भी मैं पंजीकरण फॉर्म जमा करता हूं तो मुझे एक खाली पृष्ठ मिलता है, और यह त्रुटि लॉग में दिखाई देती है;

PHP Fatal error: Cannot create references to/from string offsets nor overloaded objects in /var/www/html/drupal/includes/common.inc on line 6448, referer: http://[...]/drupal/?q=user/register

मैं विषय अब नहीं मिल रहा है, लेकिन जब मैं शुरू में इस समस्या googling था मैंने कहीं पढ़ा है कि इस मुद्दे पर आम तौर पर है कि '#' प्रतीक जोड़ा या एक संपत्ति कुंजी से चूक गए किया गया है। क्योंकि # प्रतीक के बिना यह उस संपत्ति के मूल्य को बच्चे के रूप में मानता है, और इस प्रकार एक सरणी। या उन पंक्तियों के साथ कुछ, लेकिन डबल चेकिंग के बाद ऐसा लगता है कि मैं जिस संपत्ति का उपयोग कर रहा हूं वह होना चाहिए जैसा कि मैंने उन्हें रखा है।

यहां कोड है, क्या कोई जानता है कि मैं क्या गलत कर रहा हूं?

function gtx_alterations_menu() { 
    $items = array(); 
    $items['city/autocomplete'] = array(
    'page callback' => 'city_autocomplete', 
    'access callback' => TRUE, 
    'type' => MENU_CALLBACK 
); 
    return $items; 
} 

function gtx_alterations_form_alter(&$form, &$form_state, $form_id) { 
    if ($form_id == 'user_register_form') { 
    $form['field_city_of_residence']['#type'] = 'textfield'; 
    $form['field_city_of_residence']['#title'] = t('City of Residence'); 
    $form['field_city_of_residence']['#autocomplete_path'] = 'city/autocomplete'; 
    $form['field_headquarters_location']['#type'] = 'textfield'; 
    $form['field_headquarters_location']['#title'] = t('Headquarters Location'); 
    $form['field_headquarters_location']['#autocomplete_path'] = 'city/autocomplete'; 
    } 
} 

function city_autocomplete($string = '') { 
    $cities = array(); 
    $locations = array(); 
    $results = file_get_contents('http://graph.facebook.com/search?q='.urlencode($string).'&type=adcity'); 

    $results = preg_replace('/\\\\u0*([0-9a-fA-F]{1,5})/', '&#x\1;', $results); 

    preg_match_all('/"name":"[^,]+/', $results, $cities); 
    preg_match_all('/"subtext":".+?,[^"]+/', $results, $locations); 

    $final = array(); 

    foreach ($cities[0] as $key => $value) { 
    $value = substr($value, 8); 
    $subtext = substr($locations[0][$key], 11); 
    $result = $value . ', ' . $subtext; 

    $final[$result] = $result; 
    } 

    drupal_json_output($final); 
} 

कुछ बातें मैं

की कोशिश की तो समस्या मैं इन दो पंक्तियों बाहर टिप्पणी की कि निर्धारित को कम करने की कोशिश कर;

$form['field_city_of_residence']['#autocomplete_path'] = 'city/autocomplete'; 
$form['field_headquarters_location']['#autocomplete_path'] = 'city/autocomplete'; 

त्रुटि को हटा देता है, हालांकि स्वाभाविक रूप से स्वत: पूर्णता भी अक्षम है।


इसके अतिरिक्त

drupal_json_output(array('test' => 'test')); 

साथ city_autocomplete ($ स्ट्रिंग) की सामग्री की जगह त्रुटि को हल नहीं करता है, जिसका अर्थ है कि समस्या यह है कि समारोह में कुछ नहीं है।


इन दो पंक्तियों

$form['field_city_of_residence']['#autocomplete_path'] = 'city/autocomplete'; 
$form['field_headquarters_location']['#autocomplete_path'] = 'city/autocomplete'; 

पिछले त्रुटि होती है से # प्रतीक निकाला जा रहा है इस एक के साथ प्रतिस्थापित किया,

Unsupported operand types in /var/www/html/drupal/includes/form.inc on line 1755 

उत्तर

5

फील्ड रूपों Drupal 7 में थोड़ा भ्रमित कर रहे हैं, है ब्रेकडाउन के लिए Why is hook_form_alter so messy in d7? पर एक नज़र डालें।

वास्तविक HTML तत्व (जिन्हें आप मान बदलना चाहते हैं) कहने के लिए पर्याप्त सरणी में गहराई से मिलता है, उदा।

$form['field_city_of_residence'][LANGUAGE_NONE][0]['value']['#type'] = 'textfield'; 
$form['field_city_of_residence'][LANGUAGE_NONE][0]['value']['#title'] = t('City of Residence'); 
$form['field_city_of_residence'][LANGUAGE_NONE][0]['value']['#autocomplete_path'] = 'city/autocomplete'; 
+0

यह सेट अप बहुत परेशानी है, विशेष रूप से यह अन्यथा काम करने पर विचार कर रहा है। हालांकि बहुत बहुत धन्यवाद। :) – Ardnived

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