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



我需要一个字段,它可以自动为我的内容类型编号,但起始值为2000。我试过串行字段和计算字段。不知道怎么做。数字(使用序列字段)会自动递增,但我无法定义起始数字。

有办法这样做吗?

非常感谢!

您可以使用计算字段来执行此操作。将计算字段添加到内容类型中,并将数据类型设置为整数。在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),并将结果设置为字段的值。

我们在Drupal6系统中对几种自定义记录类型使用自定义自动编号(以下内容也适用于Drupal7)。为了使其发挥作用,我们使用在保存记录时触发的规则模块实现了一个规则。

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

对于您的操作,在规则上放置一个*填充创建内容的"custom_number"字段*操作(其中"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) );

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

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

Serial Module生成一个表,该表的名称为Serial_bundlename_fieldname,即如果您为bundle'Jobs'添加了字段名'field_job_id',则将创建一个表'1serial_Jobs_field_job_id

该表包含两个字段"sid"one_answers"nid"sid"是自动递增字段。

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

ALTER TABLE serial_jobs_field_job_id AUTO_INCREMENT=2000;

这可能会设置autoincrement字段的起始值。

最新更新