Drupal常见问题及建站小技巧总结

来源:似水流云博客 注:本技巧总结,不断更新中 .... 永不停止:D

一. 数据查询效率

不管是在程序中查询节点或者是在views中查询,我们在排序时,都不应当用创建日期来排序!因为节点是以nid来索引的,所以用nid会更效率。

如果是想限制查询结果的个数的话,用LIMIT不如用db_query_range:

db_query_range("SELECT title FROM {node}  WHERE type = 'story'", 0, 5);

二. 如何让匿名用户对文章发表评论时,填写“姓名、邮箱、个人网站”?

这个需要在每个内容类型里单独配置该内容类型在被评论时,需要让用户留下这些信息。

三. 善用管理模块

超级用户,即建站人员,可以使用admin_menu模块(全名:Administration menu),它会把所有管理菜单都显示到网站顶部,非常方便,不要再去管理页面找菜单啦!

至于客户的管理,当然不好让他看这么多复杂的菜单,而且让他们看到也不安全... 我们可以用
SimpleMenu模块:

这个模块默认把导航菜单搬到顶部,但不是只能把导航菜单搬到上面,你可以在admin/settings/simplemenu配置页面选择把哪个菜单导 入到simplemenu。而且,给客户使用的话,你当然要定制一套管理菜单喽,用这样的菜单管理是不是很简单又直观?

三. Drupal的菜单定义

Drupal的菜单定义,开发中常用的有:MENU_NORMAL_ITEM, MENU_CALLBACK, MENU_LOCAL_TASK, MENU_DEFAULT_LOCAL_TASK

其中MENU_NORMAL_ITEM会出现在导航菜单中,而MENU_CALLBACK不会。

MENU_LOCAL_TASK是定义tab式菜单,比如 myhome/num, myhome/num/creat, myhome/num/viewlist 这三个菜单如果都定义成MENU_LOCAL_TASK,那么后面两个的路径因为是第一个路径的自路径,所以会出现在第一个菜单的下面,以tab样式显 示。

若“我的号码”菜单定义成MENU_DEFAULT_LOCAL_TASK了,那么点击“号码”菜单,它会是激活状态,但是注意哦,“号码”菜单也是有 callback函数的,并不是默认调用"我的号码"菜单的callback。

四. 数据库备份

Backup(全称:Backup and Mrigratc)模块可以帮助你,只把有用的表的数据做备份,放弃了那些cache之类的表数据,这样备份出来的sql文件就不会太大了。可以选择下载 备份的文件或者是在服务器上的置顶目录保存。

用Backup模块,就不能不用poormanscron模块,它会自动运行cron,然后backup就会定时备份数据库。

五. 开发中,善用t(), l()和url()函数。

t(‘myname’) 函数可以让字符串可以被翻译。

l('link text', 'link url') 函数是定义一个a链接元素,这比直接写一个a元素要有效率的多了。

url('url') 函数通常用来定义系统的相对路径,比如node/8之类的,物理文件的路径还是用 前面加:$base_path.path_to_theme()的方法。

关于路径函数,和l()函数的具体使用事项,请访问 http://www.incollege.cn/node/162 以获取更多详细内容。

六. CSS文件的优先级问题

这取决于在主题info文件里 css文件的定义顺序,一般的主题通常会把style.css放到最后,覆盖样式的时候就在style里写。

七. Captcha模块的表单配置

在配置使用验证码的表单id时,注意表单的id填写时,要把 - 写成 _ 。

比如 form-id 要写成 form_id

八. 中文名附件上传后文件名出错

用Transliteration模块,上传附件时可以改名字,支持中文,比如中国.png 会被改成 zhong_guo.png。

而却这个模块和pathauto配合使用,可以把url的汉字变成拼音,最后是这种形式 drupal-seo-xin-de

这个形式有利于SEO。但是注意:好像英文系统不支持这个功能,因为我这个博客是英文的,没出现结果...

另外介绍一些关于附件上传管理,文件上传管理的模块,很不错哦! http://www.incollege.cn/node/188

九. ckeditor的调用位置配置

一般情况下,我们在特定内容类型里使用编辑器就可以了,包括创建和编辑两种状态。

story@node/add/story.edit-body
story@node/*/edit.edit-body
news@node/add/news.edit-body
news@node/*/edit.edit-body

以上是针对某些内容类型而设置,若针对全部节点设置:

*@node/add/*.edit-body
*@node/*edit.edit-body

十. 如何让 mission 在各页面都显示?

在输出middsion之前加句:

$mission = theme_get_setting('mission', false);

这样就可以在每个页面见到 mission 啦!

十一. 如何实现用户头像剪裁?

没看到而已兄的这篇介绍之前,还真是有想过这个功能如何做,认为一定会很复杂。没想到已经有前辈写了模块,感动!就是 drupal avatar 模块,真的很好用,而且没有什么复杂的配置。

原文介绍 http://www.eryi.com/blogs/35891

十二.一个函数,如果带参数,为防止出现调用时不传参引起的警告:

warning: Missing argument 2 for...

应该给参数一个默认值。如:function post_resume_form(&$form_state, $rid = null)

十三.自定义表单,提交函数会自动找到名为 form_name_submit的函数执行,所以如果提交时只有一个submit函数,就无须指定,只要在form函数名后面加一个_submit作为 提交函数名即可。

若要指定,则要考虑到submit属性是个数组,必须这样写:

$form['#submit'] = array('apply_job_form_submit'); 或者:$form['#submit'][] = 'apply_job_form_submit';

注意,指定了submit之后,就不会再自动找到form_name_submit函数执行了,只按照自定义的submit函数执行。

未完待续......

参与评论

游客评论不支持回复他人评论内容,如需回复他人评论内容请