在节点上“更改” -- 7 领域 和 users 领域 和 nodes 领域 drupal 相关 的问题

“changed by” on nodes


9
vote

问题

中文
  mysql> select nid, uid, created, changed from node; +-----+-----+------------+------------+ | nid | uid | created    | changed    | +-----+-----+------------+------------+ |   1 |   8 | 1336040166 | 1336046390 | +-----+-----+------------+------------+   

我想在 node 表上的"更改" 列,就像我们有"创建的" (UID字段)一样。这将跟踪谁在该节点上进行了最后一个更改。我知道这可以从 node_revision 表中派生,但这取决于为我感兴趣的内容类型启用的修订。

所以,做到这一点的最佳方式是什么?为什么默认情况下,Drupal核心不提供这一点?我认为"改变" 是一个非常标准的信息,CMS应该附加到内容。

英文原文
mysql> select nid, uid, created, changed from node; +-----+-----+------------+------------+ | nid | uid | created    | changed    | +-----+-----+------------+------------+ |   1 |   8 | 1336040166 | 1336046390 | +-----+-----+------------+------------+ 

I'd like to have an "changed by" column on the node table, exactly as we have a "created by" (the uid field). This would keep track of who made the last change on that node. I know that this could be derived from the node_revision table but this depends on the revisions being enabled for the content types I'm interested.

So, what is the best way to do this? And why doesn't Drupal core offer this by default? I thought that "changed by" is a pretty standard piece of information that a CMS should attach to content.

        
   
   

回答列表

18
 
vote
vote
最佳答案
 

我认为这会很难做到,但事实证明它相当容易。

您只需要创建一个自定义模块,该模块在安装时将列添加到节点表,实现 'cache', 'cache_bootstrap', 'cache_config', 'cache_container', 'cache_data', 'cache_default', 'cache_discovery', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'search_index', 'sessions', 'watchdog' 1 所以drupal知道新列,并在节省节点之前添加一些逻辑来提供值。

这是一个小模块,它会做这个技巧:

文件:node_table_alter.info

  'cache', 'cache_bootstrap', 'cache_config', 'cache_container', 'cache_data', 'cache_default', 'cache_discovery', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'search_index', 'sessions', 'watchdog' 2  

文件:node_table_alter.install

  'cache', 'cache_bootstrap', 'cache_config', 'cache_container', 'cache_data', 'cache_default', 'cache_discovery', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'search_index', 'sessions', 'watchdog' 3  

文件:node_table_alter.module

  'cache', 'cache_bootstrap', 'cache_config', 'cache_container', 'cache_data', 'cache_default', 'cache_discovery', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'search_index', 'sessions', 'watchdog' 4  

您可能希望添加逻辑以再次卸载删除该字段,并将索引添加到表的表中为 998876615 列(请参阅 'cache', 'cache_bootstrap', 'cache_config', 'cache_container', 'cache_data', 'cache_default', 'cache_discovery', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'search_index', 'sessions', 'watchdog' 6 ),但这应该给你一个好的地方开始。

此方法的美是您已有效地向节点添加了新属性。您将能够使用 998876617 'cache', 'cache_bootstrap', 'cache_config', 'cache_container', 'cache_data', 'cache_default', 'cache_discovery', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'search_index', 'sessions', 'watchdog' 8 s等。它好像是节点的任何其他标准属性。

上帝保佑Drupal这是如此可延长!

 

I thought this would be quite tough to do, but as it turns out it's fairly easy.

You just need to create a custom module that adds a column to the node table on install, implement hook_schema_alter() so Drupal knows about the new column, and add some logic to provide a value before the node is saved.

Here's a small module that will do the trick:

File: node_table_alter.info

name = Node Table Alter core = 7.x 

File: node_table_alter.install

