当前位置

Drupal网站用Views模板来替代Views PHP修改字段内容

James Qi 在 2016年10月20日 - 18:21 提交
内容摘要:以前Drupal网站中遇到需要对Views的输出进行一些变换的时候,一般是通过安装Views PHP这个模块,在Views中添加Global PHP字段,在其中设置读取什么值、进行什么变换、输出什么内......

  以前Drupal网站中遇到需要对Views的输出进行一些变换的时候,一般是通过安装Views PHP这个模块,在Views中添加Global PHP字段,在其中设置读取什么值、进行什么变换、输出什么内容,这个方式很早就开始用了,Drupal 6和Drupal 7都用过。但缺点是设置麻烦,还可能会引起负载的升高。

  最近在调试一个新的网站中就遇到数据量大的时候,服务器报500错误,甚至导致阿里云服务器死机的情况。检查后发现都是与Views相关,先安装了Views PagerLite来减少MySQL的Count指令,但依然有不少内存不足的报错。

  后来在Drupal官方网站上找到views-view-field.tpl.php的说明,按照这个来进行配置、修改,可以达到与Views PHP一样的效果,但不会一起负载增高,真是一个好办法!

  详细说明请看:views-view-field.tpl.php


  2016年11月11日补充原始模板代码为:

<?php

/**
 * @file
 * This template is used to print a single field in a view.
 *
 * It is not actually used in default Views, as this is registered as a theme
 * function which has better performance. For single overrides, the template is
 * perfectly okay.
 *
 * Variables available:
 * - $view: The view object
 * - $field: The field handler object that can process the input
 * - $row: The raw SQL result that can be used
 * - $output: The processed output that will normally be used.
 *
 * When fetching output from the $row, this construct should be used:
 * $data = $row->{$field->field_alias}
 *
 * The above will guarantee that you'll always get the correct data,
 * regardless of any changes in the aliasing that might happen if
 * the view is modified.
 */
?>
<?php print $output; ?>

  修改后的views-view-field--country_code.tpl.php代码示范:

<?php
if ($view->name == 'continent_english' && $view->current_page == 'page_1' && isset($row->{$field->field_alias})) {
  $value = $row->{$field->field_alias};
  $country_code = $value;
  $country_name_english = country_code_name($country_code);
  $country_name = t($country_name_english);
  $flag = country_code_flag_16($country_code);
  $output = "$flag $country_code ($country_name)";
  print $output;
} else {
  print $output;
}
?>

  说明:先根据$view->name和$view->current_page确定view以及page,然后读取country_code字段的值,变换成需要的格式再输出。

  更多$view、$field、$row的key如下:

$view
    db_table
    base_table
    base_field
    name (确定view用)
    vid
    description
    tag
    human_name
    core
    api_version
    disabled
    editing
    args
    use_ajax
    result
    current_page (确定page用)
    items_per_page
    offset
    total_rows
    exposed_raw_input
    old_view
    parent_views
    is_attachment
    current_display
    query
    display_handler
    display
    style_plugin
    style_options
    row_index
    override_url
    override_path
    base_database
    field
    argument
    sort
    filter
    relationship
    header
    footer
    empty
    table
    type
    export_type
    executed
    built
    build_info
    attachment_before
    attachment_after
    dom_id
    relationships_fixed
    localization_plugin
    inited
    build_sort
    plugin_name
    build_time
    execute_time
$field
    field_alias (就是字段名称、模板文件名中的country_code)
    aliases
    original_value
    additional_fields
    view
    query
    handler_type
    table_alias
    real_field
    relationship
    options
    definition
    is_handler
    localization_keys
    table
    field
    position
    last_render
    last_render_text
    last_tokens
$row
    ipshu_ip2location_lite_asn_asn ($data = $row->ipshu_ip2location_lite_asn_asn, 更简单的办法是$data = $row->{$field->field_alias})
    ipshu_ip2location_lite_asn_as

 

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符