입력 영역 옵션을 숨기고 텍스트 영역 아래에서 텍스트를 숨기는 방법?


32

노드를 추가 할 때 입력 형식 옵션을 숨기고 텍스트 영역 아래에 텍스트를 표시하는 방법?

스크린 샷-빨간색 사각형으로 선택한 부분 숨기기


나는 당신이 그것을 통해 양식에 액세스하면 hook_form_alter세부 사항에 대해 잘 모르겠으므로 그것을 할 수 있다고 생각합니다 . 그래서 나는 이것을 답으로 게시하지 않을 것입니다 ...
— acm

답변:


26

Drupal 7의 경우 Simplify 모듈을 사용할 수 있습니다 . 텍스트 형식 옵션 텍스트 영역과 노드 양식의 다른 요소를 숨길 수 있습니다.


3
소스 ( cgit.drupalcode.org/simplify/tree/simplify.module?id=7681b0e )를 보면 모듈은 jQuery를 사용하여 텍스트 형식 옵션을 숨 깁니다. 1 : 텍스트 형식 만 숨기고 전체 모듈이 필요하지 않으며 2 : 자바 스크립트가 요구 사항이되기 때문에 부끄러운 일입니다. Ionut Adrian Luchian의 답변과 같이 CSS로 숨기지 않는 이유는 무엇입니까? 명확하고 적절합니다.
— B2F

단순화는 저에게 일관되게 작동하지 않았습니다. 어떤 경우에는 그렇지 않은 경우도있었습니다.
— snowguy

나를 위해 작동하지 않았다. 부트 스트랩 테마를 사용했기 때문에 그 때문일 수 있습니다.
— sobi3ch

단순화도 저에게 효과가 없었습니다.
— Артем Ильин

25

이를 위해 사용자 정의 모듈에서 hook_form_alter를 사용할 수 있습니다.

예를 들어, drupal 7에서 :

// hook_form_alter function
function CUSTOM_MODULE_form_alter(&$form, &$form_state, $form_id) {
    // We want this on a specific node type
    if ($form_id == 'NODE_TYPE_node_form') {
        $form['#after_build'][] = 'CUSTOM_MODULE_NODE_TYPE_node_form_after_build';
    }
}

// afterbuild function
function CUSTOM_MODULE_NODE_TYPE_node_form_after_build($form) {
    // We want this on a specific field
    $form['YOUR_FIELD']['und']['0']['format']['#access'] = FALSE;
    return $form;
}

2
이것은 작동하지만 부작용이 있습니다. 텍스트 영역에서 wysiwyg 편집기를 제거합니다
— Castaway

그것은 나를 위해 속임수를했다. 나는 주로 텍스트 입력을 정리하고 싶었습니다.
— RevNoah

1
'und'대신 LANGUAGE_NONE을 언급하는 것이 좋으며 after_build 함수는 다른 우수한 역할이 텍스트 형식 상자를 볼 수있는 경우 역할 기반 검사를 가져야합니다.
— Aneek Mukhopadhyay

12

drupal 6에는 더 나은 형식 모듈이 있으며 원하는대로 정확하게 수행하고 7 dev 버전이 있지만 개발 중이라는 경고와 함께 제공됩니다. 귀하의 사이트가 아직 개발중인 경우 사이트를 제공하는 것이 좋습니다.


관리자 그룹에 대한 권한을 제거하더라도 관리자가 아닌 사용자에게는 잘 작동하는 것으로 보입니다. 사용자 1에게는 여전히 D7
— joelpittet

더 나은 형식은 D7에서 잘 작동하며 2016 년 1 월에 심각한 문제가없고 베타 2 릴리스로 안정적입니다.
— Duncanmoo

9

실제로 서식 양식 항목을 죽일 수 있습니다.

function MY_THEME_form_comment_form_alter(&$form, &$form_state, &$form_id) {
  $form['comment_body']['#after_build'][] = 'MY_THEME_configure_comment_form';
}

function MY_THEME_configure_comment_form(&$form) {
  unset($form[LANGUAGE_NONE][0]['format']);
  return $form;
}

최고의 솔루션 +1 향후 방문자를 위해 CUSTOM을 활성 테마 이름으로 바꾸십시오. 이 코드 스 니펫은 활성 테마 폴더의 template.php 스크립트에 있어야합니다. 사이트에서 다국어를 사용하도록 설정 한 경우 LANGUAGE_NONE을 언어 코드로 바꾸십시오.
— Janaka R Rajapaksha

2
CUSTOM사용자 정의 테마 이름으로 사용됩니다. 당신이해야 결코 활성 언어 사용을 필요로하는 경우, 언어 하드 코드 global $language;를 잡아.
— doublejosh

참고 : LANGUAGE_NONE값이있는 상수입니다 und... 사용하지 마십시오 und.
— doublejosh

이것은 wysiwyg도 죽입니다
— digitgopher

7

가장 좋은 해결책은 텍스트 형식 선택 요소에 대한 액세스를 허용하지 않는 것입니다. 설정을 완전히 해제하면 사라지는 WYSIWYG 편집기로 원하지 않는 부작용이 발생합니다. 그래서 다음 코드를 제안합니다.

