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

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插件

Drupal 页面请求的处理过程

1. Someone fires a request to your webserver. They might get a cookie if they've already logged into the site.
2. The server gets the request. It goes to .htaccess which says everything should go to index.php
3. index.php loads the APIs and gets them ready to handle the request
4. The Menu API which was loaded looks up the paths that different modules have registered that they handle.
5. The module gets the request and fires hooks to see whether any module wants to help while it's building the page.
6. The module returns some info back to the menu system.
7. If the everything looks good, it figures out which theme is active and hands off the raw data to the theme layer.
8. That gets kicked back to Drupal.
9. That gets kicked back to the web server, which kicks it back to the user.

页面

订阅 RSS - 博客