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

时间:2013-06-30 18:45:40

标签: drupal drupal-7 drupal-fields drupal-content-types

我需要一个自动管理我的内容类型的字段,但是从某个值开始,如2000.我尝试了串行字段和计算字段。无法弄清楚如何做到这一点。数字(使用串行字段)会自动递增,但我无法定义起始编号。

有没有这样做?

非常感谢!

3 个答案:

答案 0 :(得分:3)

您可以使用计算字段来完成此操作。 将计算字段添加到内容类型,并将数据类型设置为整数。在Computed Field(PHP)textarea中,此代码适用于您:

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)并将结果设置为你的领域。

答案 1 :(得分:2)

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

规则运行ON事件保存内容后应验证您是否正在保存您感兴趣的内容类型。(例如,如果您要自动编号窗口小部件,请添加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个。

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

答案 2 :(得分:0)

序列模块会生成一个名称为 serial_bundlename_fieldname 的表格,即如果您为包裹 field_job_id ” >工作'然后会创建一个表' serial_jobs_field_job_id '。

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

您可以使用像phpMyAdmin这样的工具并执行以下查询

ALTER TABLE serial_jobs_field_job_id AUTO_INCREMENT = 2000;

这应该可以设置autoincrement字段的起始值。