İçerik türü başına varsayılan giriş metni biçimini nasıl ayarlarsınız?


10

İçerik türü ve içerik alanı için farklı bir varsayılan giriş metni biçimi ayarlamak istiyorum.

Örneğin, biçim türü seçenekleri " Düz metin " ve " Zengin metin düzenleyicisi " olabilir ve bazı durumlarda biçimin varsayılan olarak " Zengin metin düzenleyicisi " olarak ayarlanmasını istiyorum, ancak " Düz metin " i açılır menüde bir seçenek olarak tutuyorum. " Zengin metin editörü " ilk tercihi yapmak için metin biçimlerinin sırasını değiştirebileceğimi biliyorum , ancak bu yöntem hepsini değiştirdi, yapmak istediğim şey bu değil.

Yanıtlar:


10

Daha İyi Biçimler modülünün kararlı bir sürümü olmadığında, bunu belirli içerik türleri veya alanları için özel bir modül oluşturabilirsiniz.

Bir modül oluşturun ('modulename' klasörü içinde modulename.info ve modulename.module). Örnek: 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;
}

Ve 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"

Bu dosyaları sites / all / modules / custom içindeki 'default_text_format' klasörüne koyun.

Paket adını içerik türünüze uygun şekilde değiştirin. Ve 'body' yerine kendi 'field_contenttype_fieldname' adınızı yazabilirsiniz. ( Bu yorumdan sonra / better_formats kodu.)


1
Bunu denedim ve çalışmak için değiştirdim, bu yüzden benim için çalıştı. `foreach ($ type ['text_format'] ['# process'] olarak $ key => $ callback) {if ($ key == 'filter_process_format') {$ type ['text_format'] ['# process'] [ ] = 'MODULE_NAME_default_text_formats_filter_process_format'; } `
awm

@ Awm'nin çözümünü onaylayabilirim. Orijinal yanıt benim için de çalışmaz, çünkü varsayılan geri aramayı geçersiz kılar. awm çözümü, geri arama eklemek yerine geçersiz kılmak yerine bunu düzeltir.
timofey.com

Güncelleme - Son yorumumu geri alıyorum. Orijinal cevap işe yarıyor ve tercih ediliyor. Benim için işe yaramadı çünkü geri çağrımı geçersiz kılan Daha İyi Biçimler modülüne sahiptim. İdeal olarak, bu işlevi eklemeden önce devre dışı bırakmak istersiniz. Şimdi - diziye ikinci bir geri arama eklediğinizde (yukarıdaki yorumda belirtildiği gibi), ilk 1 numaralı geri arama işlenecek ve böylece geri aramanıza çarpmadan önce verileri değiştirecektir.
timofey.com

3

Daha İyi Biçimler modülünü kullanın :

Daha iyi formatlar, Drupal'ın ana giriş formatı sistemine daha fazla esneklik katan bir modüldür. Her içerik türü için varsayılan biçimi ve çok daha fazlasını ayarlamanıza olanak tanır.


Teşekkürler, umut verici görünüyor ama bir üretim web sitesinde D7 kullanıyorum, bu yüzden şu anda bu modülü kullanmayacağım çünkü hala geliştirme aşamasında.
J-Fiz

3

Bu soruna kendim girdim, ancak bir beta modülü (Daha İyi Biçimler) kullanmak istemedim ve bu tür ayarların sabit kodlanmaması, ancak arka ofisten ayarlanması için işlevselliği genişletmek ve otomatikleştirmek zorunda kaldım. .

Bu yüzden aşağıdakileri yaptım:

  • Alanın Ayarları Düzenle formuna varsayılan metin biçimine ihtiyacım olan bir ayar ekledim
  • Yukarıda sağlanan kodu kullandım ve alan ayarlarına kaydedilen varsayılan metin biçimini ayarlar böylece biraz değiştirdi
  • İçerik türünü dışa aktarmak için Özellikler'i kullandım, böylece ayarlarım kodda korunsun

Alan Düzenleme Ayarları bölümü

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

Bu nedenle, kodun bu kısmı yeterince açık olmalıdır ... bir alan kümesi ekler ve sitenize mevcut olan WYSIWYG profilleri tarafından doldurulmuş bir seçim listesi ekler. Bu WYSIWYG profilleri metin formatlarına bağlıdır, bu nedenle birisi bir metin formatını / filtresini seçtiğinde, aslında yapılandırılan profili seçer.

Şimdi 2. bölüm, yukarıda başka bir kullanıcı tarafından sağlanan kodla aynıdır ve daha iyi Biçimler modülünden alınır.

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

Böylece ayarlar kaydedilir, bu nedenle Özellikler Dışa Aktarma mümkündür veya ayarlarınızı kaydetmek için hangi yöntemi kullanırsanız kullanın.

Umarım bu sorunla karşılaşan herkese yardımcı olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.