Drupal:具有起始值的内容类型的自动编号字段

Posted

技术标签:

【中文标题】Drupal:具有起始值的内容类型的自动编号字段【英文标题】:Drupal: Auto number field for content-type with starting value 【发布时间】:2013-06-27 22:30:27 【问题描述】:

我需要一个对我的内容类型自动编号的字段,但从某个值开始,例如 2000。我尝试了串行字段和计算字段。无法弄清楚该怎么做。数字(使用序列字段)会自动增加,但我无法定义起始数字。

有没有办法做到这一点?

非常感谢!

【问题讨论】:

【参考方案1】:

您可以使用计算字段来做到这一点。 将计算字段添加到您的内容类型并将数据类型设置为整数。在 Computed Field (php) 文本区域中,此代码将为您工作:

if (empty($entity_field[0]['value'])) 
  $count = db_select('node')->fields('node')->condition('type', $entity->type)->execute()->rowCount();
  $entity_field[0]['value'] = $count + 2000;

这会检查是否已经为此节点设置了该字段的值,如果没有 - 它会获取该内容类型的节点总数,添加一个常量(在此示例中为 2000)并将结果设置为你的领域。

【讨论】:

【参考方案2】:

Serial Module 会生成一个名为 serial_bundlename_fieldname 的表,即如果您为 bundle ' 添加了字段名 'field_job_id' >Jobs' 然后将创建一个表 'serial_jobs_field_job_id'。

该表包含 2 个字段 'sid' 和 'nid' 'sid' 是自动递增字段。

您可以使用phpMyAdmin之类的工具并执行以下查询

ALTER TABLE serial_jobs_field_job_id AUTO_INCREMENT =2000;

这应该可能设置自动增量字段的起始值。

【讨论】:

感谢您的回答,但我使用了计算模块【参考方案3】:

我们在 Drupal 6 系统中的几种自定义记录类型上使用自定义自动编号(以下内容也适用于 Drupal 7)。为了让它发挥作用,我们使用规则模块实现了一条规则,该规则在保存记录时触发。

规则运行 ON 事件保存内容后,并应验证您是否保存了您感兴趣的内容类型。(例如,如果您要为小部件自动编号,请添加一个 IF 内容类型是小部件

对于您的操作,将 *Populate created content's 'custom_number' field* 操作放在规则上(其中 'custom_number' 是您的自动编号字段),并遵循以下示例:

$number = db_result(db_query(
    "SELECT MAX(field_custom_number_value) FROM content_type_widget"));

if(empty($number) || $number < 200)  // Replace 200 with your starting value
    $number = 200;
 else 
    $number++;


return array( 0 => array('value' => $number) );

每次保存新小部件时,系统都会运行查询以查找已分配的最大 custom_number。如果没有分配,或者分配的数字小于200,系统将分配200;否则,它将分配比当前分配的最大数量多 1。

如果您愿意,您还可以添加一行调试代码,以在发现小于所需最小值的数字时添加看门狗行或其他调试事件。

【讨论】:

以上是关于Drupal:具有起始值的内容类型的自动编号字段的主要内容,如果未能解决你的问题,请参考以下文章

如何仅允许特定用户查看 Drupal 中内容类型的特定字段?

Drupal:我应该将视图添加为字段吗?

Drupal 7:如果日期字段具有结束日期,则过滤视图

Drupal,Ubercart - 将自定义字段添加到结帐表单

设置 Drupal 节点引用自动建议搜索两个单独的字段

Drupal:当这些节点的 cck 字段具有该用户的配置文件 nodeid 时,显示与配置文件相关的节点