Drupal 7 开发内部培训资料, 分头诗人

猪跑去牛背山了。。。

2013年9月15日,猪跑上牛背山了。

http://www.mafengwo.cn/i/2857176.html

 

Drupal 下非常炫耀的超级菜单(多列菜单导航)集合。

经常看到一些网站的导航非常酷炫,如下拉的二级菜单是多列的,带图文排版的,或者是有菜单文字介绍的等等,这样的下拉菜单,Drupal 是否可以实现呢?

答案是肯定的,drupal 有不止一个模块能实现这样的超级菜单(多列菜单导航)。

Drupal7主题开发教程 - 使用主题预处理函数为模板添加变量

发现一篇drupal7关于添加自定义模板变量的文章,对像我这样的初学者很有帮助,分享下~原作者:老梁

 

最近有好几位读者给我发了电子邮件,说自己想学Drupal主题开发,希望我能写一些这方面的文章。好吧,那就满足广大读者的要求,抽空写几篇吧。毕竟读者是博客成功的基础嘛^_^

当大家打开Drupal的模板文件时,可以发现很多PHP变量。在很多时候,模板默认提供的这些变量有可能无法完全满足我们的需求,这时我们就需要为模板文件添加自己的自定义变量了。该怎么做呢?这就要用到Drupal的主题预处理函数了。

下面我举一个Drupal主题预处理函数THEME_preprocess_HOOK(&$variables)的例子,来说明这一问题,例子非常简单,而且没有什么实用价值,主要用于说明解决问题的思路,大家掌握之后可以举一反三。

首先我们在自己主题的文件夹下面创建一个template.php文件,在其中添加下列代码。

 

function mytheme_preprocess_page(&$variables) {
  $variables['custom_text'] = t('嘿!你好!预处理函数!');
}


下面我来详细解释一下这段代码:在上述代码中函数的mytheme字段是主题的名字;page字段是预处理函数所对应的模板文件去掉扩展名之后的名字,也就是主题钩子的名字,即:指明本函数应用于page.tpl.php模板文件。$variables变量是一个数组,我们为它自定义了一个键custom_text,这个键的名字就是我们所创建的新变量的名字了,即:我们创建的新变量名为——$custom_text。然后,我们为这个变量赋予一个字符串‘嘿!你好!预处理函数!’,作为它的值。

需要特别指出的是:翻译函数t()原则上只能使用英语,我之所以使用汉语,只是为了让大家看起来方便。当大家开发实际Drupal项目时,请务必使用英语。

好了,现在变量已经有了,下面我们就可以在page.tpl.php文件中使用它了。打开page.tpl.php文件,在希望的位置键入如下代码:


 

print $custom_text;


然后清理缓存,在浏览器中打开网站的页面,你将会发现‘嘿!你好!预处理函数!’这段字符串。如果没有发现,也不要着急,可能是下面两个原因:

如何在node概要(teaser)页面显示多值字段的第一个值

在node的teaser页面,多值的图像字段是一起显示出来的,非常的影响画面的美观。那么如何让它只显示指定的一个或指定个数呢?

一、通过模板建议的方法

假设某一类型的node,它的多值图像字段名为field_product_image,那么我们就在当前主题的TPL目录中新建一个模板文件:field--field_product_image.tpl.php,它的内容如下:

在Drupal 7创建一个新的webform元素.-- 滑动条。

有时候Webform默认字段类型并不能满足我们,我们希望他们有一些新的元素,如滑动条。下面将告诉你如何实现。

 

 

定义新的webform组件

首先你需要的是自定义一个模块。
定义一个新字段类型/组件需要使用钩子hook_webform_component_info()。本指南将通过使用jQuery UI添加一个新的滑块组件。

使用hook_custom_theme实现根据不同的条件显示不同的主题

可以根据不同的条件显示不同的主题。比如根据用户的角色的不同,ip地址的不同。

自定义一个模块,实现hook_custom_theme

function YOURMODULE_custom_theme() {
  if (ip_address() == '192.168.5.212') {
    return 'THEME_NAME';
  }
}

或者可以使用views的vid 做不同主题,也可以根据角色的不同而改变主题,还有很多很多需要自己慢慢摸索。。。非常强大好用的模块。赶紧试一下。">ThemeKey,ThemeKey Properties模块实现

Drupal 7 通过编程方式实现节点以评论数排序。

通常一个节点是对应多个留言的,节点是在node表,留言是在comment表。 node 表并没一个保存留言数的字段,所以只能通过count的方式实现。 下面sql语句是可行的,

*
SELECT n.nid,COUNT(c.cid) AS countc FROM node n LEFT JOIN COMMENT c ON  n.nid = c.nid
*

但如何通过db_select 实现呢?需要用到addExpression。下面是例子。

drupal 7 通过编程方式设置点击子菜单的时候,父菜单自动高亮。

在默认的drupal 菜单中,点击了子菜单后,高亮的样式自动转移到子菜单,父菜单就自动取消高亮了。

但很多时候我们并不希望如此,我们更希望是当前子菜单高亮了,它的父菜单也高亮。

该怎么做呢?其实很简单,只要一个函数就可以了。

它就是menu_set_active_item()

通过他可以很方便的设置哪个菜单高亮。

这里给一个简单例子:

menu_set_active_item('user/' . $user->uid);

这代码如果生效的话,用户信息页就永远处于高亮状态了。

12个最佳的幻灯片模块

幻灯片是网站最重要的一个部分。当你访问一个网站,它基本上是首先吸引你的眼睛的。它足够大,有很多很酷的过渡效果。在这篇文章中,我收集一些最好的Drupal幻灯片模块,并跟大家一一介绍。

有很多Drupal幻灯片模块,然而,这里我只介绍高使用率的模块,并且正在积极开发和支持Drupal 7。我下载并测试他们看看他们的优缺点是什么。

1. View slideshow

这无疑是在Drupal最受欢迎的幻灯片模块。在大多数我们的Drupal主题,都使用View slideshow。通过view slideshow,你可以放任何内容(不只是图片)。它是基于jQuery,它是高度可定制:你可以为每个视图选择幻灯片设置。

例子: http://demo.symphonythemes.com/drupal7/yali

下载: http://www.drupalla.com/project/views_slideshow

使用: 170'000+

 

2. Flex Slider

在最近的项目,我倾向于采用此模块作为幻灯片视图。它看起来类似于Views slideshow,但却更加先进,它能在移动设备上支持手指划动换图,非常酷。使用这个模块,您可以在移动设备得到更好的用户体验。

如何快速查找Drupal表单的Form ID?

在开发Drupal网站的过程中,我们经常需要使用hook_form_alter(&$form, &$form_state, $form_id)或hook_form_Form_ID_alter(&$form, &$form_state)两个函数对Drupal的表单进行修改,以满足我们实际应用的需求。这2个函数有以下一些功能:

1、修改表单的labels、descriptions及其他属性
2、通过改变#weight改变元素在表单中的先后顺序
3、将一些元素用<div>或者<fieldset>包裹(wrapper)
4、隐藏或移除一些不必要的元素
5、为表单添加一些markup(标签)
6、为表单加上自己写的验证函数(例如加在第一个:array_unshift($form['#validate'], 'new_validate');)
6、等等等等等等

例如:下面这段语句就是将搜索表单的按键改成图形的,search_block_form就是这个搜索表单的Form ID(下面代码摘自老梁的mydrupal,老农【老农是antims的外号】稍微修改了一下)

function  主题名_search_block_form_alter(&$form, &$form_state) {
    $form['search_block_form']['#size'] = 30;
    $form['actions']['submit']['#value'] = t('Go'); 
    $form['action']['submit']['#type'] = 'image_button';
    $form['action']['submit']['#src'] = drupal_get_path('theme', '主题名') . '/images/search.png';
    $form['action']['submit']['#attributes']['class'][] = 'my-search-button';
}

 

从上面代码可以看出,修改一个Drupal表单,最重要的就是要知道它的Form ID。那么怎么才能快速查找它呢?
老农为您介绍最最方便的方法:

1、安装Firefox浏览器

2、安装web Developer插件

页面

订阅 RSS - 博客