Jak ukryć opcje formatu wejściowego i pomóc tekstowi w obszarze tekstowym?

32

Jak ukryć opcje formatu wejściowego i pomóc tekstowi w obszarze tekstowym podczas dodawania | edycji węzła?

Zrzut ekranu - część do ukrycia zaznaczona czerwonym prostokątem

Cosmodrom
źródło
Myślę, że możesz to zrobić, jeśli uzyskasz dostęp do formularza, hook_form_alterjednak nie jestem pewien co do szczegółów, więc nie opublikuję tego jako odpowiedzi ...
acm

Odpowiedzi:

26

W przypadku Drupala 7 możesz użyć modułu Uprość . Pozwala ukryć obszar tekstowy opcji Format tekstu, a także inne elementy formularzy węzłów.

BWPanda
źródło
3
Jeśli spojrzysz na jego źródło ( cgit.drupalcode.org/simplify/tree/simplify.module?id=7681b0e ), moduł używa jQuery, aby ukryć opcje formatu tekstu. Szkoda, ponieważ 1: chcesz tylko ukryć format tekstu i nie potrzebujesz całego modułu, a 2: javascript staje się wymogiem. Dlaczego nie ukryć tego w CSS, jak sugeruje odpowiedź Ionut Adriana Luchiana? Jest zdecydowanie odpowiedni i czysty.
B2F
uproszczenie nie działało dla mnie konsekwentnie. w niektórych przypadkach działało w innych nie.
snowguy
Nie działało dla mnie. Użyłem motywu bootstrap, więc może z tego powodu.
sobi3ch
Uproszczenie też nie działało dla mnie.
Артем Ильин
25

Aby to zrobić, możesz użyć hook_form_alter w niestandardowym module.

Na przykład w 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;
}
fourmi4x
źródło
2
to działa, ale ma efekt uboczny: usuwa edytor wysiwyg z obszaru tekstowego
castaway
To załatwiło sprawę. Chciałem głównie wyczyścić wprowadzanie tekstu.
RevNoah
1
lepiej jest podać LANGUAGE_NONE zamiast „und”, a także funkcja after_build powinna mieć sprawdzanie oparte na rolach, na wypadek, gdyby inne nadrzędne role mogły wyświetlić pole Format tekstu.
Aneek Mukhopadhyay
12

W drupal 6 jest moduł Better Formats, który robi dokładnie to, co chcesz, jest wersja 7 dev, ale zawiera ostrzeżenie, że jest w trakcie intensywnego rozwoju. Jeśli Twoja strona jest wciąż w fazie rozwoju, warto spróbować.

cyfrowy
źródło
Wydaje się, że działa dobrze dla użytkowników, którzy nie byli administratorami, nawet jeśli usuniesz uprawnienia dla grupy administracyjnej, użytkownik 1 nadal będzie widział opcje w D7
joelpittet
Lepsze formaty działają dobrze dla D7, są stabilne, bez poważnych problemów i wydanie Beta 2 w styczniu 2016 r.
Duncanmoo
9

Możesz po prostu zabić element formularza formatu.

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;
}
doublejosh
źródło
+1, najlepsze rozwiązanie. W przypadku przyszłych użytkowników zastąp CUSTOM nazwą aktywnego motywu. Ten fragment kodu powinien zostać umieszczony w skrypcie template.php w folderze aktywnego motywu. A jeśli Twoja witryna ma włączoną obsługę wielu języków, zamień LANGUAGE_NONE na swój kod języka.
Janaka R Rajapaksha
2
CUSTOMjest przeznaczona jako nazwa niestandardowego motywu. NIGDY nie powinieneś kodować na stałe języka, jeśli potrzebujesz aktywnego języka, global $language;aby go złapać.
doublejosh
Uwaga: LANGUAGE_NONEjest stałą o wartości und... nie używaj und.
doublejosh,
To zabija również
wysiwygów
7

Myślę, że najlepszym rozwiązaniem jest zablokowanie dostępu do elementu wyboru formatu tekstu. Jeśli całkowicie go rozbroisz, będziesz musiał stawić czoła niepożądanym efektom ubocznym jako znikający edytor WYSIWYG. Więc proponuję następujący kod.

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;
}
użytkownik5950
źródło
To doskonałe rozwiązanie, jeśli chcesz ukryć je tylko w jednym konkretnym polu. A WYSIWYG pozostaje funkcjonalny.
Dalin
6

Użyj CSS, najprostszego sposobu. Firebug

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

Moc CSS i Firebug

Powodzenia.

Ionut Adrian Luchian
źródło
3
Nie polecam ukrywania CSS „chociaż to działa”.
saadlulu
brak odpowiedzi, ucieczka
Pan Chrono
5
Czemu ? To świetna odpowiedź, ponieważ pytanie polega na jej ukryciu, a nie usunięciu. To nie jest tak, że ukrywanie go spowodowałoby zagrożenie bezpieczeństwa lub byłoby złe dla SEO ... Zdefiniowałeś już uprawnienia w konfiguracji formatu tekstowego, więc gdzie jest problem?
B2F
1
Wolałbym to ukrywać. +1 głos za Ciebie.
Alyssa Gono
Moduł wtrysku css działa cuda. patrz: prntscr.com/cieuvs
Patoshi パ ト シ
5

DLA Drupala 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;
}
nxplace
źródło
To świetna technika, jeśli chcesz ukryć ją na wielu / wszystkich polach.
Dalin
2

Innym prostym sposobem na ukrycie opcji formatu wejściowego jest usunięcie wszystkich innych formatów wejściowych z profili użytkowników, które chcesz ukryć. W tym celu przejdź do admin-> konfiguracja-> formaty wejściowe i usuń wszystkie role użytkownika z wszystkich innych formatów wejściowych oprócz domyślnie określonego.

