从多列字段API小部件创建单个字段 -- 7 领域 和 views 领域 和 entities 领域 drupal 相关 的问题

Creating individual fields from a multi-column Field API widget


1
vote

问题

中文

此引用地址菲尔德和视图模块。

我希望扩展视图支持与位置模块这样的地址域模块。其中一些额外的领域是,位置模块可用的是国家,经度和纬度,由自己和邻近或距离过滤器和排序。

我是添加了经度和纬度列到地址域模块。

位置模块的数据库在Drupal 7中相当直接向前,但未使用D7字段API构建。

addressfield模块是使用字段API构建的,并且使用视图,它具有内容:字段可用,以及基于AddressField数据库表中的每个列的参数,排序和过滤器。视图仅提供单个字段上的格式化。

这很好,因为它同样容易将格式化器添加到字段API模块,因为它是主题视图。所以我可以制作一个只显示纬度或经度的格式化器。也许更好,我可以制作一个格式化程序,它显示纬度和经度作为用于openLayers地图的WKT点。

但是,我需要的是一个接近过滤器,所以我正在阐述如何在不太直接的视图中扩展字段API的功能。

是否有用于延长可用作示例的字段API的特定案例或模块的文档?

我认为逻辑的事情是使用 hook_field_views_data_alter() 。这是尝试的代码,我不确定为什么它不起作用。

  function addressfield_field_views_data_alter (&$result, $field) {   if (array_key_exists('field_data_field_address', $result)) {     if ($result['field_data_field_address']) {        $columns = array();       $columns = array(         'field_address_administrative_area',         'field_address_country',         'field_address_lat',         'field_address_lng',         'field_address_locality',         'field_address_postal_code',         'field_address_premise',         'field_address_thoroughfare',       );        $add_fields = array('entity_type', 'delta', 'language', 'bundle');       foreach ($result['field_data_field_address'] as $column => $data) {         if (in_array($column, $columns)){           $result['field_data_field_address'][$column]['field'] = array(             'field' => $column,             'table' => 'field_data_field_address',             'handler' => 'views_handler_field_field',             'click sortable' => TRUE,             'field_name' => $column,             'additional fields' => $add_fields,              'entity_tables' => array(               'node' => 'node',               'node_revision' => 'node',             ),             'element type' => 'div',             'is revision' => FALSE,             'entity id' => 'nid',             'base table' => 'node',           );            $result['field_data_field_address'][$column]['group'] = 'Content';         }       }     }   } }   
英文原文

This references the Addressfield and Views modules.

I would like to have extended Views support for the Addressfield module like the Location module does. Some of the extra fields that the Location module makes available are Country, Longitude, and Latitude by themselves and Proximity or Distance filters and sorts.

I've added longitude and latitude columns to the Addressfield module.

The database for the Location module is fairly straight forward in Drupal 7 but not built using the D7 Field API.

The Addressfield module is built using the Field API and with Views it has a Content: field available and also arguments, sorts and filters based on each of the columns in the Addressfield database table. Views only offers a choice of formatters on a single field.

This is fine because it's just as easy to add a formatter to a Fields API module as it is to theme a view . So I can make a formatter that only shows latitude or longitude. Perhaps, better yet, I can make a formatter that displays the latitude and longitude as a WKT point to be used for an OpenLayers map.

However, what I need is a proximity filter so I'm setting out how to extend the Field API's functionality in Views which isn't very straight forward.

Is there documentation available for the particular case or modules that extend the Fields API which can be used as examples?

I thought the logical thing to do was use hook_field_views_data_alter(). Here is the attempted code and I'm not sure why it doesn't work.

function addressfield_field_views_data_alter (&$result, $field) {   if (array_key_exists('field_data_field_address', $result)) {     if ($result['field_data_field_address']) {        $columns = array();       $columns = array(         'field_address_administrative_area',         'field_address_country',         'field_address_lat',         'field_address_lng',         'field_address_locality',         'field_address_postal_code',         'field_address_premise',         'field_address_thoroughfare',       );        $add_fields = array('entity_type', 'delta', 'language', 'bundle');       foreach ($result['field_data_field_address'] as $column => $data) {         if (in_array($column, $columns)){           $result['field_data_field_address'][$column]['field'] = array(             'field' => $column,             'table' => 'field_data_field_address',             'handler' => 'views_handler_field_field',             'click sortable' => TRUE,             'field_name' => $column,             'additional fields' => $add_fields,              'entity_tables' => array(               'node' => 'node',               'node_revision' => 'node',             ),             'element type' => 'div',             'is revision' => FALSE,             'entity id' => 'nid',             'base table' => 'node',           );            $result['field_data_field_address'][$column]['group'] = 'Content';         }       }     }   } } 
        

