欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

views 自定义 php 代码 views_php 可以计算某个字段的和 有大用

image.png

image.png


image.png




用法

最后更新于 
2018年12月11日

在视图中添加全局PHP字段。

以下是视图过滤器字段中使用的PHP代码示例。

$nid = db_query('SELECT field_reference_nid FROM `field_data_field_reference` WHERE entity_id = ' . $data->nid)->fetchColumn();
if (!isset($static[$job_nid])) {
  $uid = db_query('SELECT uid FROM `node` WHERE nid = ' . $nid)->fetchColumn();
  $static[$nid] = $uid;
}
global $user;
return $user->uid != $static[$nid];

不要重复使用上面的代码。这只是测试Views PHP的一个快速示例。

打开“可用变量”部分以查看提供给代码的数据。您可以通过将字段添加为视图中的字段来向$ row变量添加字段。如果您不希望它们显示在视图中,请使用视图选项将其从显示中排除。

使用$ static变量将数据从一行传送到另一行。在该示例中,我读取数据库一次以从相关节点获取uid并存储子序列行的每个结果。在我的测试用例中,每个条目重复使用十次或更多次。

db_query是在D7中读取数据库的最快方式,并且不会占用整个节点的内存缓存。对于某些数据查找,您可能会发现这种类型的PHP比连接更快。

如果您开始使用这样的大量代码来查找相同的数据,您可能需要添加模块或节点引用或其他技巧来自动化该过程,而不是在视图中使用PHP。这种类型的代码只是让东西工作的快捷方式。对于我的例子,我最终将其转换为提供过滤器的模块。

可用变量

在添加一些字段之前,我的示例过滤器中的可用变量列表。

  • $ view:视图对象。

  • $ handler:处理程序对象。

  • $ static:一个可用于存储每行可重用数据的变量。//这个可以计算多行的数据的和 

  • $ row:包含从数据库中检索的记录(例如$ data-> nid)。//这个可以计算一行之内的某些列的和

  • $ row-> title:内容:标题

  • $ data:包含从数据库中检索的记录(例如$ data-> nid)。//这个可以计算一行之内的某些列的和

在添加一些字段后,我的示例过滤器中的可用变量列表。

  • $ view:视图对象。

  • $ handler:处理程序对象。

  • $ static:一个可用于存储每行可重用数据的变量。

  • $ row:包含从数据库中检索的记录(例如$ data-> nid)。

  • $ row-> title:内容:标题

  • $ row-> field_name:内容:名称

  • $ row-> field_phone:内容:电话

  • $ row-> field_text:内容:文字

  • $ row-> field_ref_number:内容:参考。没有

  • $ row-> field_short_description:内容:简短说明

  • $ data:包含从数据库中检索的记录(例如$ data-> nid)。

在Drupal 6中,$ row-> field_goes_here将返回Drupal 7中字段的实际数据,它返回字段的键值(即nid或tid)。对于一些习惯在D6中使用PHP视图的用户来说,这可能会让人感到困惑。要进一步深入研究,可能有助于测试print_r($ data); 查看生成的值。dalearyous的教程中所述 $ data-> field_your-field-goes-here ['0'] ['raw'] ['value']; 效果很好。因此,如果您有一个名为field_account_name的字段,则$ data-> field_field_account_name将返回您期望的值。

性能

如果视图PHP在处理代码之前检索了所有数据,那么您的视图将会变慢并且可能会大幅减慢速度。D7版本仅显示视图读取的数据,而不显示任何其他内容。您有机会选择检索的数据。

如果需要节点中的所有数据,节点负载可能会有效。当您只需要几个字段时,节点加载可能会浪费大量时间来处理包含许多字段的内容类型。实体函数为您提供了一种只读取所需数据的方法,并且值得将其视为检索所需额外数据的方法。

检索额外数据的更简单方法是在视图中选择数据并从显示中排除数据。视图负责检索数据。当您需要每行或几乎每行的数据时,这很有效。如果您只需要一小部分行的额外数据,请查看实体方法。

来自  https://www.drupal.org/node/1686948

普通分类: