跳转到主要内容
东方龙马 提交于 18 June 2015

问题:

如何解决因ckeditor library移动导致的一些表情图标无法显示?

问题描述:

因为DrupalChina之前用的是ckeditor模块和库打包在一起的版本,后来觉得升级ckeditor不方便,干脆就把模块和库分开了。

原先的ckeditor库存放位置:sites/all/modules/ckeditor/ckeditor。

迁移后的ckeditor库存放位置:sites/all/libraries/ckeditor。

默认ckeditor的表情图片是存在:sites/all/modules/ckeditor/ckeditor/plugins/smiley/images/ 这个目录的,迁移库之后就导致了表情图片不能正常显示了。

解决方法:

目前想到的有两种解决方法:

  1. 拷贝一份 sites/all/libraries/ckeditor/plugins/smiley/images/ 下的图片到sites/all/modules/ckeditor/ckeditor/plugins/smiley/images/ 这个目录。(说明:这个方法是可以临时解决,但是考虑到模块要升级,到时还要备份拷贝,所以能不用尽量不用此方法)
  2. 使用mysql从数据库中执行字符串替换。(即本文要主要介绍的方法)

代码实例:

经过搜索,发现我们可以使用mysql的replace()函数来解决字符串替换的问题。

UPDATE `table_name` SET `field_name` = replace (`field_name`,'from_str','to_str') WHERE `field_name` LIKE '%from_str%'

说明:

  • table_name —— 表的名字
  • field_name —— 字段名
  • from_str —— 需要替换的字符串
  • to_str —— 替换成的字符串

明确目标:将站点内所有的“modules/ckeditor/ckeditor/plugins/smiley”替换为:“libraries/ckeditor/plugins/smiley”。

这里我使用的是phpmyadmin来操作的,首先是要进入phpmyadmin的界面,搜索想被替换的字符:“modules/ckeditor/ckeditor/plugins/smiley”:

ck-change-path1.jpg

执行后发现有6个表及其对应的列涉及到包含这个字符串:

  • field_data_body - body_value、
  • field_data_comment_body - comment_body_value、
  • field_revision_body - body_value、
  • field_revision_comment_body - comment_body_value、
  • users - signature、
  • watchdog - location

准备就绪,开始编写sql:

UPDATE `field_data_body` SET `body_value` = replace (`body_value`,'modules/ckeditor/ckeditor/plugins/smiley','libraries/ckeditor/plugins/smiley') WHERE `body_value` LIKE '%modules/ckeditor/ckeditor/plugins/smiley%';
 
UPDATE `field_data_comment_body` SET `comment_body_value` = replace (`comment_body_value`,'modules/ckeditor/ckeditor/plugins/smiley','libraries/ckeditor/plugins/smiley') WHERE `comment_body_value` LIKE '%modules/ckeditor/ckeditor/plugins/smiley%';

UPDATE `field_revision_body` SET `body_value` = replace (`body_value`,'modules/ckeditor/ckeditor/plugins/smiley','libraries/ckeditor/plugins/smiley') WHERE `body_value` LIKE '%modules/ckeditor/ckeditor/plugins/smiley%';

UPDATE `field_revision_comment_body` SET `comment_body_value` = replace (`comment_body_value`,'modules/ckeditor/ckeditor/plugins/smiley','libraries/ckeditor/plugins/smiley') WHERE `comment_body_value` LIKE '%modules/ckeditor/ckeditor/plugins/smiley%';

UPDATE `users` SET `signature` = replace (`signature`,'modules/ckeditor/ckeditor/plugins/smiley','libraries/ckeditor/plugins/smiley') WHERE `signature` LIKE '%modules/ckeditor/ckeditor/plugins/smiley%';

UPDATE `watchdog` SET `location` = replace (`location`,'modules/ckeditor/ckeditor/plugins/smiley','libraries/ckeditor/plugins/smiley') WHERE `location` LIKE '%modules/ckeditor/ckeditor/plugins/smiley%';

然后到phpmyadmin的界面,点击“SQL”,然后将上面的代码复制到文本框里:

ck-change-path2.jpg

执行一下,然后记得清一下Drupal的缓存,就可以搞定了。

Drupal 版本