我需要一个字段,它可以自动为我的内容类型编号,但起始值为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字段的起始值。