আপনি কীভাবে প্রতি সামগ্রীর ধরণের জন্য ডিফল্ট ইনপুট পাঠ্য বিন্যাস সেট করবেন?


10

আমি সামগ্রীর ধরণ এবং প্রতি সামগ্রী ক্ষেত্রের জন্য আলাদা ডিফল্ট ইনপুট পাঠ্য বিন্যাসটি সেট করতে সক্ষম হতে চাই।

উদাহরণস্বরূপ, ফর্ম্যাট ধরণের পছন্দগুলি " সাধারণ পাঠ্য " এবং " সমৃদ্ধ পাঠ্য সম্পাদক " হতে পারে এবং কিছু ক্ষেত্রে আমি ফর্ম্যাটটিকে " ধনী পাঠ্য সম্পাদক " হিসাবে ডিফল্ট করতে চাইলেও ড্রপডাউনটিতে একটি পছন্দ হিসাবে " সাধারণ পাঠ্য " রাখি । আমি জানি যে আমি " ধনী পাঠ্য সম্পাদক "টিকে প্রথম পছন্দ হিসাবে তৈরি করতে টেক্সট ফর্ম্যাটগুলির ক্রম পরিবর্তন করতে পারি , তবে এই পদ্ধতিটি তাদের সবগুলিকে পরিবর্তন করে, এটি আমি করতে চাই না।

উত্তর:


10

উন্নততর ফর্ম্যাট মডিউলটির স্থিতিশীল প্রকাশের অভাবে আপনি নির্দিষ্ট সামগ্রীর ধরণ বা ক্ষেত্রগুলির জন্য এটি করতে একটি কাস্টম মডিউল তৈরি করতে পারেন।

একটি মডিউল তৈরি করুন (মডিউলনেম.ইনফো এবং মডিউলনাম.মডিউল, একটি ফোল্ডারের 'মডিউলনেম' এর ভিতরে)। উদাহরণ: 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"

সাইটগুলি / সমস্ত / মডিউল / কাস্টমগুলিতে এই ফাইলগুলিকে একটি 'ফোল্ডার_ডেক্সট_ফর্ম্যাট' রাখুন।

আপনার সামগ্রী ধরণের জন্য উপযুক্ত হিসাবে বান্ডিল নাম পরিবর্তন করুন। এবং আপনি নিজের 'ফিল্ড_ কনটেন্টটাইপ_ফিল্ডনেম' দিয়ে 'বডি' প্রতিস্থাপন করতে পারেন। ( এই মন্তব্যের পরে / আরও ভাল_ফর্ম্যাট কোড।)


1
আমি এটি চেষ্টা করেছিলাম এবং এটি কাজ করতে পরিবর্তিত করেছি যাতে এটি আমার পক্ষে কাজ করে। `foreach ($ প্রকার ['পাঠ্য_আরূপ']] ['# প্রক্রিয়া'] হিসাবে $ কী => $ কলব্যাক) {যদি ($ কী == 'ফিল্টার_প্রসেস_ফর্ম্যাট)) $ [টাইপ [' পাঠ্য_ফর্ম্যাট '] [' # প্রক্রিয়া '] [ ] = 'MODULE_NAME_default_text_formats_filter_process_format'; } `
এএমএম

আমি @ awm এর সমাধানটি নিশ্চিত করতে পারি। মূল উত্তরটি আমার পক্ষেও কাজ করে না, কারণ এটি ডিফল্ট কলব্যাককে ওভাররাইড করে। ওএমএর এর সমাধানটি ওভাররাইডের পরিবর্তে কলব্যাক যোগ করে স্থির করে।
টিমোফিয়ে ডট কম

