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


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.