function MY_MODULE_form_comment_form_alter(&$form, &$form_state, &$form_id) {
  $form['comment_body']['#after_build'][] = 'MY_MODULE_hide_text_format';
}


function MY_MODULE_hide_text_format(&$form) {
  $form[LANGUAGE_NONE][0]['format']['#access'] = false;
  return $form;
}

하나의 특정 필드에서만 숨기려는 경우 탁월한 솔루션입니다. 그리고 WYSIWYG는 기능을 유지합니다.
— Dalin

6

가장 쉬운 방법 인 CSS를 사용하십시오. 방화범

#body-add-more-wrapper #edit-body-und-0-format {display: none;}

CSS와 Firebug의 힘

행운을 빕니다.


3
CSS 작동은 "작동하지만"권장하지 않습니다.
— saadlulu

답이 아닌 도주
— Pan Chrono

5
왜 ? 질문은 그것을 제거하는 것이 아니라 숨기려는 것이므로 훌륭한 대답입니다. 숨기고 보안 위협을 유발하거나 SEO에 나쁜 것은 아닙니다. 이미 텍스트 형식 구성에서 권한을 정의했기 때문에 문제가 어디에 있습니까?
— B2F

1
나는 그것을 숨길 것을 선호합니다. +1 투표
— Alyssa Gono

CSS 인젝터 모듈은 놀라운 일을합니다. 참조 : prntscr.com/cieuvs
— Patoshi Pa ト シ

5

드루팔 7

function MODULENAME_element_info_alter(&$type) {
  if (isset($type['text_format']['#process'])) {
    foreach ($type['text_format']['#process'] as &$callback) {

      if ($callback === 'filter_process_format') {
        $callback = 'MODULENAME_filter_process_format';
      }
    }
  }
}


function MODULENAME_filter_process_format($element) {
  $element = filter_process_format($element);

  // Change input format to "Filtered HTML" for body fields of NODETYPE_NAME

  if ($element['#bundle'] == 'NODETYPE_NAME' && $element['#field_name'] == 'body') {

    $element['format']['format']['#default_value'] = 'filtered_html';
    $element['format']['format']['#format'] = 'filtered_html';  
    $element['format']['format']['#value']  = 'filtered_html';
    $element['#format'] = 'filtered_html';

  }
  return $element;
}

많은 / 모든 필드에서 숨기려는 경우에 유용한 기술입니다.
— Dalin

2

입력 형식 옵션을 숨기는 또 다른 간단한 방법은 옵션을 숨기려는 사용자 프로필에서 다른 모든 입력 형식을 제거하는 것입니다. 이를 위해 관리자-> 구성-> 입력 형식으로 이동하여 기본적으로 제공하려는 것을 제외한 다른 모든 입력 형식에서 모든 사용자 역할을 제거하십시오.


6
일반 텍스트 만 사용하려는 경우에만 작동합니다. 그 기능을 비활성화 할 수 없기 때문입니다.
— Fletch

정확하게. "필터링 된 텍스트"만 가질 수 없습니다. 죄송하지만이 답변은 오해의 소지가 있습니다.
— nerdoc 2019

2

나는 이걸했다:

CKeditor를 사용할 수 없도록 익명 및 권한이 부여 된 사용자에 대한 권한> ​​사용자의 "필터링 된 HTML 텍스트 형식 사용"및 "텍스트 형식 및 필터 관리"를 선택 취소하십시오.

물론 "display : none;"으로 CSS에서 비활성화 할 수 있습니다. 특정 div 클래스 (.filter-wrapper)의 경우 위를 가리키는 모든 영역을 숨기지만이 경우 영역은 수퍼 유저를 포함한 모든 사람에게 숨겨집니다.


1

CSS Injector 모듈을 설치하십시오 (현재 Drupal 8의 개발 버전 만 있습니다).

그런 다음 CSS Injector (/ admin / config / development / css-injector)의 관리 페이지로 이동하십시오. 이 코드 (또는 서식 영역 텍스트 클래스에 적용되는 코드)를 사용하여 새 CSS 규칙을 만듭니다.

.filter-guidelines {
    display: none;
}

Seven 테마 (또는 사용중인 모든 관리자 테마)에 적용하도록 선택하십시오 . 저장하고 즐기십시오!


2.0 이전 버전 인 css injector 1.x를 설치하십시오. 여기에 어떻게 보이는지 미리보기는 다음과 같습니다 prntscr.com/cieuvs -이 모듈은 CPN 같은 다른 모듈 대 CSS를 주입 (노드 당 코드)에 대한 경이로움을 작동
— Patoshiパトシ

0

"일반 텍스트"입력 형식을 제거 할 수 없습니다. "일반 텍스트"입력 형식을 사용할 때 RTE가 표시되지 않습니다.

CSS 옵션을 사용하겠습니다.


현재 로그인 한 사용자가 입력 형식 만 사용할 수있는 경우 입력 형식 선택기가 나타나지 않습니다. 그 유일한 입력 형식은 다른 형식 일 수 있으며 선택기는 동일하게 나타나지 않습니다.
— kiamlaluno


0

단순화 모듈을 사용해보십시오 .

단순화를 통해 특정 필드를 사용자 인터페이스에서 숨길 수 있습니다. 이를 통해 양식을 정리하고 컨텐츠 편집자에게보다 사용자 친화적 인 환경을 제공 할 수 있습니다.


다른 필드에서는 작동을 단순화하지만 입력 형식에서는 작동하지 않습니다.
— Druvision

0

형식을 숨기고 사용 가능한 상태로 유지하려면 " 단순화 된 형식 "모듈을 사용해보십시오 . https://www.drupal.org/project/simplified_formats

형식 선택 드롭 다운 옆에 작은 물음표 아이콘으로 형식 세부 사항이 숨겨집니다. 많은 텍스트 형식 필터의 경우 사용 방법을 알려주는 지침을 완전히 숨기는 것은 실제로 좋지 않습니다. 다른 필터는 더 자동적입니다. 최종 사용자에게 표시되는 것과 그렇지 않은 것을 선택할 수있는 모듈이 필요하다고 생각합니다.


0

형식 숨기기 모듈을 사용할 수도 있습니다 .

형식 숨기기를 사용하면 "텍스트 형식"또는 "입력 형식"드롭 다운을 축소하여 UI를 정리할 수 있습니다.


이것은 훌륭한 모듈이지만 형식 상자를 완전히 숨기지 않고 축소시킵니다.
— Druvision

0

Drupal 8의 경우 두 필드의 형식 영역이 제거됩니다.

/**
 * Implements hook_form_FORM_ID_alter().
 */
function CUSTOM_MODULE_form_FORM_ID_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  $form['#after_build'][] = 'CUSTOM_MODULE_eform_application_after_build';
}

function CUSTOM_MODULE_eform_application_after_build ($form) {
  unset($form['field_experience']['widget'][0]['format']);
  unset($form['field_miscellaneous']['widget'][0]['format']);
  return ($form);
}

OP가 질문에 D7을 지정 함
— Geoff

1
동의했다. 그러나이 시점에서 D8의 온라인은 거의 없습니다. 나는 내 자신의 질문을하고 대답 할 수 있다고 생각합니다. 절대로 시도하지 마십시오.
— Andre Angelantoni 2016 년

이 경우 OP가 버전에 대해 매우 구체적이기 때문에 더 나은 접근 방법입니다.
— Geoff

구현 방법을 알려주시겠습니까? form_id를 어떻게 찾을 수 있습니까?
— john

0

Drupal 7의 경우 다음을 수행 할 수 있습니다.

1) hook_theme_registry_alter(&$theme_registry)테마 레지스트리를 바꾸려면 모듈 내에서 사용하십시오 . 테마 프로세서 정의.

2) 그런 다음 세 가지 테마 기능을 변경, theme_filter_tips, theme_filter_tips_more_info,과 theme_filter_guidelines, 그리고 아무것도 돌려주지 않는 그들을 강제로. 다음과 같이 :

이것이 목표 기능입니다. 위의 모든 테마 기능이 해당 기능으로 리디렉션됩니다.

function _mymodule_filter_tips($tips, $long = FALSE, $extra = ''){
  return '';
}

/**
 * Implements hook_theme_registry_alter
 */
function mymodule_theme_registry_alter(&$theme_registry) {
  $theme_registry['filter_tips']['theme path'] = drupal_get_path( 'module', 'mymodule' );
  $theme_registry['filter_tips']['function'] = '_mymodule_filter_tips';
  $theme_registry['filter_guidelines']['theme path'] = drupal_get_path( 'module', 'mymodule' );
  $theme_registry['filter_guidelines']['function'] = '_mymodule_filter_tips';
  $theme_registry['filter_tips_more_info']['theme path'] = drupal_get_path( 'module', 'mymodule' );
  $theme_registry['filter_tips_more_info']['function'] = '_mymodule_filter_tips';
}

캐시를 지우면 Drupal은 선택한 모듈의 경로에서 해당 필터 정의를 찾고 (참조 drupal_get_path) 각 필터에 대해 아무것도 반환하지 않습니다. 따라서 더 이상 텍스트 형식 설명이 없습니다.


0
/ hook_form_alter function
function CUSTOM_MODULE_form_alter(&$form, &$form_state, $form_id) {
    // We want this on a specific node type
    if ($form_id == 'NODE_TYPE_node_form') {
        $form['#after_build'][] = 'CUSTOM_MODULE_NODE_TYPE_node_form_after_build';
    }
}

// afterbuild function
function CUSTOM_MODULE_NODE_TYPE_node_form_after_build($form) {

    // We want to hide input formats and we can do it like following
    $form['body']['und']['0']['format']= '<div style="display:none;">';
    $form['body']['und']['0']['format']= '</div>';   

    return $form;
}

이 작은 변화로 대부분 나를 위해 일했습니다.

$form['body'][LANGUAGE_NONE][0]['format']['#prefix']<br>
$form['body'][LANGUAGE_NONE][0]['format']['#suffix']
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.