1

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

有没有办法做到这一点?

非常感谢!

4

3 回答 3

3

您可以使用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)并将结果设置为您的字段的值。

于 2013-07-01T10:07:04.353 回答
2

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

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

对于您的操作,请在规则上放置一个 *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。

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

于 2013-07-01T17:23:12.813 回答
0

串行模块生成一个名称为serial_bundlename_fieldname的表,即如果您为捆绑“作业”添加了字段名称“ field_job_id ”,则将创建一个表“ serial_jobs_field_job_id ”。

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

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

ALTER TABLE serial_jobs_field_job_idAUTO_INCREMENT = 2000;

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

于 2013-07-01T13:36:17.237 回答