2009-11-19 5 views
2

Я пытаюсь создать форму на заказ в drupal с опорным полем узла.Можно ли настроить ссылку на узел drupal и передать ваш поиск и аргумент из другого поля

Я хотел бы добавить немного дополнительной функциональности для автозавершения узла. Я создал представление, содержащее аргумент. Я хотел бы передать этот аргумент из раскрывающегося списка, а также напечатанный текст в сценарий автозаполнения.

Кто-нибудь знает, как я начну с этого.

/* FIELD 1 - the drop down */ 
    $sql = "SELECT nid, title FROM node where type='resourcetype' AND status =1 order by title 
    "; 
     $result = db_query($sql); 
    $counter = 0 ; 
    $options = array(); 
     while ($data = db_fetch_array($result)) { 
     // krumo ($data); 
     $options[$data[nid] ] =  $data[title] ; 
     if ($counter ==0) {$df = $data[nid]; } 
     $counter ++; 


     } 


/* FIELD 2 - the node reference field */  
     $form['sor']['type'] = array(
     '#type' => 'select', 
     '#title' => t('Resource type'), 
     '#required' =>TRUE, 
     '#options' => $options, 
    )  ; 


     $form['sor']['field_asor_sors'] = array(
     '#type' => 'textfield', 
     '#title' => t('Add a SOR item to this job'), 
     '#autocomplete_path' => 'nodereference/autocomplete/field_asor_sors', 
      '#element_validate' => array('myelement_validate_is_valid_noderef'), 
     '#required' =>TRUE, 

    ); 

Большое спасибо

Matt

ответ

2

AFAIK нет простого способа сделать это.

Я хотел сделать что-то подобное некоторое время назад (используя разные аргументы, основанные на контексте узла), но воздержался от этого, поскольку для этого потребовались бы существенные изменения логики обратного вызова автозаполнения. Вам нужно будет изменить несколько функций nodereference, чтобы добавить поддержку для передачи аргумента в начальный обратный вызов nodereference_autocomplete(), передав его оттуда до _nodereference_potential_references() и, наконец, до _nodereference_potential_references_views(), при этом убедитесь, что изменения не сломают ничего.

Если вы хотите попробовать, вы должны взглянуть на исправления в this thread, так как они также хотят сделать что-то подобное и могут содержать полезные подсказки/примеры.

Возможно, альтернативой может быть замена обратного вызова #autocomplete_path поля nodereference с собственной версией, которая будет генерировать результат, добавив js-логику в раскрывающийся список, чтобы добавить дополнительный аргумент в этот путь при изменении выбора.

+0

Спасибо. Опель, я посмотрю. – Matt

+0

quote - «Возможно, более простой альтернативой может быть замените обратный вызов #autocomplete_path поля nodereference собственной версией, которая будет генерировать результат, добавив js-логику в раскрывающийся список, чтобы добавить дополнительный аргумент к этому пути, когда выбор изменится ». Знаете ли вы, в каком формате подан автоматический полный результат? Я правильно понял, что мне нужно передать массив результатов в drupal_js ($ arrayofresults); ? – Matt

+0

@Matt: Посмотрите на функцию 'nodereference_autocomplete()' в nodereference.module. В принципе, это должен быть только drupal_json ($ arrayofresults), но я думаю, вам нужно будет сопоставить ожидаемую структуру ключей массива, чтобы разрешить извлечение низа (не уверен, хотя). –

-1

Если вы идете в форме конфигурации nodereference поля и выделите весь путь до дна, есть FIELDSET (которые могут быть свернуты), что называется " Дополнительно - Узлы, на которые можно ссылаться (Вид). Вы можете использовать это, чтобы выбрать представление, и чтобы этот вид был источником выбора нумерации без написания нового кода.

+0

Привет, Джон, спасибо за ответ. Мне нужно передать аргументы из идентификатора из другого поля (FIELD 1), поэтому на вопрос не ответит. – Matt