web-gelistirme-sc.com

3000+ düğüm için giriş biçimini değiştirme

Giriş biçimlerini değiştirmesi gereken çok sayıda düğümüm var - bunu elle yapabilirdim, ancak Noel 2014'ten önce yapılmayacağım.

Drupal bu bilgileri saklıyor?) Giriş biçimini bir SQL sorgusuyla nasıl bir saniyede değiştirebilirim?

17
mortendk

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 daha önce kaçan HTML veya PHP doğrudan oluştur/çalıştır olur.

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 bir açık sayı .

Yine: dikkat, ejderhalar var.

Bununla birlikte, her alan metni field_foo_format Adlı bir sütun olarak depolar; burada field_foo Alanın makine adıdır. Bu sütunu field_revision_field_foo Ve field_data_field_foo Tablolarında güncellemeniz gerekir.

Sütunun değeri, filter_format Tablosunda format sütunu 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.

Burada new_format Değerini belirleyebilirsiniz: http://YOURSITE.com/admin/config/content/formats - bağlantıyı yapılandırın - URL'deki sayı veya dize new_format. Güncellemeden sonra önbelleği temizle.

20
user7

Belirli türdeki tüm düğümler için bir döngü yaparak bu şekilde deneyin:

$node = node_load(nid);
$node->body[$node->language][0]['format'] = 'full_html'; // plain_text
node_save($node);
4
Ek Kosmos

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

1
Ámon Tamás

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).

1
Chris Burgess
update field_revision_body set body_format = 'full_html' WHERE bundle IN ('book','page');
update field_data_body set body_format = 'full_html' WHERE bundle IN ('book','page');

benim için hile yaptı. Önbellekleri temizlemeyi unutmayın

0
duck

Muhtemelen hangi alanların güncellenmesi gerektiğini bilmek isteyeceksiniz, muhtemelen veriler üzerinde bazı kayıt veya kontroller yapmak için. Bunu yapmak için, _format Sütunu içeren tüm tablo ve sütun adlarını alın:

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 İfadesine ç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 (drush cc all!

field_cache_clear();

Veya acele ile:

drush sqlq "truncate table cache_field;"

Ayrıca metin filtresini kaldırma

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 old_format Kullanılan alanlarda izin reddedilen iletiler alır. 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 Plain text Olarak ayarlanmış alanlar bile old_format! Metin işleme'nin Filtered text (user selects text format) olarak ayarlanmış olduğu alanlar için, ek olarak yeni bir varsayılan değer seçmeniz ve Kaydet'e basmanız gerekir.

Bir filtreyi kaldırdıktan sonra filtre önbelleğini temizlemelisiniz (yine, drush cc all!

cache_clear_all('*', 'cache_filter', TRUE);

Veya acele ile:

drush sqlq "truncate table cache_filter;"
0
noobish

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'));
0