2012-09-13 25 views
5

Tôi đang cố gắng thêm một số chức năng tự động hoàn thành tùy chỉnh vào một vài trường văn bản trên trang đăng ký người dùng của tôi, dọc theo các dòng của hướng dẫn này; http://drupal.org/node/854216.Lỗi FAPI Drupal; Không thể tạo tham chiếu đến/từ chuỗi bù trừ hoặc đối tượng quá tải

Tôi đã có thể thực hiện thành công điều đó, nhưng bây giờ bất cứ khi nào tôi gửi biểu mẫu đăng ký, tôi nhận được một trang trống và lỗi này hiển thị trong nhật ký;

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

tôi không thể tìm thấy chủ đề này bây giờ, nhưng khi tôi bước đầu đã được googling vấn đề này, tôi đọc ở đâu đó rằng vấn đề này là thường là biểu tượng '#' đã được thêm vào hoặc nhỡ từ một phím bất động sản. Bởi vì không có ký hiệu # nó xử lý giá trị của thuộc tính đó như một đứa trẻ, và do đó là một mảng. Hoặc một cái gì đó dọc theo những dòng đó, nhưng sau khi kiểm tra lại nó có vẻ như tất cả các thuộc tính tôi đang sử dụng nên như tôi đã đặt chúng.

Đây là mã, có ai biết tôi đang làm gì sai không?

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

Một số điều tôi đã cố gắng

Khi cố gắng để thu hẹp vấn đề tôi xác định rằng ý kiến ​​ra hai dòng sau;

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

xóa lỗi, tuy nhiên điều đó có nghĩa là tự động hoàn tất cũng bị tắt.


Bên cạnh đó thay thế các nội dung của city_autocomplete ($ string) với

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

không giải quyết được lỗi, có nghĩa rằng vấn đề không phải là một cái gì đó trong hàm đó.


Loại bỏ cáC# biểu tượng từ hai dòng sau

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

gây ra lỗi trước được thay thế bằng thế này,

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

Trả lời

5

hình thức Dòng là chút bối rối trong Drupal 7, có hãy xem Why is hook_form_alter so messy in d7? để biết chi tiết về sự cố.

Đủ để nói các phần tử HTML thực tế (các yếu tố bạn muốn thay đổi giá trị cho) được tìm thấy sâu hơn trong mảng, ví dụ:

$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

Việc thiết lập đó khá rắc rối, đặc biệt khi xem xét nó hoạt động bình thường. Cảm ơn rất nhiều. :) – Ardnived

Các vấn đề liên quan