Ashok Sharma
źródło
6
Działa tylko, jeśli chcesz włączyć tylko zwykły tekst. Ponieważ nie możesz tego wyłączyć.
Fletch,
dokładnie. Nie możesz mieć tylko „Filtrowanego tekstu”. Przepraszamy, ale ta odpowiedź jest myląca.
nerdoc
2

Ja to zrobiłem:

Odznaczone „Używaj filtrowanego formatu tekstowego HTML” i „Administruj formatami tekstowymi i filtrami” z osób> uprawnienia dla anonimowych i autoryzowanych użytkowników, aby nie mogli używać CKeditor.

Oczywiście możesz wyłączyć go z CSS poprzez „display: none;” dla konkretnej klasy div (to .filter-wrapper) i ukryj cały wskazany obszar górny, ale w tym przypadku obszar ten jest ukryty dla wszystkich, w tym superużytkownika.

zurab lanchava
źródło
1

Zainstaluj moduł CSS Injector (obecnie istnieje tylko działająca wersja programistyczna dla Drupal 8).

Następnie przejdź do strony administracyjnej CSS Injector (/ admin / config / development / css-injector). Utwórz nową regułę CSS za pomocą tego kodu (lub dowolnego kodu, który ma zastosowanie do klasy tekstu obszaru formowania):

.filter-guidelines {
    display: none;
}

Wybierz zastosowanie go do motywu Siedem (lub dowolnego używanego motywu administratora). Oszczędzaj i ciesz się!

Whatwatt
źródło
Zainstaluj css injector 1.x, ponieważ 2.0 jest starszy. Oto podgląd tego, jak to wygląda: prntscr.com/cieuvs - ten moduł działa cuda dla wstrzykiwania css w porównaniu do innych modułów, takich jak CPN (kod na węzeł)
Patoshi シ ト シ
0

Nie można usunąć formatu wejściowego „Zwykły tekst”. RTE nie wyświetla się, gdy używasz formatu wejściowego „Zwykły tekst”.

Będę korzystać z opcji CSS.

ibakayoko
źródło
Selektor formatu wejściowego nie pojawia się, gdy aktualnie zalogowany użytkownik może użyć tylko formatu wejściowego; ten jedyny format wejściowy może być inny, a selektor nie będzie wyglądał tak samo.
kiamlaluno
0

Używam zarówno „usuwania wszystkich innych formatów wejściowych z profili użytkowników”, jak i css.

bez ryb
źródło
0

Wypróbuj moduł upraszczający .

Uproszczenie pozwala ukryć określone pola przed interfejsem użytkownika. Pomaga to uporządkować formularze i zapewnia edytorom treści bardziej przyjazną obsługę.

allabakash.g
źródło
Upraszczam, działa dla innych pól, ale nie mogłem sprawić, by działał dla formatów wejściowych.
Druvision,
0

Jeśli chcesz ukryć formaty, ale nadal je zachować, wypróbuj moduł „ Formaty uproszczone ”: https://www.drupal.org/project/simplified_formats

Ukrywa szczegóły dotyczące formatów w małej ikonce ze znakiem zapytania obok menu wyboru formatu. W przypadku wielu filtrów formatów tekstowych naprawdę nie warto całkowicie ukrywać instrukcji, które podpowiadają, jak ich używać. Inne filtry są bardziej automatyczne. Myślę, że potrzebujemy modułu, który pozwala nam wybierać, co pokaże użytkownikowi końcowemu, a co nie.

deanflory
źródło
0

Możesz także użyć modułu Ukryj formaty .

Ukryj formaty pozwala zwinąć menu rozwijane „format tekstowy” lub „format wejściowy” w celu wyczyszczenia interfejsu użytkownika.

rozwiać
źródło
To świetny moduł, ale powoduje, że pole formatów jest zwinięte, a nie ukryte.
Druvision,
0

Dla Drupal 8. To usuwa obszar formatu dla dwóch pól.

/**
 * 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);
}
Andre Angelantoni
źródło
OP określił D7 w pytaniu
Geoff
1
Zgoda. Jednak w tym momencie jest bardzo mało online dla D8. Podejrzewam, że mógłbym postawić własne pytanie i odpowiedzieć na nie. Nigdy tego nie próbowałem.
Andre Angelantoni,
byłoby to lepsze podejście, tylko dlatego, że OP w tym przypadku jest bardzo konkretny w odniesieniu do wersji
Geoff
Czy możesz wskazać, jak to wdrożyć? Jak mogę znaleźć form_id?
John
0

W przypadku Drupal 7 możesz:

1) Użyj hook_theme_registry_alter(&$theme_registry)z poziomu modułu, aby zmienić rejestr motywów, np. definicja procesorów tematycznych.

2) Następnie zmienić trzy funkcje motywu, theme_filter_tips, theme_filter_tips_more_info, i theme_filter_guidelines, i zmusić ich do powrotu nic. Następująco:

To jest funkcja celu. Wszystkie powyższe funkcje motywu zostaną przekierowane do tego.

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';
}

Po wyczyszczeniu pamięci podręcznej Drupal będzie szukał tych definicji filtrów na ścieżce wybranego modułu (patrz drupal_get_path) i nic nie zwróci dla każdego filtra. Dlatego nie ma już opisów formatów tekstowych.

Mauro Colella
źródło
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;
}

Przeważnie pracował dla mnie z tymi małymi zmianami.

$form['body'][LANGUAGE_NONE][0]['format']['#prefix']<br>
$form['body'][LANGUAGE_NONE][0]['format']['#suffix']
miske
źródło