आप नोड / संपादन पृष्ठों पर wysiwyg एपीआई प्लगइन के लिए आवश्यक अतिरिक्त जावास्क्रिप्ट फ़ाइलों को कैसे लोड करते हैं?


9

मैं Drupal 7 के लिए WYSIWYG API मॉड्यूल का उपयोग करके एक प्लगइन बना रहा हूं जो समर्थित संपादकों के टूलबार में एक बटन जोड़ देगा।

मैं hook_wysiwyg_plugin()संपादक टूलबार पर एक नया बटन बनाने के लिए हुक का उपयोग कर रहा हूं, लेकिन मुझे कुछ अन्य जावास्क्रिप्ट फ़ाइलों को लोड करने की आवश्यकता है। hook_wysiwyg_plugin()हुक आप एक जे एस और सीएसएस फ़ाइल निर्दिष्ट करने के लिए अनुमति देने के लिए लगता है।

मैं प्लगइन जावास्क्रिप्ट के लिए आवश्यक अतिरिक्त जावास्क्रिप्ट फ़ाइलों को कैसे लोड कर सकता हूं?

मैं hook_library()एक पुस्तकालय यानी js / css फ़ाइलों को परिभाषित करने के लिए कार्यान्वित किया गया हूं, लेकिन अनिश्चित हूं कि कैसे मैं इसे wysiwyg एपीआई तक हुक करता हूं ताकि वे नोड पर लोड करें / स्क्रीन संपादित करें?


अपने अनुरोध को यहाँ पर भी आवाज दें drupal.org/node/1039076
giorgio79

जवाबों:


1

यह वास्तव में काफी सरल है, हालांकि एक ही काम करने का मेरा अनुभव Drupal 6 के माध्यम से है, इसलिए मेरे कोड के साथ कुछ मामूली अंतर हो सकते हैं:

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  // Only modify node_form's.
  // @TODO - Set a condition for all forms you wish to alter for D7 entities.
  if (isset($form['type']['#value']) && $form_id == "{$form['type']['#value']}_node_form") {
    // We use after build to add JS and CSS to prevent issues caused by form caching.
    $form['#after_build'][] = 'MYMODULE_form_alter_after_build';
  }
}

function MYMODULE_form_alter_after_build($form_element, &$form_state) {
  drupal_add_js(...);
}

फिर, यह कोड D6 के लिए है, लेकिन मूल सिद्धांत अभी भी काम करना चाहिए।

हालांकि यह सीधे Wysiwyg API से बंधा हुआ नहीं है, यह संभवतः सबसे अच्छा विकल्प है क्योंकि Wysiwyg API केवल JS फाइल प्रति प्लगइन (iirc) पर ही सपोर्ट करता है।

आपके लिए कुछ जंगली / अनछुए विकल्प:

  • प्लगइन में परिभाषित जावास्क्रिप्ट फ़ाइल के लिए एक मेनू कॉलबैक बनाएं और कुछ जावास्क्रिप्ट जावास्क्रिप्ट फ़ाइल को कई जावास्क्रिप्ट फ़ाइलों के स्रोतों से युक्त करें। (Wysiwyg फील्ड्स गतिशील रूप से उत्पन्न प्लग इन के लिए मेनू कॉलबैक करता है, लेकिन केवल एक जावास्क्रिप्ट फ़ाइल के लिए, विचारों के लिए स्रोत देखें)।

  • एक जावास्क्रिप्ट डायनामिक जावास्क्रिप्ट लोडिंग तकनीक का उपयोग http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml के समान करें

उम्मीद है की यह मदद करेगा।


मैंने अभी तक इसकी कोशिश नहीं की है, लेकिन लगता है कि यह काम करेगा। धन्यवाद।
19oft पर कैंपस

2

Drupal_add_js के साथ :

function yourmodule_preprocess_page(&$vars)
{
  $node = $vars['node']; 
  if($node->type == 'yournodetype' AND arg(2) == 'edit')
  {
    drupal_add_js([...]);
  }
}

मुझे वास्तव में इसे WYSIWYG API मॉड्यूल के साथ बांधने की आवश्यकता है ताकि अतिरिक्त फ़ाइलों को केवल तब लोड किया जाए जब वह मॉड्यूल WYSIWG क्षेत्र बनाता है। इसके अलावा मुझे hook_library () द्वारा परिभाषित लाइब्रेरी लोड करने की आवश्यकता है।
कैंसॉफ्ट

1

सिद्धांत रूप में, आपको केवल पाठ प्रारूप से जुड़े wysiwyg संपादक के लिए FAPI तत्व पर सही " #text_format " पैरामीटर का उपयोग करना होगा #type textareaजो स्वचालित रूप से शामिल किया जाएगा, इस तरह से:

function mymodule_menu(){
    return array(
        'mypage' => array(
            'title' => 'A page to test wysiwyg',
            'page callback' => 'drupal_get_form',
            'page arguments' => array('mymodule_page'),
            'access arguments' => array('access content'), 
        )
    );
}

function mymodule_page($form, &$form_state) {
    $element = array(
        '#type' => 'textarea', 
        '#title' => t('Comment'), 
        '#default_value' => 'something',
        '#text_format' => 'full_html',
        '#required' => TRUE,
    );
    $form['mytext'] = $element;
    return $form;
}

हालाँकि, यह तब तक सम्मिलित नहीं होता है जब तक कि यह "नोड एडिट" पृष्ठ न हो, इसलिए फ़ंक्शंस से संबंधित कुछ " filter_process_format" या " wysiwyg_pre_render_text_format" इसे बाध्य करने में सक्षम हो सकता है, लेकिन मुझे अभी तक जादू संयोजन नहीं मिला है, फिर भी इसका स्रोत पढ़ रहा है लापता टुकड़ा खोजने के लिए Wysiwyg मॉड्यूल।

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