如何在文本区域下隐藏输入格式选项和帮助文本?


32

添加或编辑节点时,如何在文本区域下隐藏输入格式选项和帮助文本?

屏幕截图-隐藏带有红色矩形的部分


我认为您可以通过访问表单来完成此操作,hook_form_alter但是我不确定细节,因此我不会将其作为答案...
acm

Answers:


26

对于Drupal 7,可以使用“ 简化”模块。它允许您隐藏“文本格式”选项textarea以及节点表单上的其他元素。


3
如果查看其源代码(cgit.drupalcode.org/simplify/tree/simplify.module?id=7681b0e),该模块将使用jQuery隐藏文本格式选项。很遗憾,因为1:您只想隐藏文本格式,不需要整个模块,而2:需要javascript。为什么不像Ionut Adrian Luchian的答案所建议的那样用CSS隐藏它呢?它绝对合适而且干净。
B2F

简化对我来说并不一致。在某些情况下,它在其他情况下不起作用。
snowguy 2015年

没为我工作。我使用了引导程序主题,因此可能是因为如此。
sobi3ch 2015年

简化对我也不起作用。
АртемИльин

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
这行得通,但有副作用:它从文本区域中删除了所见即所得的编辑器
castaway

那对我有用。我主要只是想清理文本输入。
RevNoah 2013年

1
最好提及LANGUAGE_NONE而不是'und',并且after_build函数应该基于角色进行检查,以防其他高级角色查看“文本格式”框。
Aneek Mukhopadhyay 2014年

12

在drupal 6中有一个模块Better Formats可以完全满足您的要求,有一个7 dev版本,但它带有警告,表明它正在大量开发中。如果您的站点仍在开发中,那么值得尝试一下。


似乎对于非管理员用户来说效果很好,即使您删除了管理员组的权限,用户1仍然会在D7中看到这些选项
joelpittet

更好的格式适用于D7,稳定且没有严重问题,2016
Beta2。– 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 2014年

2
CUSTOM用作您的自定义主题名称。你应该从来没有硬编码的语言,如果你需要积极运用语言global $language;来抓住它。
doublejosh 2014年

注意:LANGUAGE_NONE是一个带有值的常量und。请勿使用und
doublejosh

这也杀死了所见即所得
digitgopher

7

我认为最好的解决方案是禁止访问文本格式选择元素。如果您完全取消设置,作为消失的所见即所得编辑器,您将面临不必要的副作用。因此,我提出以下代码。

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

如果您只想将其隐藏在一个特定的字段上,这是一个极好的解决方案。并且所见即所得保持功能。
大林

6

使用CSS是最简单的方法。 萤火虫

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

CSS和Firebug的力量

祝好运。


3
我不建议“尽管可以” CSS隐藏。
saadlulu 2013年

不是一个答案,一个逍遥游
Pan Chrono

5
为什么呢 这是一个很好的答案,因为问题是隐藏它,而不是删除它。这不像隐藏它会导致安全威胁或对SEO不利...您已经在文本格式配置中定义了权限,所以问题出在哪里?
B2F

1
我宁愿隐藏它。+1投票给你。
Alyssa Gono 2015年

CSS进样器模块的工作原理很神奇。参见:prntscr.com/cieuvs
Patoshiパトシ

5

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

如果您想将其隐藏在许多/所有字段中,则这是一项很棒的技术。
大林

2

隐藏输入格式选项的另一种简单方法是从要隐藏该选项的用户配置文件中删除所有其他输入格式。为此,转到admin-> configuration-> input格式,然后从所有其他输入格式中删除所有用户角色,除了您要默认提供的一种。


6
仅当您只想启用纯文本时才有效。因为你不能禁用那个。
2012年

究竟。您不能仅具有“过滤的文本”。抱歉,这个答案有误导性。
nerdoc '16

2

我这样做:

匿名和授权用户的人员>权限中未选中“使用过滤的HTML文本格式”和“管理文本格式和过滤器”,这样他们就不能使用CKeditor。

当然,您可以通过“ display:none;”从CSS禁用它。对于特定的div类(它是.filter-wrapper),并隐藏您已指向上方的所有区域,但在这种情况下,该区域对所有人(包括超级用户)都是隐藏的。


1

安装CSS Injector模块(当前只有适用于Drupal 8的开发版本)。

然后转到CSS Injector的管理页面(/ admin / config / development / css-injector)。使用以下代码(或适用于格式区域文本类的任何代码)创建新的CSS规则:

.filter-guidelines {
    display: none;
}

选择将其应用于七个主题(或正在使用的任何管理主题)。保存并享受!


在2.0版之前安装CSS进样器1.x。这是外观的预览:prntscr.com/cieuvs-与CPN(每个节点的代码)等其他模块相比,该模块对CSS注入具有奇效
Patoshiパ

0

您无法删除“纯文本”输入格式。当您使用“纯文本”输入格式时,RTE不显示。

我将使用CSS选项。


当前登录的用户只能使用输入格式时,输入格式选择器不会出现;唯一的输入格式可以是不同的格式,并且选择器不会显示相同的格式。
kiamlaluno

0

我同时使用“从用户配置文件中删除所有其他输入格式”和css方式。


0

尝试简化模块。

简化允许从用户界面中隐藏特定字段。这有助于使表单更加整洁,并为内容编辑者提供更加用户友好的体验。


简化适用于其他领域,但我不能使其适用于输入格式。
Druvision 2013年

0

如果要隐藏格式但仍保持可用状态,请尝试“ 简化格式 ”模块:https : //www.drupal.org/project/simplified_formats

它将格式详细信息隐藏在格式选择下拉菜单旁边的小问号图标中。对于许多文本格式的过滤器,完全隐藏告诉他们如何使用它们的说明实际上并没有好处。其他过滤器更自动。我认为我们需要一个模块,该模块允许我们选择显示给最终用户的内容,而不显示给最终用户的内容。


0

您也可以使用“ 隐藏格式”模块。

隐藏格式允许您折叠“文本格式”或“输入格式”下拉菜单以清理UI。


这是一个很棒的模块,但是它会使格式框折叠,而不是完全隐藏。
Druvision 2013年

0

对于Drupal8。这将删除两个字段的格式区域。

/**
 * 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 2015年

那将是更好的方法,只是因为在这种情况下,OP非常特定于版本
Geoff 2015年

您能否说明如何实施?我如何找到form_id?
约翰

0

对于Drupal 7,您可以:

1)使用 hook_theme_registry_alter(&$theme_registry)从模块内部以更改主题注册表,如 主题处理器定义。

2)然后,改变三大主题功能theme_filter_tipstheme_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']
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.