2013-06-30 4 views
1

Мне нужно поле, которое автоматически вводит мой контент-тип, но начинается с некоторого значения, такого как 2000. Я пробовал Serial Field и вычисляемое поле. Не могу понять, как это сделать. Номер (с использованием последовательного поля) автоматически увеличивается, но я не могу определить начальный номер.Drupal: поле автоматического номера для содержимого с начальным значением

Есть ли все равно для этого?

Большое спасибо!

ответ

3

Вы можете сделать это, используя Вычисленное поле. Добавьте вычисленное поле в свой тип контента и установите тип данных как целое. В компьютерной поле (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; 
} 

Проверяется, если значение этого поля уже установлен для данного узла, а если нет - он получает общее количество узлов этого контента type, добавляет константу (2000 в этом примере) и устанавливает результат как значение для вашего поля.

+0

Работал как очарование, спасибо! – user1281146

0

модуля последовательного генерирует таблицу, имя которого serial_bundlename_fieldname т.е. Если вы добавили имя поля «field_job_id» для расслоения «Работы», то будет создана таблица "serial_jobs_field_job_id.

Таблица содержит 2 поля 'SID' и 'NID' 'с.и.д.' является автоматическое приращение поля.

Вы можете использовать инструмент как PhpMyAdmin и выполнить следующий запрос

ALTER TABLE serial_jobs_field_job_id AUTO_INCREMENT = 2000;

Это должно установить начальное значение для поля автоинкремента.

+0

Спасибо за ваш ответ, однако вместо этого я использовал вычисленный модуль. – user1281146

2

В нашей системе Drupal 6 мы используем пользовательские автоциклы для нескольких пользовательских типов записей (для Drupal 7 также должно работать следующее). Чтобы это сработало, мы внедрили правило, используя модуль правил, который запускается при сохранении записи.

Правило выполняется по событию После сохранения содержимого и должны убедиться, что вы сохраняете тип контента, который вы заинтересованы. (Например, если вы автонумерация виджеты, добавить IF для контента типа . это виджет

Для ваших действий, Погружает * Populate содержание, созданное на «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)); 

Каждый раз, когда вы сохраняете новый виджет, система em запускает запрос, чтобы найти max custom_number, уже назначенный. Если ни один не назначен или не назначен номер менее 200, система назначит 200; в противном случае он назначит 1 больше текущего назначенного максимального номера.

Если вы хотите, вы также можете добавить строку кода отладки, чтобы добавить сторожевую линию или другое событие отладки в случае обнаружения числа, которое меньше вашего желаемого минимума.

+0

Спасибо, прекрасное решение – user1281146