Drupal 问题与解决办法

  使用 Drupal 过程中遇到的一些问题,问题的描述以及这些问题的解决办法。主要来自于实际项目过程中遇到的问题,是一些实用性强的技巧性资源。

 

 

CCK 富文本框字段拖拽 Bug 的解决办法

  某个项目需要指定的节点包含多个可拖拽、无限数量、带富文本编辑器的文本输入区域。

 

实现方式

使用 CCK 模块为节点添加文本框字段

在字段配置页面将文本框的数量设置为 Unlimited,将文本过滤设置为 Filtered text (这样就能应用富文本编辑器了,否则只有文本框)

 

问题描述

  使用此方法,可以实现为指定内容类型添加可拖拽的、不限制数量、带富文本编辑器的文本框,但在实际使用过程中遇到一些问题。最主要的问题是在对文本框进行拖拽排序时,文本框内的内容会丢失。

 

处理办法

  其实一开始不太好确定是哪个模块的问题,CCK? CKEditor? 还是 WYSIWYG? 所以试了 CKEditor 模块、Wysiwyg 模块 + CKEditor 编辑器、Wysiwyg 模块 + TinyMCE 编辑器等几种解决办法,最终确定是 wysiwyg 模块的问题。通过查询 wysiwyg 模块的问题队列,找到了这个问题的解决办法 —— 即安装一个(实际上是四个)专门针对这个问题而开发的模块 ——  Wysiwyg API CCK Integrate

说明:最终安装以上模块之后,Wysiwyg 模块 + TinyMCE 编辑器表现不正常了。因为 Wysiwyg 模块 + CKEditor 编辑器在拖拽时还存在页面布局出错的问题,所以没有选用。

 

参考文档:http://drupal.org/node/452678

如何更改 CCK 字段类型

  如果在创建 CCK 字段之前没有很好的考虑字段的类型,那么在项目后期很可能就需要对字段进行修改。对于刚刚创建的 CCK 字段,如果字段的类型选择错了,最简单的办法就是把字段删除,然后添加一个类型正确的字段。这倒不会有什么伤害。

  不过并不是所有情况都是这么简单,有时候网站运行了很长时间之后才发现之前定义的字段类型已不能满足需要了。例如一开始创建的是 float 类型的字段,但因为数据的增长,发现需要将内容类型转换成 decimal。在这种情况下,如果删除 float 字段,所有存储在 float 字段里的数据也都一同被删除了。所以,要最大限度地保证原有数据不丢失,应该如何更改 CCK 字段的类型。

 

更改 CCK 字段类型的方法

注意:执行以下操作前,请先备份数据库

  1. 为内容类型新增加一个类型正确的字段,名为 field_<tmp>(这只是一个临时的字段,名称并不是很重要),并按照正确的配置对字段进行配置;
  2. 执行 SQL 语句将 field_<origin> 字段中的所有数据复制到 field_<tmp> 字段中;
    UPDATE content_type_<your content type> SET field_<new fieldname>_value = field_<old fieldname>_value
    注意:请在执行以上语句时,使用对应的内容类型名称和字段名称代替其中尖括号(<>)中的名称
  3. 删除原来的 CCK 字段 field_<origin>;
  4. 再建立一个类型正确的字段,使用删除的 CCK 字段的名称 field_<origin>,并按照正确的配置对字段进行配置;
  5. 执行类似第2步中的 SQL 语句,不过这些一次要将数据从 field_<tmp> 复制到 field_<origin> 中
  6. 删除临时字段 field_<tmp>;
  7. 完成。

 

  按照以上步骤更改 CCK 字段的类型虽然有点麻烦,但最重要的是能够保全数据。因为数据类似不一样,可能会导致一些数据丢失精度,但小面积的损失远远好过于丢失全部数据 :D

 

参考文档:http://drupal.org/node/769784