कस्टम ड्रुपल फॉर्म में टैक्सोनॉमी टर्म रेफरेंस फील्ड को कैसे जोड़ा जाए


9

एक मेनू आइटम drupal_get_formको कॉलबैक फ़ंक्शन के रूप में परिभाषित किया जाता है और कॉल बैक फ़ंक्शन से फॉर्म वापस किया जाता है। मैं taxonomy_term_referenceइस फ़ॉर्म में फ़ील्ड कैसे जोड़ सकता / सकती हूं ?

$items['files/add'] = array(
      'title' => 'Add file',
      'description' => 'Allows users to add files',
      'type' => MENU_CALLBACK,
      'page callback' => 'drupal_get_form',
      'page arguments' => array('mymodule_add_file'),
      'access callback' => TRUE,
    );
function mymodule_add_file($form, &$form_state) {
    drupal_set_title("Add file");
    $form['mymodule_form'] = array(
      '#type' => 'fieldset',
      '#tree' => TRUE,
      '#collapsable' => FALSE,
      '#title' => 'Adding file to locker room',
    );

    $form['mymodule_form']['file'] = array(
      '#type' => 'managed_file',
      '#title' => 'Upload file',      
    );

    $form['mymodule_form']['tag'] = array(
      '#type' => 'taxonomy_term_reference',
      '#title' => 'Tags',
    );  

    return $form;
}

मुझे यकीन नहीं है कि कैसे के लिए taxonomy_term_reference फ़ील्ड जोड़ें $form['mymodule_form']['tag']। मैं चाहता हूं कि यह क्षेत्र एक शब्दावली शब्दों से पूर्ण ऑटो के साथ एक पाठ क्षेत्र हो और जब प्रवेश शब्द नहीं मिलता है तो नया शब्द जोड़ा जाए

जवाबों:


5

ड्रुपल 7 के लिए, कोड कुछ इस तरह है, जहां field_tagsविजेट प्रकार के स्वत: पूर्ण के साथ नोड में एक वर्गीकरण क्षेत्र है।

<?php
   $node=node_load($nid);
    $tags = array();
    foreach ($node->field_tags['und'] as $item) {
      $tags[$item['tid']] = isset($item['taxonomy_term']) ?  $item['taxonomy_term'] : taxonomy_term_load($item['tid']);
    }
    $form['tags'] = array(
      '#type' => 'textfield',
      '#default_value' => taxonomy_implode_tags($tags),
      '#title' => 'Add Tags',
      '#autocomplete_path' => 'taxonomy/autocomplete/field_tags',
      '#maxlength' => 1024,
      '#element_validate' => array('taxonomy_autocomplete_validate')
    );
?>

pageआपके कोड के अंत में क्या कर रहा है? मेरे लिए अमान्य php कोड पसंद है?
FLY

यह सिर्फ एक टाइपो प्रतीत होता है। आप सुरक्षित रूप से इसे अनदेखा कर सकते हैं, मुझे विश्वास है।
ब्रायन वीएल

ऊपर दिए गए कोड के $ फॉर्म भाग के साथ, मुझे फॉर्म में दिखाने के लिए टैक्सोनॉमी फ़ील्ड मिलता है। स्वतः पूर्णता भी काम करती है। लेकिन मैं एक नोड के वर्गीकरण क्षेत्र में प्रस्तुत मूल्यों को कैसे संग्रहीत करूं? $submitted_tags = $form_state['values']['tags']; $node->field_tags[LANGUAGE_NONE][0]['value'] = $submitted_tags;मेरे लिए काम नहीं करता है। बस मुझे त्रुटियाँ देता है।
डेन्कवर्त्ज

0

आपको शब्दावली आईडी को शामिल करने की आवश्यकता है - आपको इसे या तो हार्डकोड करने में सक्षम होना चाहिए

$form['mymodule_form']['tag'][$vocabulary->vid] = array(
  '#type' => 'textfield',
  '#default_value' => $typed_string,
  '#maxlength' => 100,
  '#autocomplete_path' => 'taxonomy/autocomplete/'. $vocabulary->vid,
  '#required' => $vocabulary->required,
  '#title' => $vocabulary->name,
  '#description' => t('Some description ...").')

);

या वकताब आईडी 5 के लिए

$form['mymodule_form']['tag']['5'] = array(
  '#type' => 'textfield',
  '#default_value' => $typed_string,
  '#maxlength' => 100,
  '#autocomplete_path' => 'taxonomy/autocomplete/5',
  '#required' => $vocabulary->required,
  '#title' => $vocabulary->name,
  '#description' => t('Some description ...").')
);

परीक्षण नहीं किया गया, लेकिन यह काम करना चाहिए। यहाँ पर एक ग्रंथी है: http://drupal.org/node/854216


क्या आप सुनिश्चित हैं कि यह D7 के लिए भी काम करता है? मैं इसे काम नहीं कर सका। यह taxonomy.module
श्रीहित नार

हम्म, हाँ यह काम करता है, लेकिन बिल्कुल वैसा नहीं जैसा कि यह होना चाहिए।
tecjam

1
यह काम नहीं करेगा। Drupal 7 के taxonomy_autocomplete को एक तर्क के रूप में एक फ़ील्ड नाम पारित करना होगा। यह उदाहरण Drupal 6 के वर्गीकरण स्वायत्त सिंटैक्स का उपयोग करता है।
ब्रायन वी।

0

मैंने इसका इस्तेमाल किया और मुझे स्वतः पूर्ण कॉलबैक काम करने लगे, हालांकि निर्दिष्ट वर्गीकरण स्वायत्तता के लिए नहीं। इसके बजाय इसने सभी वोकैब से परिणाम लौटाए

  $element['test'] = array(
      '#type' => 'textfield',
      '#default_value' => isset($items[$delta]['test']) ? $items[$delta]['test'] : NULL,
      '#maxlength' => 100,
      '#autocomplete_path' => 'taxonomy/autocomplete/37',
   );

मुझे पूरा यकीन नहीं है कि ईमानदार क्यों होना है।


मैंने भी इसी तरह की कोशिश की और नीचे दिए गए अपवाद को t tid as AS tid, t.name AS name from {taxonomy_term_data} t WHERE (t.vid IN ()) और t.name LIKE: d__condition_placeholder_0 ESCAPE & # 039; \\ & #; 039;) लिमिट 10 ऑफसेट 0; Array ([: db_condition_placeholder_0] = & gt;% कल्पना%) और mysql निकट अपवाद दे रहा है & # 039; \\ & # 039;) LIMIT OFFSET 0 & # 039;
श्रीहित नर्रा

0

Drtecal 7 के लिए @tecjam, आपके पास लगभग था। आपको बस इतना करना है कि आप वॉटैब आईडी की जगह फील्ड नाम का इस्तेमाल करें।

ऐशे ही:

 $element['test'] = array(
 '#type' => 'textfield',
  '#default_value' => isset($items[$delta]['test']) ? $items[$delta]['test'] : NULL,
  '#maxlength' => 100,
  '#autocomplete_path' => 'taxonomy/autocomplete/field_name',
);

अपने क्षेत्र के नाम के साथ field_name बदलें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.