Ana içeriğe atla

Drupal 7 textfield Alanını textarea'ya Dönüştürme

7 dakika okuma süresi

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);
?>

Ofislerimiz

Drupart Locations

Ofislerimiz

Drupart AR-GE

GOSB Teknopark Hi-Tech Bina 3.Kat B3 Gebze - KOCAELİ

+90 262 678 8872

+90 216 706 12 58 

[email protected]

Londra

151 West Green Road, London, England

+44 203 815 6478

[email protected]

Newark

112 Capitol Trail Suite, A437 Newark DE, 19711

+1 (740) 666 6255

[email protected]

Wiesbaden

Hinterbergstraße 27
65207 Wiesbaden
Deutschland

+49 (0) 6151 – 492 70 23

[email protected]