最近一个多月持续奋战,状态下降得厉害。
今天要修复一个问题:表用theme table所出,用户在表的头部可以选择排序字段。某字段的内容是排名,包含null空值,但用户想看到null排最后,而mysql的null是排最前的。
于是找到解决order by 的时候用isnull(field),field asc。
考虑到数据来源是db_select,那么很直接的想法是hook_query_alter中改这个order by。
但是神志不清的情况,鬼使神差的在原来编辑开的.inc文件中写了个module_query_alter的函数,试来试去都出不了效果,于是debug进去看query执行的机理,发现hook_query_alter根本没有被调用,找来找去,怀疑是没有Tag的问题,于是query->addTag('xxxx'),还是不行,继续调试,发现$implementations = &$drupal_static_fast['implementations'];后,query_alter根本没有被当前模块hook进去。
于是烦恼,清cache,重启apache,重启电脑.....不停google。
夜了,冲凉,突然恍然大悟,我在编辑.inc啊...不是.module...
真是得来十分费功夫。
潜水久了,积累也很多,希望能多多反馈给社群。
To be a life-saver:
If the drupal hook you've just written is not working, not being fired & triggerred, not functioning, not xx..... the mainly reason would be:
1. Cache.
2. The module you are editing is not enabled.
3. The coding is not placed in the .module file !