Yanıtlar:
Bu yanıtı, özellikle formatı daha yumuşak bir filtre kümesine değiştiriyorsanız, bu en-masse yapmanın potansiyel bir güvenlik riski sunduğunu söyleyerek ön yazacağım. Metin biçimleri, kaydetme sırasında değil görüntüleme sırasında alan çıktısını değiştirir. Bu nedenle, örneğin, filtreyi yanlışlıkla veya kasıtlı olarak Tam HTML veya PHP koduna ayarlarsanız, bir alana gönderilen daha önce kaçan HTML veya PHP düz bir şekilde oluşturulur / çalıştırılır.
Bu nedenle, bir metin biçimini değiştirdiğinizde Drupal mevcut tüm düğümleri otomatik olarak güncellemez. Benzer senaryolarda metin biçimlerinin davranışı hala açık bir konudur .
Yine: dikkat edin, ejderhalar var.
Bunu dedi, her bir alan adında bir sütun olarak metni depolayan field_foo_format
, field_foo
alanın makine adıdır. Tablolardaki field_revision_field_foo
ve sütununu güncellemeniz gerekir field_data_field_foo
.
Sütun değeri format
, filter_format
tablodaki sütun olarak tanımlanan bir makine adıdır . Yani, tüm alanların güncellenmesi aşağıdaki gibi bir sorgu ile ilgilidir:
UPDATE field_revision_foo SET field_foo_format = 'new_format';
UPDATE field_data_foo SET field_foo_format = 'new_format';
değişmesi gereken her alan için.
new_format
Burada değeri belirleyebilirsiniz : http://YOURSITE.com/admin/config/content/formats - bağlantıyı yapılandırın - URL'deki bağlantı numarası veya dize new_format.
güncelleme sonrasında Açık önbelleğinizdir.
Morten'in burada yaptığıla aynı durumdaydı, görünüşte giriş formatlarını bitirmeyen bir D6 => D7 yükseltmesi.
Burada verilen yanıtlardan daha sert bir yaklaşım benimsedi ve DB şemasından geçen ve 'format' dizesini içeren tüm sütunları güncelleyen, D6 format değerlerini (1, 2, 3) D7 makine adlarıyla ( filtered_html
, full_html
, plain_text
).
https://gist.github.com/xurizaemon/9824872
Haritalamasını desteklemek için sabit kodlanmış
1 => filtered_html,
2 => full_html,
3 => plain_text,
Ayrıca 'format' adlı alanları yeniden yazmayı deneyebilirsiniz (örn. "Date_format", ancak '2' değerine sahip bir tarih biçiminiz varsa, bu sizin sorununuzdur).
Benim için aşağıdakiler işe yaradı:
update `field_revision_body` set `body_format` = 'new_body_forma' WHERE `bundle` = 'node_type'
update `field_data_body` set `body_format` = 'new_body_forma' WHERE `bundle` = 'node_type'
Elbette new_body_forma ve node_type değerlerini değiştirmelisiniz
Entity.module yüklüyse aşağıdaki kodu kullanabilirsiniz.
// I'm using node_save($node);
$wrapper = entity_metadata_wrapper('node', $node->nid);
$wrapper->body->set(array('value' => body_text, 'format'=>'full_html'));
Muhtemelen veriler üzerinde bazı kayıt veya kontroller yapmak için hangi alanların güncellenmesi gerektiğini bilmek isteyeceksiniz. Bunu yapmak için, sütun içeren tüm tablo ve sütun adlarını alın _format
:
select distinct TABLE_NAME, column_name
from information_schema.columns
where TABLE_SCHEMA = 'my_drupal_database_name' and column_name like '%_format';
Bu verilerle donatılmış olarak, bu değerlerden ayrı sorgular oluşturabilirsiniz. Önce çıkışı kontrol edin; içerik / düzeltmelerle ilgili olmayan bazı girişleri kaldırmanız gerekebilir. Sorguları oluşturmak için normal ifade özellikli bir düzenleyici kullanmanızı öneririm. Verileri büyük bir select [...] union
ifadeye çevirdim ve ardından güncelleme sorgularını ona karşı çalıştırdım.
Bu yaklaşımı kullanmak, binlerce düğümü / düzeltmeyi güncellemem gerektiğinde oldukça zaman kazandım. Alan önbelleğini temizlemeyi unutmayın (kapsam dahil DEĞİLDİR drush cc all
!):
field_cache_clear();
Veya acele ile:
drush sqlq "truncate table cache_field;"
Ayrıca bir metin filtresini kullanımdan kaldırıyorsanız, daha sonra onu kullanan alanları olan CT'ler için varsayılan metin biçimini değiştirmeniz gerekir. Bunu yapmazsanız, kullanıcılarınız, alanlarını kullanan alanlarda izin reddedilen iletiler alır old_format
. Suçluları bulmak için bu sorguyu yaptım:
select * from field_config_instance where `data` LIKE '%old_format%';
Değişiklikleri yapmak için, her alan ayarları sayfasını ziyaret etmek ve Kaydet'e basmak için arayüzü kullanmayı daha kolay buldum (veriler longblob olarak saklanır ve daha iyi formatlar modül veri enjeksiyonları nedeniyle arama ve değiştirme yapmak için uygun değildi). Metin işleme ayarlanmış alanlar bile Plain text
old_format! Metin işleme ayarlanmış alanlar için Filtered text (user selects text format)
, ek olarak yeni bir varsayılan değer seçmeniz ve Kaydet'e basmanız gerekir.
Bir filtreyi çıkardıktan sonra filtre önbelleğini temizlemelisiniz (yine örtülmez drush cc all
!):
cache_clear_all('*', 'cache_filter', TRUE);
Veya acele ile:
drush sqlq "truncate table cache_filter;"
field_cache_clear();
değişiklik yaptıktan sonrafield_data_...
field_revision_...