You are here

7.13查看面包屑实体

admin 的头像
Submitted by admin on 星期三, 2015-09-02 08:20

作者:老葛,北京亚艾元软件有限责任公司,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帮助我们做了很多工作,省了不少事。


Drupal版本: