आप सामग्री प्रकार प्रति डिफ़ॉल्ट इनपुट पाठ प्रारूप कैसे सेट करते हैं?


10

मैं प्रति सामग्री प्रकार और प्रति सामग्री क्षेत्र में एक अलग डिफ़ॉल्ट इनपुट पाठ प्रारूप सेट करने में सक्षम होना चाहता हूं।

उदाहरण के लिए, प्रारूप प्रकार के विकल्प " सादा पाठ " और " समृद्ध पाठ संपादक " हो सकते हैं और कुछ मामलों में मैं चाहता हूं कि प्रारूप " रिच पाठ संपादक " के लिए डिफ़ॉल्ट हो लेकिन ड्रॉपडाउन में " सादा पाठ " को विकल्प के रूप में रखें। मुझे पता है कि मैं " रिच टेक्स्ट एडिटर " को पहली पसंद बनाने के लिए टेक्स्ट फॉर्मेट के क्रम को बदल सकता हूं , लेकिन यह तरीका उन सभी को बदल देता है, यही वह नहीं है जो मैं करना चाहता हूं।

जवाबों:


10

बेहतर प्रारूप मॉड्यूल के एक स्थिर रिलीज की अनुपस्थिति में , आप विशिष्ट सामग्री प्रकार या फ़ील्ड के लिए ऐसा करने के लिए एक कस्टम मॉड्यूल बना सकते हैं।

एक मॉड्यूल (modulename.info और modulename.module, एक फ़ोल्डर 'modulename' के अंदर) बनाएँ। उदाहरण: default_text_format.module:

<?php
/**
* Implements hook_element_info_alter().
*
* Sets the text format processor to a custom callback function.
* This code is taken from the Better Formats module.
*/
function default_text_format_element_info_alter(&$type) {
  if (isset($type['text_format']['#process'])) {
    foreach ($type['text_format']['#process'] as &$callback) {
      if ($callback === 'filter_process_format') {
        $callback = 'default_text_format_filter_process_format';
      }
    }
  }
}

/**
* Callback for MODULENAME_element_info_alter().
*/
function default_text_format_filter_process_format($element) {
  $element = filter_process_format($element);
  // Change input format to "Filtered HTML" for body fields of article nodes
  if ($element['#bundle'] == 'article' && $element['#field_name'] == 'body') {
    $element['format']['format']['#default_value'] = 'filtered_html';
  }
  return $element;
}

और default_text_format.info:

name = Default text format
description = Adapt the module code to set a default format for a content type.
package = Custom modules
core = "7.x"

इन फ़ाइलों को साइटों / सभी / मॉड्यूल / कस्टम में 'default_text_format' फ़ोल्डर में रखें।

अपने सामग्री प्रकार के लिए उपयुक्त बंडल नाम बदलें। और आप 'बॉडी' को अपने स्वयं के 'field_contenttype_fieldname' के साथ स्थानापन्न कर सकते हैं। ( इस टिप्पणी के बाद / better_formats कोड।)


1
मैंने यह कोशिश की और इसे काम करने के लिए बदल दिया ताकि यह मेरे लिए काम करे। `foreach ($ प्रकार ['text_format'] ['# प्रक्रिया'] $ कुंजी के रूप में => $ कॉलबैक) {if ($ कुंजी == 'filter_process_format') {$ प्रकार ['text_format'] ['# # प्रक्रिया'] [] ] = 'MODULE_NAME_default_text_formats_filter_process_format'; } `
AWM

मैं @ awm के समाधान की पुष्टि कर सकता हूं। मूल उत्तर मेरे लिए भी काम नहीं करता है, क्योंकि यह डिफ़ॉल्ट कॉलबैक को ओवरराइड करता है। awm का समाधान कॉलबैक जोड़कर, ओवरराइड करने के बजाय ठीक करता है।
timofey.com

अपडेट - मैं अपनी पिछली टिप्पणी वापस लेता हूं। मूल उत्तर काम करता है और पसंद किया जाता है। यह मेरे लिए काम नहीं करता था क्योंकि मेरे पास बेहतर प्रारूप मॉड्यूल स्थापित था, जिसने मेरे कॉलबैक को ओवरराइड कर दिया था। आदर्श रूप से, आप इस फ़ंक्शन को जोड़ने से पहले इसे अक्षम करना चाहते हैं। अब - उस स्थिति में जहां आप सरणी में दूसरा कॉलबैक जोड़ते हैं (जैसा कि मेरे ऊपर की गई टिप्पणी बताती है), कॉलबैक # 1 को पहले संसाधित किया जाएगा, इस प्रकार आपके कॉलबैक को हिट करने से पहले डेटा को बदल दिया जाएगा।
timofey.com

3

बेहतर प्रारूप मॉड्यूल का उपयोग करें :

Drupal के कोर इनपुट फॉर्मेट सिस्टम में अधिक लचीलापन जोड़ने के लिए बेहतर प्रारूप एक मॉड्यूल है। यह आपको सामग्री प्रकार प्रति डिफ़ॉल्ट प्रारूप और बहुत कुछ सेट करने की अनुमति देगा।


धन्यवाद, आशाजनक लग रहा है, लेकिन मैं एक उत्पादन वेबसाइट पर डी 7 का उपयोग कर रहा हूं, इसलिए मैं इस समय इस मॉड्यूल का उपयोग करने वाला नहीं हूं क्योंकि यह अभी भी विकास में है।
जे-फिज

3

मैं सिर्फ इस समस्या से टकराया था, लेकिन मैं बीटा मॉड्यूल (बेहतर प्रारूप) का उपयोग नहीं करना चाहता था, और मुझे कार्यक्षमता को बढ़ाना और इसे स्वचालित करना था, ताकि ऐसी सेटिंग्स हार्डकोड न हों, लेकिन बैक-ऑफ़िस से सेट करें ।

तो मैंने निम्नलिखित कार्य किया:

  • मैंने उस क्षेत्र के संपादन सेटिंग फ़ॉर्म पर एक सेटिंग जोड़ी, जिसके लिए मुझे डिफ़ॉल्ट पाठ प्रारूप की आवश्यकता है
  • मैंने उपर्युक्त प्रदान किए गए कोड का उपयोग किया और इसे थोड़ा संशोधित किया ताकि यह फ़ील्ड की सेटिंग में सहेजे गए डिफ़ॉल्ट पाठ प्रारूप को सेट कर सके
  • मैंने कंटेंट टाइप को एक्सपोर्ट करने के लिए फीचर्स का इस्तेमाल किया ताकि कोड में मेरी सेटिंग संरक्षित रहे

फ़ील्ड संपादित करें सेटिंग्स हिस्सा

/**
 * Implements hook_form_FIELD_UI_FIELD_EDIT_FORM_alter().
 */
function MY_MODULE_form_field_ui_field_edit_form_alter(&$form, &$form_state) {
  if ($form['#field']['type'] == 'text_long') {
    $instance = $form['#instance'];
    // Fieldset for Default Formats settings.
    $filters = filter_formats();
    $options = array('_none' => t('None'));
    foreach ($filters as $key => $filter) {
      $options[$key] = $filter->name;
    }
    $form['instance']['settings']['default_filter'] = array(
      '#type' => 'fieldset',
      '#title' => t('Default Filter Settings'),
      '#collapsible' => FALSE,
      '#collapsed' => FALSE,
    );
    $form['instance']['settings']['default_filter']['wysiwyg_profile'] = array(
      '#type' => 'select',
      '#title' => t('Select a default format for this field'),
      '#description' => t('The selected text format will influence the button and plugin configuration of WYSIWYG.'),
      '#default_value' => isset($instance['settings']['default_filter']['wysiwyg_profile'])
          ? $instance['settings']['default_filter']['wysiwyg_profile'] : '_none',
      '#options' => $options,
    );
  }
}

इसलिए कोड का यह हिस्सा पर्याप्त रूप से स्पष्ट होना चाहिए ... यह एक फ़ील्ड जोड़ता है और इसमें एक चयन सूची जोड़ता है, जो आपकी साइट पर मौजूद WYSIWYG प्रोफाइल द्वारा पॉपुलेटेड है। उन WYSIWYG प्रोफाइल को टेक्स्ट फॉर्मेट से बांधा जाता है, इसलिए जब कोई टेक्स्ट फॉर्मेट / फिल्टर का चयन करता है, तो यह वास्तव में उस प्रोफाइल का चयन करता है, जो कॉन्फ़िगर किया गया है।

अब दूसरा भाग समान कोड है जो किसी अन्य उपयोगकर्ता द्वारा ऊपर प्रदान किया गया है, और जो कि बेहतर प्रारूप मॉड्यूल से लिया गया है।

/**
 * Implements hook_element_info_alter().
 *
 * Sets the text format processor to a custom callback function.
 * This code is taken from the Better Formats module.
 */
function MY_MODULE_element_info_alter(&$type) {
  if (isset($type['text_format']['#process'])) {
    foreach ($type['text_format']['#process'] as &$callback) {
      if ($callback === 'filter_process_format') {
        $callback = 'MY_MODULE_filter_process_format';
      }
    }
  }
}

/**
 * Callback for MY_MODULE_element_info_alter().
 *
 * Alters the default text format of fields.
 */
function MY_MODULE_filter_process_format($element) {
  $element = filter_process_format($element);
  // Configuration array that specifies the fields that need to be altered.
  $field_info = field_info_instance($element['#entity_type'],
                                    $element['#field_name'], 
                                    $element['#bundle']);
  // Change input format to configured value.
  if (isset($field_info['settings']['default_filter']['wysiwyg_profile']) && $field_info['settings']['default_filter']['wysiwyg_profile'] != '_none') {
    $element['format']['format']['#default_value'] = $field_info['settings']['default_filter']['wysiwyg_profile'];
  }
  return $element;
}

इसलिए सेटिंग्स सहेज ली जाती हैं, इसलिए सुविधाएँ निर्यात संभव है या अपनी सेटिंग्स को बचाने के लिए आप जो भी विधि का उपयोग करते हैं।

मुझे आशा है कि यह किसी और की मदद करता है जिसने इस समस्या का सामना किया!

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