function node_table_alter_install() {   // Add the new field to the node table   $field = array(     'description' => 'Stores the user id of the last user to alter the node',     'type' => 'int',     'unsigned' => TRUE   );    db_add_field('node', 'changed_by', $field); } 

File: node_table_alter.module

function node_table_alter_schema_alter(&$schema) {   // Add the new field to the schema cache   $schema['node']['fields']['changed_by'] = array(     'description' => 'Stores the user id of the last user to alter the node',     'type' => 'int',     'unsigned' => TRUE   ); }  function node_table_alter_node_presave($node) {   // Populate the changed_by column with current user's id   $node->changed_by = $GLOBALS['user']->uid; } 

You may want to add logic to remove the field again on uninstall, and add an index to the table for the changed_by column (see db_add_index()), but this should give you a good place to start.

The beauty of this method is that you have effectively added a new property to the node. You'll be able to use node_load(), EntityFieldQuerys, etc. with it as if it were any of the other standard properties for a node.

God bless Drupal for being so extendable!

 
 
         
         
1
 
vote

我猜您可以添加实体参考字段(让我们将其调用 'cache', 'cache_bootstrap', 'cache_config', 'cache_container', 'cache_data', 'cache_default', 'cache_discovery', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'search_index', 'sessions', 'watchdog' 9 )到您需要跟踪的内容类型。然后,您可以使用 drush sql-dump --structure-tables-list=cache,cache_filter,cache_menu,cache_page,history,sessions,watchdog --result-file=dump.sql 0 将用户ID保存到如下所示的节点:

  drush sql-dump --structure-tables-list=cache,cache_filter,cache_menu,cache_page,history,sessions,watchdog --result-file=dump.sql 1  

我认为也可以通过创建规则使用用户的ID更新字段。您可以阅读更多 。

 

I guess you could add a entity reference field (let's call it field_changed_by_user) to the content type you need to track. Then you could use hook_node_presave to save the user id to the node like this:

function hook_node_presave($node) {   if ($node->nid && $node->type == 'content_type_to_track_changes_for') {     global $user;     $node->field_changed_by_user['und'][0]['target_id'] = $user->uid;   } } 

I think it's also possible to update the field with the user's id just by creating a rule. You can read more here.

 
 

相关问题

1  进口推文,Blogpost,Flickr照片,幻灯片,[关闭]的好方法  ( A good way to import tweets blogpost flickr photos slideshare ) 
关闭。这个问题是基于意见的。它目前不接受答案。 想要改进这个问题?更新问题,以便通过编辑此帖的事实和引用来回答。 关闭 4年前。 ...

1  如果使用AJAX加载了评论表单,则忽略Ajax提交  ( Ajax submit ignored if comments form is loaded with ajax ) 
在D7中,我有一个自定义模块,在注释表单上启用Ajax表单。这是伟大的。 我也有注释在 commessblock 模块中使用 block_refresh 用下面的片段。这很好地展示评论和表格。但是,Ajax表单提交停止工作。 我试过呼叫 $Drupal.attachBehaviors() (如下所示)和 $Drupa...

3  自定义节点状态  ( Custom node status ) 
在 admin/content 中有"状态" 过滤器默认提供给我们: any published not published promoted not promoted sticky not sticky 我可以将这些映射直接到数据库中的 node 表格: mysql> select nid, stat...

3  视图中的位置/距离计算字段结果?  ( Location distance based calculated field in views results ) 
使用模块: drupal 7.12 意见3.3 位置3.x-dev (当然更多) 我有一个漂亮的标准视图,用户输入了距邮政编码的距离的接近过滤器,用于显示某个位置附近的商店(您的标准经销商/存储定位器搜索)。我想添加一个计算的字段(或其他东西)来显示每个商店从输入的邮政编码中的距离。此字段仅在视图中使用,...

8  查看3,语言上的上下文过滤器 - 允许多种语言  ( Views 3 contextual filter on language allow for multiple languages ) 
所以对于这个网站,我正在建立我需要能够执行以下操作。 当用户观看英语网站时显示所有英语文章 当用户在荷兰语中查看网站时,显示所有荷兰文章 - 但也是未经翻译的英语 当用户以德语查看网站时,显示所有德语文章 - 也是未经翻译的英语。 上下文过滤器,'内容翻译:语言'只允许放入一个值。这是指定的语言或全部。 但在我...

2  将查询转换为db_query_range [关闭]  ( Convert query to d7 for db query range ) 
这个问题不太可能帮助任何未来的访客;它仅与小地理区域,特定时刻及时的特定时刻或非常狭窄的情况,这些情况通常不适用于互联网的全球观众。有关帮助提出这个问题更广泛适用,请访问帮助中心。 ...

1  Mollom CAPTCHA小部件未显示在自定义表单上  ( Mollom captcha widget not showing up on a custom form ) 
d7 + mollom。我希望我的用户每次点击我网站上的 /file/123/download 如 /file/123/download 这样的链接时都会填写CAPTCHA。我正试图向我的需求弯曲Mollom Captcha,但还没有取得任何成功。 Mollom公共和私钥表示,他们已经被Mollom Server验...

2  显示菜单的子链接  ( Displaying a menus child links ) 
似乎是,默认情况下,emega和其他主题不会呈现子链接。 我已经尝试过各种模块(例如超级鱼和megamenu),但他们没有提供一个允许我主题到设计的结构。 我找到了这个页面,但它似乎没有使用 theme_links() 。 有没有一种简单的方法来启用我的所有菜单链接,并且在渲染之前仍然能够钩住它? ...

52  配置临时目录  ( Configuring the temporary directory ) 
我最近将一个站点从localhost移动到vps。我已经设法使公共和私人文件可写;但是,我不确定在哪里找到临时文件夹以及如何更改权限。我继续收到此消息: 无法复制指定的文件:// file3hl91e,因为未正确配置目标目录。这可能是由文件或目录权限的问题引起的。系统日志中有更多信息。 我正在使用Virtualm...

0  Drupal 7 - 完成在视图中嵌入观点的想法所需的建议  ( Drupal 7 advice needed to accomplish the idea of embedding a view in a view ) 
使用drupal 7 - 我的视图显示每个员工的所有项目分配。此视图正常工作,并以部门节点显示为块。 我有另一个显示页面"部门目录" 的视图。其中目录列出了诸如部门名称,地址,电话,传真,电子邮件等字段。 我尝试完成的想法是有一个部门的字段列表,然后将其列出员工分配。示例: view页面:部门: 财务部门 地址...

3  如何在分类法中向儿童展示父项条款?  ( How to show children terms of parent terms in taxonomy ) 
好的这件事是让我完全猛拉!我认为这个问题在某种程度上被问到了,但我似乎太愚蠢了,以调整我的要求。 我创建了一个名为"品牌" 的分类词汇,如此如此如此 级别1:品牌名称,如罗技,千兆字节等。 2级:产品类别如小鼠,键盘,耳机等每个品牌内。 3级:每个类别内的实际产品。 这些级别可以在必要时更深入。就像在老鼠一样,可...

1  有些麻烦AutoPath  ( Some trouble autopath ) 
我对用户路径别名有一些麻烦。我希望每个用户都有一个小页面 /member/username 。强制执行我在 user path下的设置( /admin/config/search/path/patterns )下建立( 99887665 )拼盘: member/[user:name] 。 这个似乎很好,但如果我看看联...

0  页面构建的$内容在哪里?  ( Where is the content of a page build ) 
我想将一些东西添加到我的 99887663 变量中添加到我的节点模板文件上,但在哪里组成这个变量?我假设它在template.php文件中,但具体函数归结 $content 变量的内容? ...

3  从核心模块中删除代码而不修改它(使用挂钩?)  ( Remove a code from core module without modifying itusing hooks ) 
参考我的问题< / a>关于从书页链接区域中删除"添加新注释" 链接,有没有办法在钩子的帮助下删除代码。我是实现钩子的新手。我找到了解决方案问题,但我需要更好的方法来实现它(也许是通过钩子,IDK)。 编辑 当我不得不从Core Book模块的 book-navigation.tpl.php 中发表 998...

5  如何在Drupal 7中使用Smarty  ( How to use smarty in drupal 7 ) 
我在PHP编程中有一些先前的经验,但我已经使用Smarty作为我的模板引擎,并发现易于使用。我读到Drupal正在利用Phptemplate作为模板引擎。所以,我只是想知道如何在Drupal中实现Smarty模板引擎? ...

2  清洁和简便的方法将元标记添加到我的D7网站  ( Clean and easy way to add meta tags to my d7 website ) 
我正在寻找一个简单的方法来向我的D7网站添加元标记。不是我害怕代码或任何类似的东西,而是内容经理(市场营销=&gt;你见过的最大IT Noobs)想通过使用Drupal UI来添加元标签。 我已经检查了 metatags快速 -module,但似乎这个模块只有能力添加Path-Meta标签。有替代方案吗?或者添加元标...

2  如何正确使用两个语境过滤器进行分类  ( How to properly use two contextual filter for taxonomy ) 
这是我的情况: 我有一个名为"rang" 的内容类型。 每个常量有两个具有分类术语的领域:"发行机构" 和"规范类型" 。 每个分类法都有自己的词汇。 我要查看意志: 过滤"机构A" 或"机构B" 颁发的所有"规范" 。 有两个上下文过滤器。一个用于"物质" ,第二为"规范类型" 。 如果未给出第一个参数,只需...

0  如何将链接呈现为菜单选项卡  ( How to render links as menu tabs ) 
我已创建一个生成一些链接的块。我想在网站上显示这些链接作为菜单选项卡。这是我写入内部的PHP代码。 <?php $current_url = current_path(); $param = explode("/", $current_url); $nid = $param[1]; $type ...

1  视图:重定向到默认值URL  ( Views redirect to default value url ) 
当您在视图中具有上下文过滤器时,值不在URL中,您如何使Drupal实际将浏览器重定向到您提供的默认值,以便在地址栏中反映出值? 假设您有一个公司附属公司的视图,路径是: company/affiliates/ 。如果我提供固定值,例如 998887662 ,我希望用户(=地址栏)被重定向到 company/affi...

3  是否可以忽略我上耳机网站上的错误通知?  ( Is it okay to ignore the error notices i get on a drupal site ) 
我的drupal 7网站有许多错误通知,如 注意:unsermalize()[function.unserialize]:偏移量225错误 variable_initialize()中的305字节(第943行) /site/includes/bootstrap.inc)。 或 在bootstrap.in...




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


Licensed under cc by-sa 3.0 with attribution required.