作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
由于前面,我们新增了编辑、删除两个链接,所以我们可以将字段“Breadcrumb: Breadcrumb ID (Breadcrumb ID)”和“Global: Custom text (Edit)”删除掉了。同时,将每页显示的10条,改为显示30条;设置“无结果行为”,无结果时显示信息“No breadcrumbs available.”;然后保存视图。
我们在实际的项目中,也经常需要将配置好的Views导出成代码的形式点击这里的导出链接即可
系统会为我们自动生成好代码。如下图所示:
我们将这里的代码复制下来,然后打开breadcrumb2.views.inc文件,在里面在里面添加钩子函数breadcrumb2_views_default_views,中间的部分,就是我们复制过来的:
/**
* Implements hook_views_default_views().
*/
function breadcrumb2_views_default_views() {
$view = new view();
$view->name = 'breadcrumbs';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'breadcrumb';
$view->human_name = 'Breadcrumbs';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['use_more_always'] = FALSE;
$handler->display->display_options['access']['type'] = 'none';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['pager']['options']['items_per_page'] = '30';
$handler->display->display_options['pager']['options']['offset'] = '0';
$handler->display->display_options['pager']['options']['id'] = '0';
$handler->display->display_options['pager']['options']['quantity'] = '9';
$handler->display->display_options['style_plugin'] = 'table';
$handler->display->display_options['style_options']['columns'] = array(
'bid' => 'bid',
);
$handler->display->display_options['style_options']['default'] = '-1';
$handler->display->display_options['style_options']['info'] = array(
'bid' => array(
'sortable' => 0,
'default_sort_order' => 'asc',
'align' => '',
'separator' => '',
'empty_column' => 0,
),
);
/* No results behavior: Global: Text area */
$handler->display->display_options['empty']['area']['id'] = 'area';
$handler->display->display_options['empty']['area']['table'] = 'views';
$handler->display->display_options['empty']['area']['field'] = 'area';
$handler->display->display_options['empty']['area']['empty'] = TRUE;
$handler->display->display_options['empty']['area']['content'] = 'No breadcrumbs available.';
$handler->display->display_options['empty']['area']['format'] = 'filtered_html';
/* Field: Breadcrumb: path */
$handler->display->display_options['fields']['path']['id'] = 'path';
$handler->display->display_options['fields']['path']['table'] = 'breadcrumb';
$handler->display->display_options['fields']['path']['field'] = 'path';
/* Field: Breadcrumb: Breadcrumb Link */
$handler->display->display_options['fields']['link']['id'] = 'link';
$handler->display->display_options['fields']['link']['table'] = 'field_data_link';
$handler->display->display_options['fields']['link']['field'] = 'link';
$handler->display->display_options['fields']['link']['click_sort_column'] = 'url';
$handler->display->display_options['fields']['link']['delta_offset'] = '0';
$handler->display->display_options['fields']['link']['separator'] = ' ? ';
/* Field: Breadcrumb: Delete Link */
$handler->display->display_options['fields']['delete_breadcrumb']['id'] = 'delete_breadcrumb';
$handler->display->display_options['fields']['delete_breadcrumb']['table'] = 'breadcrumb';
$handler->display->display_options['fields']['delete_breadcrumb']['field'] = 'delete_breadcrumb';
$handler->display->display_options['fields']['delete_breadcrumb']['label'] = '';
$handler->display->display_options['fields']['delete_breadcrumb']['element_label_colon'] = FALSE;
/* Field: Breadcrumb: Edit Link */
$handler->display->display_options['fields']['edit_breadcrumb']['id'] = 'edit_breadcrumb';
$handler->display->display_options['fields']['edit_breadcrumb']['table'] = 'breadcrumb';
$handler->display->display_options['fields']['edit_breadcrumb']['field'] = 'edit_breadcrumb';
$handler->display->display_options['fields']['edit_breadcrumb']['label'] = '';
$handler->display->display_options['fields']['edit_breadcrumb']['element_label_colon'] = FALSE;
/* Sort criterion: Breadcrumb: Breadcrumb ID */
$handler->display->display_options['sorts']['bid']['id'] = 'bid';
$handler->display->display_options['sorts']['bid']['table'] = 'breadcrumb';
$handler->display->display_options['sorts']['bid']['field'] = 'bid';
$handler->display->display_options['sorts']['bid']['order'] = 'DESC';
/* Filter criterion: Breadcrumb: path */
$handler->display->display_options['filters']['path']['id'] = 'path';
$handler->display->display_options['filters']['path']['table'] = 'breadcrumb';
$handler->display->display_options['filters']['path']['field'] = 'path';
$handler->display->display_options['filters']['path']['operator'] = 'contains';
$handler->display->display_options['filters']['path']['exposed'] = TRUE;
$handler->display->display_options['filters']['path']['expose']['operator_id'] = 'path_op';
$handler->display->display_options['filters']['path']['expose']['label'] = 'path';
$handler->display->display_options['filters']['path']['expose']['operator'] = 'path_op';
$handler->display->display_options['filters']['path']['expose']['identifier'] = 'path';
$handler->display->display_options['filters']['path']['expose']['remember_roles'] = array(
2 => '2',
1 => 0,
3 => 0,
);
$views[$view->name] = $view;
return $views;
}
最后的两行代码,是我们人工添加进来的。我们需要返回一个$views数组。我建议大家熟悉一下,这里导出的代码。我们以前在做项目的时候,有时候会遇到这种情况,一下子列出所有的条目,此时带有预览功能,系统会读取所有的条目,而条目数太大,以至于超出了PHP的内存限制,所以此时进入不了视图的编辑页面,此时我们可以将视图导出,然后修改导出后的代码,修改过后,一页显示10条记录,然后再导入这个视图的代码,就解决了问题。
此外,需要注意的是,Views无法导出特殊字符的,我们在Views里面,配置的时候,使用了“»”这个符号,导出的时候,变成了“?”,因为它是特殊字符。此时,我们可以将文件的编码格式转为UTF-8,然后将分隔符设置为“ » ”:
$handler->display->display_options['fields']['link']['separator'] = ' » ';
不过现在清空缓存,我们的代码无法被识别出来,删除链接还是删除链接,如果我们删除了刚才定义的views,就无法恢复回去。我经过很长时间的测试,调试,最后发现,如果将函数breadcrumb2_views_default_views放到breadcrumb2.module文件中来,就起作用,否则的话,就不起作用,最后,我向breadcrumb2.module文件,直接添加以下代码:
include_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'breadcrumb2') . '/views/' . 'breadcrumb2.views.inc';
就是当加载module文件的时候,自动的加载breadcrumb2.views.inc,现在我们清除缓存,就只能revert(恢复)我们的视图了,无法删除它了。
我检查了model的代码,我的代码和它基本上完全一样的,但是在model里面,就不需要这个include_once。以前导出代码的时候,也从来不用这个的,Views会自动的加载这个文件。我不知道哪里出了问题。这个问题,就留在将来解决吧,反正现在问题不大。
我们这里只需要记住,将导出的代码放到hook_views_default_views的这个钩子函数中,并在函数最后,增加以下两个代码即可:
$views[$view->name] = $view;
return $views;