防止WYSIWYG + CKEDITOR剥离HTML类 -- 7 领域 和 wysiwyg 领域 drupal 相关 的问题

Prevent WYSIWYG+CKEditor from stripping html classes


9
vote

问题

中文

我正在使用带ckeditor的wysiwyg编辑器。我发现在从"源" 视图中向我的元素添加自定义类时,CKEditor在切换出源视图时会在这些类中删除。

当谷歌作一个解决方案时,我找到了 ckeditor模块页面,它描述了使用CKEDITOTITOTITOTITOTITOTITOTITONS。 (基本上,我们需要在其高级内容过滤器设置中设置JS Config 998876665 )。

但是,通过WYSIWYG使用CKEditor时,这些设置不会在管理界面中暴露。在通过WYSIWYG使用CKEDITOR时,您如何实现相同的?

ps:我不能单独使用ckeditor,因为它没有与媒体插件集成。

英文原文

I'm using WYSIWYG editor with CKEditor. I'm finding that when adding custom classes to my elements from the "source" view, CKEditor strips those classes when switching out of the source view.

When googling for a solution to this, I found the CKEditor module page which describes how to fix this when using CKEditor alone. (Basically, we need to set up a JS config config.allowedContent = true in its Advanced Content Filter settings).

However, when using CKEditor via WYSIWYG, these settings are not exposed in the admin interface. How do you achieve the same when using CKEditor via WYSIWYG?

PS: I cannot use CKEditor alone because it does not integrate with the media plugin.

     
   
   

回答列表

4
 
vote
vote
最佳答案
 

您使用的是什么版本的CKEDITOR? CKEDITOR 4.1+有一个问题,它具有称为自动内容过滤器(ACF)的功能,它将自动为编辑器定义的属性: https://drupal.org/node/1956778

问题#37在问题上为我工作。

 

What version of CKEditor are you using? There is an issue with CKEditor 4.1+, which has a feature called Automatic Content Filter (ACF) that will automatically strip attributes not defined for the editor: https://drupal.org/node/1956778

Patch #37 in the issue worked for me.

 
 
     
     
10
 
vote

我找到了一个解决方案。

这会关闭过滤,它正在工作,但不是一个好主意...

  config.allowedContent = true;   

与内容字符串播放,适用于ID等,但不是类和样式属性,因为您有()和{}为类和样式过滤。

所以我的选择是为了允许编辑器中的任何类是:
  config.extraAllowedContent = '*(*)';   

这允许任何类和任何内联样式。

  config.extraAllowedContent = '*(*);*{*}';   

只允许 class="ASDF1" 和Class ="ASDF2" 对于任何标签:

  config.extraAllowedContent = '*(asdf1,asdf2)';   

(所以你必须指定classnames)

仅允许 class="ASDF" 仅为P标签:

  config.extraAllowedContent = 'p(asdf)';   

允许任何标记的ID属性:

  config.extraAllowedContent = '*[id]';   

等等

允许样式标签(< style type ="text / css" > ...< / style>):

  config.extraAllowedContent = 'style';   

要更复杂:

  config.extraAllowedContent = 'span;ul;li;table;td;style;*[id];*(*);*{*}';   

希望它是一个更好的解决方案...

 

I found a solution.

This turns off the filtering, it's working, but not a good idea...

config.allowedContent = true; 

To play with a content string works fine for id, etc, but not for the class and style attributes, because you have () and {} for class and style filtering.

So my bet is for allowing any class in the editor is:

config.extraAllowedContent = '*(*)'; 

This allows any class and any inline style.

config.extraAllowedContent = '*(*);*{*}'; 

To allow only class="asdf1" and class="asdf2" for any tag:

config.extraAllowedContent = '*(asdf1,asdf2)'; 

(so you have to specify the classnames)

To allow only class="asdf" only for p tag:

config.extraAllowedContent = 'p(asdf)'; 

To allow id attribute for any tag:

config.extraAllowedContent = '*[id]'; 

etc etc

To allow style tag (<style type="text/css">...</style>):

config.extraAllowedContent = 'style'; 

To be a bit more complex:

config.extraAllowedContent = 'span;ul;li;table;td;style;*[id];*(*);*{*}'; 

Hope it's a better solution...

 
 
     
     
2
 
vote

这似乎应该添加到WYSIWYG模块中的东西,将自定义设置添加到编辑器的能力是一个非常广泛的要求。但是在没有那个情况下,我仍然建议不要编辑模块本身,因为它会破坏升级...幸运的是,模块确实可以在自定义模块中提供 drupal_alter 的呼叫:

  function mymodule_wysiwyg_editor_settings_alter(&$settings, $context){     //check if the editor is ckeditor and the version is at least 4.0     if($context['profile']->editor=='ckeditor' && $context['editor']['installed version'][0]>3){         //add custom settings for ckeditor 4.+ here         $settings['allowedContent'] = TRUE;     } }   

在其中"mymodule" 显然是自定义模块的名称。这在不编辑某人ELSES模块的情况下完成任务。

 

This seems like something that should be added into the WYSIWYG module, the ability to add custom settings to editors is a pretty widespread requirement. But in the absence of that, I still recommend not editing the module itself since it would break on upgrades... fortunately the module does provide a call to drupal_alter, so in a custom module:

function mymodule_wysiwyg_editor_settings_alter(&$settings, $context){     //check if the editor is ckeditor and the version is at least 4.0     if($context['profile']->editor=='ckeditor' && $context['editor']['installed version'][0]>3){         //add custom settings for ckeditor 4.+ here         $settings['allowedContent'] = TRUE;     } } 

where "mymodule" is obviously the name of your custom module. This accomplishes the task without editing someone elses module.

 
 
0
 
vote

尝试将以下内容添加到模块/ wysiwyg /编辑器/ ckeditor.inc

config.extraAllowedContent = '*(*)'; 0 config.extraAllowedContent = '*(*)'; 1

所以它现在读取:

  config.extraAllowedContent = '*(*)'; 2  
 

Try adding the following to modules/wysiwyg/editors/ckeditor.inc

'allowedContent' => TRUE, to function wysiwyg_ckeditor_settings($editor, $config, $theme)

so that it now reads:

function wysiwyg_ckeditor_settings($editor, $config, $theme) {   $settings = array(     'width' => 'auto',     // For better compatibility with smaller textareas.     'resize_minWidth' => 450,     'height' => 420,     // @todo Do not use skins as themes and add separate skin handling.     'theme' => 'default',     'skin' => !empty($theme) ? $theme : 'kama',     // By default, CKEditor converts most characters into HTML entities. Since     // it does not support a custom definition, but Drupal supports Unicode, we     // disable at least the additional character sets. CKEditor always converts     // XML default characters '&', '<', '>'.     // @todo Check whether completely disabling ProcessHTMLEntities is an option.     // ADDED  'allowedContent' => TRUE, to keep WYSIWYG from removing classes     'entities_latin' => FALSE,     'entities_greek' => FALSE,     'allowedContent' => TRUE,    ); 
 
 
0
 
vote

在不攻击任何来源,也没有尝试弄清楚读取这些设置的读取的位置,您可以将其添加到您拥有自定义模块

  config.extraAllowedContent = '*(*)'; 3  

op询问的设置是 998876614 从上面的@tommy的答案。这似乎允许任何元素上的类和样式属性。其余的只是示例条目。作为另一个例子,此条目允许媒体模块所需的标签。

  config.extraAllowedContent = '*(*)'; 5  
 

Without hacking any sources, and also without trying to figure out WHERE the bleep these settings are being read, you could add this to you own custom module

function mymodule_wysiwyg_editor_settings_alter(&$settings, $context) {     if ($context['profile']->editor == 'ckeditor') {         $settings['extraAllowedContent'] = array(             'a[download,type,length,href]',             'span;ul;li;table;tr;td;style;*[id];*(*);*{*}'         );     } } 

The settings the OP is asking for are *(*);*{*} from the answer of @Tommy above. This seems to allow class and style attributes on any element. The rest are just example entries. As another example, this entry allows the tags needed by the media module.

'img[title,alt,src,data-cke-saved-src](wysiwyg-break,drupal-content);video[width,height,controls,src](*);source[src,type];audio[controls,src](*);img[*](media-element,file-default)', 
 
 
0
 
vote

筛选的HTML-筛选器从其允许的html元素中的元素中删除了从中的元素的类。段落标签( config.extraAllowedContent = '*(*)'; 6 )默认情况下不存在(可能会令人困惑和不自然),事件可能是应用程序的最常用的元素。将其放在那里后,过滤的HTML将不再从这些标记中划分类。同样用于图像标签( 998876617 )。

 

The Filtered HTML-filter strips out the classes from elements that are not in its allowed HTML elements. The paragraph tag (<p>) is not in there by default (which may be confusing and unnatural), eventhough it may the most frequent element where class is applied upon. Once you put it in there, Filtered HTML will no longer strip the classes from these tags. Same goes for image tags (<img>).

 
 
         
         

相关问题

1  如何在我的主题中制作一个可折叠的现场集?  ( How to make a collapsible fieldset in my theme ) 
我希望在我的Drupal 7网站中具有可折叠的Firstalset在添加内容中。我在 html.tpl.php 中添加了这个: <?php print $styles; drupal_add_js('misc/form.js'); drupal_add_js('misc/collapse.js'); ...

5  查看页面上的页面上使用哪个上下文  ( See which context is used on a page when looking at the page ) 
在您观看页面时,是否有一种快速的方法来查看正在应用的所有上下文?理想情况下,我希望能够看到每个块负责哪个上下文。 ...

0  为什么Devel块显示性能,执行PHP和Switch用户块?  ( Why is the devel block displaying the performance execute php and switch user b ) 
我的devel block正在显示性能,交换机用户,也在侧边栏中执行PHP块,也使其非常难看和臃肿。 我看不出我本可以做些什么来引起它,并想知道它是否是由于与一些第三方模块的一些互动。 可能导致的是什么? 编辑:i hve将块的代码添加到低电平。在那里似乎有很多 admin-pane-xxxx 类和ID,我怀疑它与管...

0  如何阻止匿名用户的内部Drupal路径?  ( How to block internal drupal paths for anonymous users ) 
是否可以阻止匿名用户的内部Drupal路径,并只留下由PathAuto生成的路径?例如: 块路径:/分类学/术语/ 5 留言:/产品/书籍 在Google网站管理员工具中为我的网站,所有分类页面都有一个名为"页面的问题,具有重复标题标记" ,谷歌正在向两个术语显示两个路径,这是一个问题。如何阻止匿名用户的内部D...

4  如何检索产品ID?  ( How can i retrieve the product id ) 
我正在尝试检索产品ID。我可以通过查找产品页面找到产品SKU,并使用<代码> commerce_product_load_by_sku() 加载它。 如何找到实际的身份证?我想在 commerce_cart_product_add_by_id() 中使用它。 ...

1  如何设置规则来重定向到购物车?  ( How to setup a rule to redirect to shopping cart ) 
我正在尝试创建一个规则,在用户创建一个帐户之后,它们被发送到结账页面,最终将通过paypal支付(我使用的商务模块)。 我到目前为止的步骤 1.创建一个事件"保存新用户帐户后" 2.留空空白。 3.选择订单完整结帐的操作 在第三步,它要求数据选择器:"选择类型商务单的数据。" 我不知道从这里去哪里。 ...

2  如何为jQuery DatePicker设置日期显示格式?  ( How to set date display format for jquery datepicker ) 
我在drupal 7中使用标准的jquery datepicker,我想改变它的保存和显示日期。我希望它能够清楚地显示2013年11月10日至11月10日。是否可以完成此操作? ...

1  查看3模板或UI问题  ( Views 3 template or ui question ) 
我有一个包含多个值的文本字段。该字段并不总是包含任何值。显示时,该字段需要有一个标签。 iow,行应该看起来像下面的一个行 Coauthor:人X,人物Y 或 Coauthor:人x 这是我的问题:当我使用视图UI添加标签时,我得到 Coauthor:Person X,Coauthor:人Y 当我使用模...

4  视图:未查询具有关系的自定义表  ( Views custom table with relationship is not queried ) 
我使用自定义表来存储我的节点上的数据,并挂钩 _views_data 以显示或排序从此表。 一切都很好: /** * Implements hook_views_data() */ function MYMODULE_views_data() { $data['MYTABLE']['table']['joi...

3  设置私有文件目录(nginx)  ( Setting up the private file directory nginx ) 
问题 我正在尝试在LEMP堆栈上为Drupal设置私人文件目录(Ubuntu 12.04,Nginx,MySQL,PHP),我不是100%确定权限或设置,所以我以为我'D问,你应该怎么做? 到目前为止 需要是网络服务器可写的文件夹,但无法从Web访问。 示例: 位置:drupal_root / private...

1  如何在以编程方式在Drupal Commerce中保存订单后立即启用付款方式?  ( How to enable a payment method as soon as an order is saved in drupal commerce p ) 
我正在尝试使用Drupal Commerce创建会员网站。我创建了一种自定义表单,可以收集用户的所有帐单详细信息和成员身份类型,然后在提交创建并保存Drupal Commerce Order(已创建的产品)。 现在我想在节省订单时激活订单的支付系统,但我没有能够这样做。所有这些都应该在后端发生,我不想将用户重定向到...

0  视图#3自定义处理程序错误  ( Views3 custom handler error ) 
我正在学习如何实现客户的观点3字段处理程序。 使用以下处理程序代码: class views_handler_filter_sub_nodes extends views_handler_field_custom{ function options_form(&$form, &$form_state){...

1  WebForm上传字段模板  ( Webform upload field template ) 
for drupal的file_managed窗口小部件我创建了自己的" theme_file_widget " 功能。 我需要为webform的文件窗口小部件做同样的事情,但我不知道要使用什么主题挂钩。任何想法? ...

0  如何从$ form_state ['值']恢复表单值?  ( How to restore form values from form statevalues ) 
我在数据库中保存 $form_sate['values'] 。当我的用户返回到我想要之前所提出的值的表格。类似: function my_form($form, &$form_sate) { $form_state_saved = get_form_state_values_from_db(); $fo...

2  在第一级显示父母,然后在每个页面中的孩子[关闭]  ( Show parents at first level then child in each page ) 
关闭。这个问题需要详细信息或清晰度。它目前不接受答案。 想要改进这个问题?添加详细信息并阐明编辑此帖的问题。 关闭 1年前。 ...

2  Drupal Commerce:全面设置订单  ( Drupal commerce set order as paid in full ) 
我正在尝试从CSV文件(来自另一个非Drupal数据库)导入记录,以便我移植到Drupal 7.我有Drupal Commerce,Commerce经常性框架设置。当你经历适当的工作流程时,一切都应该起作用。但是,我有2000多个需要添加到网站并通过该过程的记录并没有意义。换句话说,我正在编写一个脚本来设置订单,然后...

0  查询将大数字视为字符串  ( Query treating large number as a string ) 
我正在尝试在表上运行一个选择语句。 该列是十进制(20,0)无符号。 可以使用SELECT语句找到大部分条目: db_query('SELECT * FROM {foo_table} WHERE foo_id = :other_id',array(':other_id' => $value)) 和$ val...

1  Drupal 7 Commerce - 当您选择一个属性时,如何样式请等待加载消息/图标?  ( Drupal 7 commerce how do you style the please wait loading message icon when y ) 
我正在尝试在Drupal 7 Commerce中选择产品的属性时,请等待加载程序图标。我正在使用chrome,我无法弄清楚右键单击inspect元素的方式,因为它加载到快速。还是有另一种方式来暴露这一点?我只需要与它关联的HTML和类。 ...

1  设置订单已完成  ( Setting an order as completed ) 
在代码中,我尝试标记为已完成的订单。我在 hook_commerce_payment_order_paid_in_full 中这样做 function my_module_commerce_payment_order_paid_in_full($transaction) { $orderid = $tran...

2  我的菜单只会半翻译  ( My menu will only semi translate ) 
我在我的网站上创建了一个菜单,并使用了使用功能来导出它。前2个菜单项转换为不同的语言,但第三项不是。 第三个单词是联系人。我已经去了 99887664 并搜索联系人。我得到了以下内容。 在我的特征底部,它有 // Translatables // Included for use with stri...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.