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 中内容类型的特定字段?