Kısa Metin Alanlarını Uzun Metin Alanına Dönüştürme

Drupal 7'de zaman zaman oluşturduğumuz metin alanlarını (Text field) uzun metin kutusuna dönüştürmeniz gerekebilir. Maalesef ilgili alanlar içinde veriler olduğu için bu düzenlemeyi Drupal arayüzünden yapamıyorsunuz. Field tanımları field_config tablosunda BLOB olarak yer alıyor ve bu metinleri doğrudan da değiştiremiyorsunuz. Internette bu konuda epey örnek var ama tüm örneklerde atlanan nokta field_config_instance tablosundaki alanlarının tanımlarının değiştirilmemesi. 

Aşağıdaki kodu doğrudan bir Drupal modülü içinde çalıştırabileceğiniz gibi isterseniz bir php dosya içine yerleştirerek drush ile de çalıştırabilirsiniz. İkinci yöntem çok daha pratik ve hızlı olacaktır. Aşağıdaki kodu textfield2textarea.php adından bir dosyaya kaydedin ve dosyanın olduğu dizinde komut satırından drush scr textfield2textarea.php drush komutunu çalıştırın. Aşağıdaki bilgilerde sadece $field_name  değişkenindeki değeri değiştirmeniz yeterli olacaktır. 

<?php
$field_name = "field_ag_partner_app_note_sprg";

$rows = db_query("SELECT id,data FROM {field_config} WHERE field_name = '{$field_name}' ")->fetchAll(PDO::FETCH_OBJ);

foreach ($rows as $row ){
 $row->data=unserialize($row->data);
 unset($row->data['settings']['max_length']);
 $row->type="text_long";
 drupal_write_record("field_config", $row, "id");
}

// field_config_instance tablosunda field (alan) tanımları düzenleniyor.
$rows = db_query("SELECT id,data FROM {field_config_instance} WHERE field_name = '{$field_name}'")->fetchAll(PDO::FETCH_OBJ);

foreach ($rows as $row ){
 $row->data=unserialize($row->data);
 $row->data['widget']['type']='text_textarea';
 unset($row->data['widget']['settings']['size']);
 $row->data['widget']['settings']['rows']=3;
 drupal_write_record("field_config_instance", $row, "id");
}

// İlgili alanın tür ve uzunluğu değiştiriliyor. 
db_change_field("field_data_{$field_name}", "{$field_name}_value", "{$field_name}_value", array(
 "type" => "varchar",
 "length" => "20000",
));
db_change_field("field_revision_{$field_name}", "{$field_name}_value", "{$field_name}_value", array(
 "type" => "varchar",
 "length" => "20000",
));

// Ön bellek temizleniyor
field_cache_clear(TRUE);
?>