जवाबों:
मैं इस उत्तर को यह कहते हुए प्रस्तुत करने जा रहा हूं कि यह एन-मस्से एक संभावित सुरक्षा जोखिम प्रस्तुत करता है, खासकर यदि आप प्रारूप को फ़िल्टर के अधिक उदार सेट में बदल रहे हैं। पाठ प्रारूप प्रदर्शन के दौरान फ़ील्ड आउटपुट को संशोधित करते हैं, न कि सहेजने के दौरान। इसलिए, उदाहरण के लिए, यदि आप गलती से या जानबूझकर फ़िल्टर को पूर्ण HTML या PHP कोड पर सेट करते हैं, तो किसी फ़ील्ड में सबमिट किया गया कोई भी पहले से सहेजा गया HTML या PHP सीधे रेंडर / रन करेगा।
यह इस कारण से है कि जब आप पाठ प्रारूप बदलते हैं तो Drupal स्वचालित रूप से सभी मौजूदा नोड्स को अपडेट नहीं करता है। समान परिदृश्य में पाठ स्वरूपों का व्यवहार अभी भी एक खुला मुद्दा है ।
तो फिर से: खबरदार, वहाँ ड्रेगन हो।
इसके साथ ही कहा गया है, प्रत्येक फ़ील्ड टेक्स्ट को नाम के कॉलम के रूप में संग्रहीत करता है field_foo_format
, जहाँ field_foo
फ़ील्ड का मशीन नाम है। आप टेबल पर उस स्तंभ को अपडेट करना होगा field_revision_field_foo
और field_data_field_foo
।
स्तंभ के लिए मान तालिका format
में स्तंभ के रूप में परिभाषित एक मशीन का नाम है filter_format
। इसलिए, सभी क्षेत्रों को अपडेट करना एक क्वेरी की तरह होगा:
UPDATE field_revision_foo SET field_foo_format = 'new_format';
UPDATE field_data_foo SET field_foo_format = 'new_format';
प्रत्येक क्षेत्र के लिए जिसे बदलने की आवश्यकता है।
आप new_format
यहाँ मान निर्धारित कर सकते हैं: http://YOURSITE.com/admin/config/content/formats - URL में लिंक - संख्या या स्ट्रिंग को कॉन्फ़िगर new_format.
करने के बाद अपडेट करने के बाद आपका स्पष्ट कैश है।
बस उसी स्थिति में भाग गया, जैसा कि मोर्टन ने डी 6 => डी 7 अपग्रेड के साथ किया था, जो स्पष्ट रूप से इनपुट प्रारूपों को पूरा नहीं करता था।
यहां पहले से मौजूद उत्तरों की तुलना में एक गंभीर दृष्टिकोण लिया, और एक मॉड्यूल लिखा, जो डीबी स्कीमा के माध्यम से चला और उन सभी स्तंभों को अपडेट किया, जिनमें डी 6 मशीन के नाम के साथ डी 6 प्रारूप मान (1, 2, 3) की जगह स्ट्रिंग प्रारूप है ( filtered_html
, full_html
, plain_text
)।
https://gist.github.com/xurizaemon/9824872
के मानचित्रण का समर्थन करने के लिए हार्डकोड किया गया
1 => filtered_html,
2 => full_html,
3 => plain_text,
उन फ़ील्ड्स को फिर से लिखने की कोशिश कर सकते हैं जिन्हें 'फॉर्मेट' (जैसे "date_format" नाम दिया गया है, लेकिन अगर आपके पास वैल्यू '2' के साथ डेट फॉर्मेट है, तो यह आपकी समस्या है)।
मेरे लिए, निम्नलिखित ने काम किया:
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'
बेशक आपको new_body_forma और node_type को बदलना होगा
आप इकाई का उपयोग कर सकते हैं।
// I'm using node_save($node);
$wrapper = entity_metadata_wrapper('node', $node->nid);
$wrapper->body->set(array('value' => body_text, 'format'=>'full_html'));
संभवतः आप जानना चाहेंगे कि किन क्षेत्रों को अपडेट करने की आवश्यकता है, संभवतः डेटा पर कुछ लॉगिंग या चेक करने के लिए। ऐसा करने के लिए, सभी तालिका और स्तंभ नाम प्राप्त करें जिसमें एक _format
कॉलम है:
select distinct TABLE_NAME, column_name
from information_schema.columns
where TABLE_SCHEMA = 'my_drupal_database_name' and column_name like '%_format';
इस डेटा के साथ सशस्त्र आप उन मानों से अलग क्वेरी बना सकते हैं। पहले आउटपुट की जांच करें; आपको कुछ प्रविष्टियों को हटाने की आवश्यकता हो सकती है जो सामग्री / संशोधन से संबंधित नहीं हैं। मैं प्रश्नों का निर्माण करने के लिए एक रेगेक्स-सक्षम संपादक का उपयोग करने की सलाह देता हूं। मैंने डेटा को एक बड़े select [...] union
बयान में बदल दिया और फिर इसके खिलाफ अपडेट क्वेरी चला दी।
इस दृष्टिकोण का उपयोग करके मुझे कुछ समय बचा जब मुझे हजारों नोड्स / संशोधन को अपडेट करने की आवश्यकता थी। फ़ील्ड कैश साफ़ करना याद रखें (द्वारा कवर नहीं किया गया है drush cc all
!):
field_cache_clear();
या ड्रश के साथ:
drush sqlq "truncate table cache_field;"
यदि आप एक टेक्स्ट फ़िल्टर को भी रिटायर कर रहे हैं, तो बाद में आपको CTs के लिए डिफ़ॉल्ट टेक्स्ट फॉर्मेट को बदलना होगा जिसमें इसे इस्तेमाल किया गया था। यदि आप ऐसा नहीं करते हैं, तो आपके उपयोगकर्ताओं को उन फ़ील्ड्स के भीतर अनुमति अस्वीकृत संदेशों की अनुमति मिल जाएगी जो उपयोग करते थे old_format
। दोषियों को खोजने के लिए मैंने यह क्वेरी की:
select * from field_config_instance where `data` LIKE '%old_format%';
परिवर्तन करने के लिए, मुझे प्रत्येक फ़ील्ड सेटिंग्स पृष्ठ पर जाने और सहेजें को दबाने के लिए इंटरफ़ेस का उपयोग करना आसान लगा (डेटा को लॉन्गब्लो के रूप में संग्रहीत किया गया है और बेहतर प्रारूप मॉड्यूल डेटा इंजेक्शन के कारण खोज और प्रतिस्थापित करने के लिए अनिच्छुक था)। यहां तक कि फ़ील्ड्स जिसमें टेक्स्ट प्रोसेसिंग का सेट Plain text
पुराना_फॉर्मेट समाहित था! उन फ़ील्ड के लिए जिनके पास टेक्स्ट प्रोसेसिंग सेट है Filtered text (user selects text format)
, आपको अतिरिक्त रूप से एक नए डिफ़ॉल्ट मान का चयन करना होगा और सेव को दबाना होगा।
फ़िल्टर हटाने के बाद आपको फ़िल्टर कैश साफ़ करना चाहिए (फिर से कवर नहीं किया जाना चाहिए drush cc all
!):
cache_clear_all('*', 'cache_filter', TRUE);
या ड्रश के साथ:
drush sqlq "truncate table cache_filter;"
field_cache_clear();
में बदलाव के बाद भी करना चाहिएfield_data_...
field_revision_...