Come nascondere le opzioni del formato di input e aiutare il testo in un'area di testo?


32

Come nascondere le opzioni del formato di input e aiutare il testo in un'area di testo quando si aggiunge | la modifica di un nodo?

Schermata: parte da nascondere selezionata con rettangolo rosso


Penso che puoi farlo se accedi al modulo tramite, hook_form_alterma non sono sicuro dei dettagli, quindi non
posterò

Risposte:


26

Per Drupal 7, è possibile utilizzare il modulo Semplifica . Ti permette di nascondere l'area di testo delle opzioni del Formato testo, così come altri elementi nei moduli dei nodi.


3
Se guardi alla sua fonte ( cgit.drupalcode.org/simplify/tree/simplify.module?id=7681b0e ), il modulo usa jQuery per nascondere le opzioni del formato del testo. È un peccato perché 1: vuoi solo nascondere il formato del testo e non hai bisogno dell'intero modulo e 2: javascript diventa un requisito. Perché non nasconderlo solo con CSS come suggerisce la risposta di Ionut Adrian Luchian? È sicuramente appropriato e pulito.
B2F

semplifica non ha funzionato in modo coerente per me. in alcuni casi ha funzionato in altri no.
Snowguy,

Non ha funzionato per me. Ho usato il tema bootstrap, quindi forse per questo.
sobi3ch,

Semplificare non ha funzionato anche per me.
Артем Ильин

25

A tale scopo, puoi utilizzare hook_form_alter in un modulo personalizzato.

Ad esempio, in 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
funziona ma ha un effetto collaterale: rimuove l'editor di wysiwyg dall'area di testo
naufragare il

Questo ha fatto il trucco per me. Principalmente volevo solo ripulire l'input di testo.
RevNoah,

1
è meglio menzionare LANGUAGE_NONE invece di 'und' e anche la funzione after_build dovrebbe avere un controllo basato sui ruoli nel caso in cui altri ruoli superiori possano visualizzare la casella Formato testo.
Aneek Mukhopadhyay,

12

In drupal 6 c'è il modulo Better Formats che fa esattamente quello che vuoi, c'è una versione 7 dev ma viene fornito con un avviso che è in forte sviluppo. Se il tuo sito è ancora in fase di sviluppo, potrebbe valere la pena provarlo.


Sembrava funzionare bene per gli utenti che non erano amministratori, anche se si rimuovono le autorizzazioni per il gruppo di amministratori, l'utente 1 vedrà comunque le opzioni in D7
joelpittet,

I formati migliori funzionano bene con D7, sono stabili senza problemi seri e una versione Beta 2 a gennaio 2016.
Duncanmoo,

9

In realtà puoi semplicemente uccidere l'elemento del modulo di formato.

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, la soluzione migliore. Per i futuri visitatori, sostituisci CUSTOM con il nome del tuo tema attivo. Questo frammento di codice dovrebbe andare nello script template.php nella cartella del tema attivo. E se il tuo sito è abilitato per multilingua, sostituisci LANGUAGE_NONE con il tuo codice lingua.
Janaka R Rajapaksha,

2
CUSTOMè inteso come nome del tema personalizzato. Non dovresti MAI codificare una lingua se hai bisogno della lingua attiva da usare global $language;per afferrarla.
doublejosh il

Nota: LANGUAGE_NONEè una costante con valore und... non usare und.
doublejosh

Questo uccide anche il wysiwyg
digitgopher,

7

Penso che la soluzione migliore sia quella di impedire l'accesso all'elemento di selezione del formato di testo. Se lo annulli completamente, dovrai affrontare gli effetti collaterali indesiderati come un editor WYSIWYG che scompare. Quindi propongo il seguente codice.

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

Questa è un'ottima soluzione se vuoi nasconderla solo su un campo particolare. E il WYSIWYG rimane funzionale.
Dalin,

6

Usa CSS, il modo più semplice. Firebug

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

Il potere di CSS e Firebug

In bocca al lupo.


3
Non consiglierei "anche se funziona" nascondendo CSS.
Saadlulu,

non una risposta, una vacanza
Pan Chrono,

5
Perché ? Questa è un'ottima risposta perché la domanda è nasconderla, non rimuoverla. Non è come nasconderlo causerebbe una minaccia alla sicurezza o sarebbe dannoso per il SEO ... Hai già definito le autorizzazioni nella configurazione del formato di testo, quindi dov'è il problema?
B2F

1
Preferirei nasconderlo. +1 voto per te.
Alyssa Gono,

il modulo iniettore css fa miracoli. vedi: prntscr.com/cieuvs
Patoshi パ ト シ

5

PER Drupal 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;
}

Questa è un'ottima tecnica se vuoi nasconderla su molti / tutti i campi.
Dalin,

2