回答列表

0
 
vote
vote
最佳答案
 

这是解决方案。

  /** *  Implements hook_field_views_data_alter *  * @param mixed $result * @param mixed $field */ function addressfield_field_views_data_alter (&$result, $field) {   if (array_key_exists('field_data_field_address', $result)) {     $result['field_data_field_address']['field_address_country'] += array(       'title' => t('Country'),       'help' => t('The Country name of the field'),       'field' => array(         'handler' => 'addressfield_views_handler_field_country',         'click sortable' => TRUE,       ),     );   } }   

或者如果要在表中不使用诸如field_address_country的表中的实体字段,而是别名,则可以将字段和表属性添加到这样的字段数组中。

  function addressfield_field_views_data_alter (&$result, $field) {   if ($field['type'] == 'addressfield')) {       $result['field_data_field_address']['country'] = array(         'title' => t('Country'),         'group' => 'Bad Ass',         'help' => t('The Country name of the field'),         'field' => array(           'field' => 'field_address_country',           'table' => 'field_data_field_address',           'handler' => 'views_handler_field',           'click sortable' => TRUE,         ),       );    } }   
 

Here is the solution.

/** *  Implements hook_field_views_data_alter *  * @param mixed $result * @param mixed $field */ function addressfield_field_views_data_alter (&$result, $field) {   if (array_key_exists('field_data_field_address', $result)) {     $result['field_data_field_address']['field_address_country'] += array(       'title' => t('Country'),       'help' => t('The Country name of the field'),       'field' => array(         'handler' => 'addressfield_views_handler_field_country',         'click sortable' => TRUE,       ),     );   } } 

Or if you want to not use a real field in the table such as field_address_country but to instead alias a field you can add a field and table attribute to the field array like this.

function addressfield_field_views_data_alter (&$result, $field) {   if ($field['type'] == 'addressfield')) {       $result['field_data_field_address']['country'] = array(         'title' => t('Country'),         'group' => 'Bad Ass',         'help' => t('The Country name of the field'),         'field' => array(           'field' => 'field_address_country',           'table' => 'field_data_field_address',           'handler' => 'views_handler_field',           'click sortable' => TRUE,         ),       );    } } 
 
 

相关问题

7  将块添加到区域  ( Add a block to a region ) 
如何使用苏打将一个块添加到区域? 我正在使用drupal 7.0和疏士4.3。 ...

1  我可以通过视图2公开注册表格2吗?  ( Can i expose the signup form through views 2 ) 
我正在使用 signup 和视图在drupal 6中(我无法安装drupal 7),我创建了一个列出用户可以注释的所有节点的视图。 现在我想使用户能够注册其中一个节点,而无需强制它们向节点本身导航,并且我需要公开虽然查看表单(或许使用PHP字段)。我已经搜查过这个,但大多数评论都是几年的。此外,我宁愿不熟悉PHP。 ...

1  基于日期允许角色权限到内容类型  ( Allowing role permissions to a content type based on the date ) 
我想允许某个角色可以在两个日期之间添加某个内容类型的新内容。在这些日期之前或之后,角色不应该能够创建此内容类型的新内容。 是可以通过耳核核心或任何模块?我还没有找到任何关于它的东西。 ...

3  覆盖“显示选择选项”以在反向字母顺序中查看它们  ( Override display select options to see them in reversed alphabetical order ) 
谁可以建议我如何覆盖分层选择模块以显示反向字母顺序的选择选项? ...

6  有没有办法使评论模块在评论需要批准时将管理员电子邮件发送给管理员?  ( Is there a way to make the comment module email the administrators when a commen ) 
我想在出版前需要管理员批准的网站上进行评论时收到通知;基本上,我想知道什么时候在批准队列中出现新的东西。我看不到任何明显的设置。 ...

19  使用类构建模块的最佳练习  ( Best practice for building modules using classes ) 
我希望开始建立模块作为课程,现在懒惰/自动负载在Drupal 7中,我喜欢看一些正在做出很大工作的模块(贡献或核心)。 是否有一种创造性的方式,用于将类作为钩子集成?我是否将每个功能实现为CTools插件? 应该注意到D7有新的 files[] files[] .info .info for auto / ...

2  页面中的几种变体  ( Several variants in a page ) 
是否可以在页面中使用多个变体? 在页面中,我只显示了一个变体。 ...

3  如何在视图中显示自定义用户配置文件字段?  ( How to show custom user profile fields in a view ) 
在drupal 7中,我使用 profile2 (7.x-1.0-beta1)模块添加自定义字段,如"作者名称" 等到用户的个人资料页面。如何在视图(7.x-3.x-dev)中提取这些自定义字段?所有其他自定义CCK字段显示在视图的选择列表中,但不是添加到用户配置文件页面的选择列表中。 ...

