it-swarm.asia

كيف تقوم بتعيين تنسيق نص إدخال افتراضي لكل نوع محتوى؟

أريد أن أتمكن من تعيين تنسيق نص إدخال افتراضي مختلف لكل نوع محتوى ولكل حقل محتوى.

على سبيل المثال ، قد تكون خيارات نوع التنسيق هي "نص عادي" و "محرر نص منسق" وفي بعض الحالات ، أريد أن يكون التنسيق افتراضيًا على "منسق محرر نص "ولكن احتفظ" نص عادي "كخيار في القائمة المنسدلة. أعلم أنه يمكنني تغيير ترتيب تنسيقات النص لجعل "محرر نص منسق" الخيار الأول ، ولكن هذا الأسلوب يغيرها جميعًا ، وهذا ليس ما أريد القيام به.

10
J-Fiz

في حالة عدم وجود إصدار ثابت من Better Formats الوحدة النمطية ، يمكنك إنشاء وحدة مخصصة للقيام بذلك لأنواع أو حقول محتوى معينة.

إنشاء وحدة (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" في المواقع/جميع/الوحدات/مخصص.

قم بتغيير اسم الحزمة بما يتناسب مع نوع المحتوى الخاص بك. ويمكنك استبدال "body" بـ "field_contenttype_fieldname" الخاص بك. (بعد هذا التعليق /كود أفضل_تنسيق).

10
arjan

لقد اصطدمت بهذه المشكلة بنفسي ، لكنني لم أرغب في استخدام وحدة تجريبية (تنسيقات أفضل) ، واضطررت إلى توسيع الوظائف وأتمتتها تلقائيًا ، بحيث لا تكون هذه الإعدادات مشفرة ، ولكن يتم ضبطها من المكتب الخلفي .

لذلك فعلت ما يلي:

  • أضفت إعدادًا في نموذج تحرير الإعدادات للحقل الذي أحتاج إليه تنسيق النص الافتراضي
  • لقد استخدمت الرمز المقدم أعلاه وقمت بتعديله قليلاً حتى يتم تعيين تنسيق النص الافتراضي كما تم حفظه في إعدادات الحقل
  • استخدمت الميزات لتصدير نوع المحتوى حتى يتم الاحتفاظ بإعداداتي في التعليمات البرمجية

جزء إعدادات تعديل الحقل

/**
 * 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 بتنسيقات النص ، لذلك عندما يختار شخص ما تنسيق/مرشح نص ، فإنه في الواقع يختار ملف التعريف الذي تم تكوينه.

الآن الجزء الثاني هو نفس الرمز كما هو موضح أعلاه من قبل مستخدم آخر ، والذي تم أخذه من وحدة Better Formats.

/**
 * 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;
}

لذلك يتم حفظ الإعدادات ، وبالتالي يمكن تصدير الميزات أو أي طريقة تستخدمها لحفظ إعداداتك.

آمل أن يساعد هذا أي شخص آخر واجه هذه المشكلة!

3
benelori

استخدم تنسيقات أفضل الوحدة النمطية:

التنسيقات الأفضل هي وحدة لإضافة المزيد من المرونة إلى نظام تنسيق الإدخال الأساسي لدروبال. سيسمح لك بتعيين التنسيق الافتراضي لكل نوع محتوى وأكثر من ذلك بكثير.

3
user842