Un altro modo semplice per nascondere l'opzione del formato di input è rimuovere tutti gli altri formati di input dai profili utente che si desidera nascondere l'opzione. Per questo, vai admin-> configurazione-> formati di input e rimuovi tutti i ruoli utente da tutti gli altri formati di input tranne uno che vuoi assegnare di default.


6
Funziona solo se si desidera abilitare solo il testo normale. Perché non puoi disabilitarlo.
Fletch,

Esattamente. Non puoi avere solo "Testo filtrato". Siamo spiacenti, ma questa risposta è fuorviante.
nerdoc,

2

L'ho fatto:

Deselezionato "Usa il formato di testo HTML filtrato" e "Gestisci formati e filtri di testo" da persone> autorizzazioni per utenti anonimi e autorizzati in modo che non possano usare CKeditor.

Ovviamente puoi disabilitarlo dal CSS tramite "display: none;" per una particolare classe div (è .filter-wrapper) e nascondi tutta l'area che hai indicato in alto, ma in questo caso l'area è nascosta per tutti, incluso il superutente.


1

Installa il modulo CSS Injector (al momento esiste solo una versione di sviluppo funzionante per Drupal 8).

Quindi vai alla pagina di amministrazione di CSS Injector (/ admin / config / development / css-injector). Crea una nuova regola CSS con questo codice (o qualsiasi codice applicabile a una classe del testo dell'area di formattazione):

.filter-guidelines {
    display: none;
}

Scegli di applicarlo sul tema Seven (o su qualsiasi tema admin in uso). Risparmia e divertiti!


Installare l'iniettore css 1.x poiché 2.0 è più vecchio. Ecco un'anteprima di come appare: prntscr.com/cieuvs - Questo modulo fa miracoli per l'iniezione css rispetto ad altri moduli come CPN (codice per nodo)
Patoshi パ ト シ

0

Non è possibile rimuovere il formato di input "Testo normale". E l'RTE non viene visualizzato quando si utilizza il formato di input "Testo normale".

Userò l'opzione CSS.


Il selettore del formato di input non viene visualizzato quando l'utente attualmente connesso può utilizzare solo un formato di input; quell'unico formato di input potrebbe essere diverso e il selettore non sembrerebbe lo stesso.
kiamlaluno

0

Uso sia "la rimozione di tutti gli altri formati di input dai profili utente" sia il modo css.


0

Prova il modulo semplificato .

Semplifica consente di nascondere determinati campi dall'interfaccia utente. Questo aiuta a disordinare i moduli e presentare un'esperienza più user-friendly agli editor dei contenuti.


semplificare funziona per altri campi, ma non sono riuscito a farlo funzionare per i formati di input.
Druvision,

0

Se vuoi nascondere i formati ma tenerli ancora disponibili, prova il modulo " Formati semplificati ": https://www.drupal.org/project/simplified_formats

Nasconde i dettagli dei formati in una piccola icona punto interrogativo accanto al menu a discesa di selezione del formato. Per molti filtri in formato testo non serve davvero nascondere completamente le istruzioni che spiegano come usarli. Altri filtri sono più automatici. Penso che abbiamo bisogno di un modulo che ci permetta di scegliere cosa mostrare all'utente finale e cosa no.


0

Puoi anche utilizzare il modulo Nascondi formati .

Nascondi formati consente di comprimere i menu a discesa "formato testo" o "formato input" per ripulire l'interfaccia utente.


Questo è un ottimo modulo ma rende la casella dei formati chiusa, non nascosta.
Druvision,

0

Per Drupal 8. Ciò rimuove l'area del formato per due campi.

/**
 * 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 ha specificato D7 nella domanda
Geoff il

1
Concordato. Tuttavia, c'è molto poco online per D8 a questo punto. Suppongo di poter fare la mia domanda e poi rispondere. Non l'ho mai provato.
Andre Angelantoni,

quello sarebbe l'approccio migliore, solo perché in questo caso l'OP è molto specifico sulla versione
Geoff

Potresti indicare come implementarlo? Come posso trovare form_id?
Giovanni,

0

Per Drupal 7, puoi:

1) Utilizzare hook_theme_registry_alter(&$theme_registry)all'interno di un modulo per modificare il registro temi, eq. la definizione dei processori di temi.

2) Poi alterare tre funzioni a tema, theme_filter_tips, theme_filter_tips_more_info, e theme_filter_guidelines, e costringerli a restituire nulla. Come segue:

Questa è la funzione target. Tutte le funzioni del tema sopra saranno reindirizzate a quello.

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

Quando svuoti la cache, Drupal cercherà quelle definizioni di filtro sul percorso del tuo modulo preferito (vedi drupal_get_path) e non restituirà nulla per ogni filtro. Quindi, non più descrizioni in formato testo.


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

Principalmente ha funzionato per me con questi piccoli cambiamenti.

$form['body'][LANGUAGE_NONE][0]['format']['#prefix']<br>
$form['body'][LANGUAGE_NONE][0]['format']['#suffix']
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.