Вычисляемое поле, Drupal 7, Условное автоинкремент

У меня есть тип контента "Merchant", созданный для веб-сайта. Тип контента Merchant имеет поле выбора под названием "Город" и текстовое поле "Местность".

Я хочу создать поле "merchant_code", которое должно быть чем-то вроде "AB-XY-0001", где AB - это первые две буквы названия города, а XY - это первые две буквы названия населенного пункта, а 0001 должно быть инкрементным числом, поэтому продавцы из городов ABCD и XYZ будут иметь разные коды:

"AB-XY-0001",
"AB-XY-0002",
"AB-XY-0003"...
"AB-XY-9999",
etc.

А у торговцев из PQRS City и LMN будет свой код:

"PQ-MN-0001",
"PQ-MN-0002",
"PQ-MN-0003"...
"PQ-MN-9999",
etc..

Я вижу, что есть модуль Serial, но этот модуль помогает мне только создавать автоинкрементные числа для каждого типа контента, не основываясь на других полях этого типа контента.

Если я создаю продавца "AB-XY-0001", а затем создаю другого продавца PQRS города и населенного пункта LMN, у него будет код "PQ-LM-0002", а не код "PQ-LM-0001".

Пожалуйста, помогите мне достичь этого.

1 ответ

Я что-то кодировал, чтобы дать вам представление о том, что я буду делать. Я не проверял это, но я думаю, что этого должно быть достаточно, чтобы дать вам идею.

<?php
static $auto_generate = array(); // keep track of which codes are at what number
$code = '';
$code .= $node->field_city[0]['value'] . '-';
$code .= $node->field_locality[0]['value'];
if($auto_generate[$code])
{
  $auto_generate[$code]++;
}
else
{
  $auto_generate[$code] = 0;
}
$code .= '-' . $auto_generate[$code];
$node->field_merchant[0]['value'] = $code;
?>
Другие вопросы по тегам