作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
首先定义菜单项:
$items['breadcrumb/%breadcrumb2'] = array(
'title' => 'Breadcrumb',
'page callback' => 'breadcrumb2_page_view',
'page arguments' => array(1),
'access arguments' => array('administer breadcrumbs'),
'file' => 'breadcrumb2.admin.inc',
);
$items['breadcrumb/%breadcrumb2/view'] = array(
'title' => 'View',
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -10,
);
这里面我们使用了通配符%breadcrumb2,当我们传递过来一个bid以后,系统会自动的调用breadcrumb2_load函数,将bid转换为相应的面包屑对象。
接下来,我们看breadcrumb2_page_view的具体实现,向breadcrumb2.admin.inc里面添加以下代码:
/**
* Breadcrumb view page.
*/
function breadcrumb2_page_view($breadcrumb, $view_mode ='full'){
return $breadcrumb->view('full');
}
清除缓存,现在访问breadcrumb/1,已经可以显示出来了,但是面包屑的属性path没有显示出来。
此时有多种解决办法,一种是实现自己的控制器类BreadcrumbController,在里面实现自己的方法:
public function buildContent($entity, $view_mode = 'full', $langcode = NULL, $content = array())
另一种,是在breadcrumb2_page_view里面,我们不调用$breadcrumb->view,然后自己去构建我们想要的内容。
function breadcrumb2_page_view($breadcrumb, $view_mode = 'full'){
// return $breadcrumb->view($view_mode);
$breadcrumb->content = array();
if($view_mode = 'full'){
$breadcrumb->content['path'] = array(
'#markup' => filter_xss($breadcrumb->path),
'weight' => -5,
);
}
//Build fields content
field_attach_prepare_view('breadcrumb2', array($breadcrumb->bid => $breadcrumb), $view_mode);
entity_prepare_view('breadcrumb2', array($breadcrumb->bid => $breadcrumb));
$breadcrumb->content += field_attach_view('breadcrumb2', $breadcrumb, $view_mode);
return $breadcrumb->content;
}
这种方式是我们自己调用field的集成。当然,如果我们熟悉$breadcrumb->view返回的数组结构的话,也可以这样编写代码:
$build = $breadcrumb->view($view_mode);
if($view_mode = 'full'){
$build['breadcrumb2'][$breadcrumb->bid]['path'] = array(
'#markup' => filter_xss($breadcrumb->path),
'weight' => -5,
);
}
return $build;
第三种办法,就是自己实现hook_ breadcrumb2_view这个钩子,这个钩子是从哪里定义的?这是Entity API模块帮助我们定义,只需要自己去实现即可,在module文件中添加以下代码,效果是一样的:
/**
* Implement hook_breadcrumb2_view().
*/
function breadcrumb2_breadcrumb2_view($breadcrumb, $view_mode, $langcode){
if($view_mode = 'full'){
$breadcrumb->content['path'] = array(
'#markup' => filter_xss($entity->path),
'weight' => -5,
);
}
}
从这里面,我们可以看到Entity API帮助我们做了很多工作,省了不少事。