আপডেট - আমি আমার শেষ মন্তব্যটি ফিরে নিই। মূল উত্তরটি কাজ করে এবং পছন্দসই হয়। এটি আমার পক্ষে কার্যকর হয়নি কারণ আমার আরও ভাল ফর্ম্যাট মডিউল ইনস্টল ছিল যা আমার কলব্যাকটিকে ওভাররাইড করেছে। আদর্শভাবে, আপনি এই ফাংশনটি যুক্ত করার আগে এটি অক্ষম করতে চান। এখন - আপনি অ্যারেতে দ্বিতীয় কলব্যাক যুক্ত করার ক্ষেত্রে (আমার উপরের মন্তব্যটি যেমন পরামর্শ দেয়), কলব্যাক # 1 প্রথমে প্রক্রিয়া করা হবে, এটি আপনার কলব্যাককে হিট করার আগে ডেটা পরিবর্তন করে।
টিমোফের.কম

3

আরও ভাল ফর্ম্যাট মডিউলটি ব্যবহার করুন :

ড্রুপালের কোর ইনপুট ফর্ম্যাট সিস্টেমে আরও নমনীয়তা যুক্ত করার জন্য আরও ভাল ফর্ম্যাটগুলি একটি মডিউল। এটি আপনাকে সামগ্রীর ধরণ এবং আরও অনেক কিছুর জন্য ডিফল্ট ফর্ম্যাট সেট করতে দেয়।


ধন্যবাদ, আশাব্যঞ্জক দেখাচ্ছে তবে আমি প্রোডাকশন ওয়েবসাইটে ডি 7 ব্যবহার করছি তাই আমি এই মুহুর্তে এই মডিউলটি ব্যবহার করব না কারণ এটি এখনও বিকাশে রয়েছে।
জে-ফিজ

3

আমি নিজেই এই সমস্যায় পড়লাম, তবে আমি একটি বিটা মডিউল (বেটার ফর্ম্যাটস) ব্যবহার করতে চাইনি, এবং আমাকে কার্যকারিতাটি প্রসারিত করতে এবং এটি স্বয়ংক্রিয় করতে হয়েছিল, যাতে এই ধরনের সেটিংস হার্ডকোডযুক্ত না হয়, তবে ব্যাক-অফিস থেকে সেট করা হয় ।

সুতরাং আমি নিম্নলিখিতটি করেছেন:

  • আমি ক্ষেত্রের সম্পাদনা সেটিংস ফর্মটিতে একটি সেটিং যুক্ত করেছি যার জন্য আমার ডিফল্ট পাঠ্য বিন্যাসটি প্রয়োজন
  • আমি উপরের প্রদত্ত কোডটি ব্যবহার করেছি এবং এটিকে কিছুটা সংশোধন করেছি যাতে এটি ক্ষেত্রের সেটিংসে সংরক্ষিত হিসাবে ডিফল্ট পাঠ্য বিন্যাসটি সেট করে gets
  • আমি সামগ্রীর ধরণের রফতানি করতে বৈশিষ্ট্যগুলি ব্যবহার করেছি যাতে আমার সেটিংস কোডে সংরক্ষিত থাকে

ক্ষেত্র সম্পাদনা সেটিংস অংশ

/**
 * 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 প্রোফাইল দ্বারা জনবহুল। এই ডাব্লুওয়াইএসআইওয়াইওয়াইজি প্রোফাইলগুলি পাঠ্য ফর্ম্যাটগুলিতে আবদ্ধ থাকে, সুতরাং যখন কেউ কোনও পাঠ্য বিন্যাস / ফিল্টার নির্বাচন করে, এটি আসলে কনফিগার করা প্রোফাইলটি নির্বাচন করে।

এখন ২ য় অংশটি অন্য ব্যবহারকারীর দ্বারা উপরে সরবরাহ করা একই কোড এবং এটি আরও ভাল ফর্ম্যাট মডিউল থেকে নেওয়া হয়েছে।

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

সুতরাং সেটিংস সংরক্ষণ করা হয়েছে, তাই বৈশিষ্ট্য রফতানি সম্ভব বা আপনার সেটিংস সংরক্ষণ করতে আপনি যে কোনও পদ্ধতি ব্যবহার করেন।

আমি আশা করি যে এই সমস্যার মুখোমুখি অন্য কারও পক্ষে এটি সহায়তা করে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.