4  如何更改视图字段格式下拉菜单  ( How to alter the views field format drop down menu ) 
我使用视图导出一些XML馈送。其中一个字段需要如下所示: <image>http://example.com/path/to/myimage.jpg</image> 我在cck字段中存储我的图像。在视图中选择该字段时,这些是提供的选项: 我不需要预告片,完整节点,可编辑的东西或html格式化链接,只是...

5  如何使用规则模块标记刚刚创建的节点?  ( How to use the rules module to flag a node that has just been created ) 
我需要自动标志在发布后的节点。将标记某个内容类型的所有节点。 为了解决这个问题,我已经安装了规则模块希望我能成为能够自动标记创建的节点。规则模块不需要预装标志动作。 是否可以标记刚刚创建的项目? ...

6  第三方模块应该在“结构”和“配置”之间选择哪种菜单?  ( Which menu should a third party module choose between structure and configur ) 
我注意到一些模块更喜欢在"结构" 下添加它们的菜单项,而其他模块更喜欢将它们添加在"配置" 下。 我认为选择"结构" 的原因是因为菜单项与某种"实体" 有关,但我注意到规则正在"配置" 下添加其菜单项。 反之亦然,视图和标志将其菜单项放在"结构" 中。 然后在决定菜单时使用时使用的标准填充其菜单项? "结构" 菜单仅...

3  有没有办法了解从PHP代码知道视图类型?  ( Is there a way to know the view type from php code ) 
有没有办法了解从PHP代码知道视图类型(页面或块)? if (views type is block) { echo "This is a block view."; } elseif (views type is page) { echo "This is a page view."; } ...

1  如何在Drupal 7中删除旧的民意调查/结果?  ( How can i remove old polls results in drupal 7 ) 
如何将链接删除到旧民意调查并导致Drupal 7?我解除匿名用户的视图结果,但他们仍然可以查看结果。我想删除旧民意调查和轮询结果的链接。是否有可能这样做?如果答案是肯定的,则我应该添加哪个代码到template.php删除这些链接? ...

12  意见3无法识别声明的处理程序。为什么不?  ( Views 3 doesnt recognize a declared handler why not ) 
在模块/地址/地址菲尔德.module我有: /** * Implements hook_views_api(). */ function addressfield_views_api() { return array( 'api' => 3, 'path' => drupal_get_p...

4  删除文件域值时如何保留底层文件  ( How to keep underlying file when deleting a filefield value ) 
我的内容类型与文件域(特别是图像)。当删除其中一个值时,Drupal也删除了底层文件(只要没有其他节点引用相同的文件)。 我不希望删除底层文件,我希望它们保留在文件系统中。是否有任何钩子或其他技术,我可以用来确保删除其文件场值后仍然存在? ...

3  单个文档,用于下载的多个文件型:如何管理?  ( Single document multiple filetypes for download how to manage ) 
我想将多个文档上传/附加到书节点。每个文档都将以多种文件格式提供,例如: 报告2010.pdf 报告2011.rtf 报告2011.doc 协议11.pdf 协议11.rtf 协议11.doc 鉴于此,为了: 提供了一个明智的上传界面(如filefield),允许上传无限数量的文件。 呈现这些文件以...

4  将标志链接转换为复选框  ( Convert a flags link into a checkbox ) 
是否有一种方法可以转换标志在视图中复选框中的链接?我尝试了标志形式模块,但它没有工作(至少不是在视图中)。我介绍了标志在显示类型功能请求中添加复选框。讨论点使用CSS,JavaScript或黑客标志模板文件。还有其他方法吗? 我对使用JavaScript做到这一点不利,但我很少了解它。 ...

10  如何删除“用户登录”块?  ( How do you remove the user login block ) 
我知道这是一个简单的问题,但我已经搜索了太久了。 我只想删除用户登录框,以便所有访问网站,Apart管理员访问权限,将是匿名的。我们不希望用户在系统上创建帐户。 ...

1  字段定义的权限  ( Permissions defined by fields ) 
我有一些具有状态字段的内容。我想允许用户使用相同状态删除此内容。 我可以在drupal中实现这一点吗? 我可以用php代码实现它吗? ...

2  Drupal作为饲料聚合器  ( Drupal as feed aggregator ) 
我有兴趣在我的Drupal网站上用内置饲料聚合器聚合帖子。 饲料聚合器可以基于良好的类别进行不同的馈送;我的问题是,当用户创建一个帖子时,它们不能同时分配一个类别。他们稍后必须通过Feed聚合器手动查找帖子并设置类别。 有没有办法允许用户在创建帖子时分配类别? ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.