Порядок программного удаления / добавления полей и их экземпляров в друпал 7 пример

алгорит такой -
при создании поля и его экземпляра =

  1. сначала создаётся поле
  2. а только потом его экземпляр

при удалении =

  1. сначала удаляется экземпляр (при это вроде как потом и поле удалится автоматически в случае если этот экземпляр был последним)
  2. а только потом поле

но при каждой переустановке модуля мы будем получать новые строки в таблицах - проблема описана здесь

При попытке разместить , следующий ниже код в install/uninstall хуках возможно возникновение следующей проблемы.

здесь я приведу код как для install/uninstall enable/disable (выбирайте что нужно именно вам - помните про дублирование)
LL - имя моего модуля
log_ligh - сомописная фунция - для записи лога в текстовый файл (дедовский способ отладки не слишком грамотного программиста))
итак вот код (прокомментирован)=

function LL_install()
{
  watchdog("LL=","LL_install() section !");
  $fieldname='field_88';// имя поля
   drupal_set_message(t('LL_install() section !'), 'error');
  if (!($field = field_info_field($fieldname))) // если информации о таком поле как об установленном нет - то добавим его
	{
	   watchdog("LL=","field install section !");
	   log_ligh(" create filed section  !");
	   log_ligh(" create filed section  !");
	  $field = array(
		"field_name"=>$fieldname, // имя поля
		"type"=>"node_reference",// его тип (спасибо модулю references)
	  'cardinality' => 1,
	  'settings' => array(),
	  'entity_types' => array('user', 'node'), // видимо сущности к которым можно будет привязывать экземпляры поля
	  );
	  
	  field_create_field($field); // создаем поле
	  log_ligh(" new field  !");
	   watchdog("LL="," filed is created !");// добавим запись в системный журнал
	}
	  
	// работаем с экземпляром поля
	if (!($field = field_info_instance('node',$fieldname,'article'))) //если экземлпяр поля не
	 //известен как "установленный" - создадим его
	{
		
	  log_ligh(" create filed  instance section  !");
	   $instance = array(
		"field_name"=>$fieldname,
		'entity_type' => 'node', // указываем сущность к которой будет относится экземляр поля
		"label"=>t("Cool"),
		'bundle' => 'article',// выбираем привязку к "статье"
		"type"=>"node_reference",
		"widget"=>array(
		  "type"=>"options_select"
		),
	  );
	  field_create_instance($instance); //создаём экземпляр этого поля и привязываем его к типу "статья"
  }
 log_ligh("INSTALLation waS COMPLETED ") ;
}

function LL_uninstall()
{
 drupal_set_message(t('LL_uninstall() section !'));
  watchdog("LL=","LL_uninstall() section !");
  $fieldname='field_88';// имя поля
  if ($field = field_info_instance('node',$fieldname,'article')) // если поле существует - удалим его
			{ 
			  log_light(" delete filed instance !");
			  field_delete_instance($field);
			  watchdog("LL=","delete filed instance !");
			  log_light(" filed is deleted !");
			}
	 
	 
	 
	if ($field = field_info_field($fieldname)) //
		{
			log_light(" deleting field section  !");
			watchdog("LL=","deletion field is completed !");
			field_delete_field($field);
		   log_light(" deletion field is completed  !");
		  watchdog("LL=","filed is deleted !");
		}  
}
function LL_enable() // работает при включении модуля  - каждый раз
{
     watchdog("LL=","LL_install() section !");
  $fieldname='field_88';// имя поля
   drupal_set_message(t('LL_install() section !'));
  if (!($field = field_info_field($fieldname))) // если информации о таком поле как об установленном нет - то добавим его
	{
	   watchdog("LL=","field install section !");
	   log_ligh(" create filed section  !");
	   log_ligh(" create filed section  !");
	  $field = array(
		"field_name"=>$fieldname, // имя поля
		"type"=>"node_reference",// его тип (спасибо модулю references)
	  'cardinality' => 1,
	  'settings' => array(),
	  'entity_types' => array('user', 'node'), // видимо сущности к которым можно будет привязывать экземпляры поля
	  );
	  
	  field_create_field($field); // создаем поле
	  log_ligh(" new field  !");
	   watchdog("LL="," filed is created !");// добавим запись в системный журнал
	}
	  
	// работаем с экземпляром поля
	if (!($field = field_info_instance('node',$fieldname,'article'))) //если экземлпяр поля не
	 //известен как "установленный" - создадим его
	{
		
	  log_ligh(" create filed  instance section  !");
	   $instance = array(
		"field_name"=>$fieldname,
		'entity_type' => 'node', // указываем сущность к которой будет относится экземляр поля
		"label"=>t("Cool"),
		'bundle' => 'article',// выбираем привязку к "статье"
		"type"=>"node_reference",
		"widget"=>array(
		  "type"=>"options_select"
		),
	  );
	  field_create_instance($instance); //создаём экземпляр этого поля и привязываем его к типу "статья"
  }
 log_ligh("INSTALLation waS COMPLETED ") ;
   
}

function LL_disable() // работает при выключении модуля - каждый раз.
{
  drupal_set_message(t('LL_uninstall() section !'));
  watchdog("LL=","LL_uninstall() section !");
  $fieldname='field_88';// имя поля
  if ($field = field_info_instance('node',$fieldname,'article')) // если поле существует - удалим его
			{ 
			  log_light(" delete filed instance !");
			  field_delete_instance($field);
			  watchdog("LL=","delete filed instance !");
			  log_light(" filed is deleted !");
			}
	 
	 
	 
	if ($field = field_info_field($fieldname)) //
		{
			log_light(" deleting field section  !");
			watchdog("LL=","deletion field is completed !");
			field_delete_field($field);
		   log_light(" deletion field is completed  !");
		  watchdog("LL=","filed is deleted !");
		} 
   
}