ใน Drupal 7 ฉันสามารถแก้ไข{system}
ตารางในฐานข้อมูลด้วยตนเองเพื่อปิดการใช้งานโมดูลสตับ ในเว็บไซต์ Drupal 8 ของฉันตารางนี้หายไป
ฉันจะปิดการใช้งานโมดูลด้วยตนเองใน Drupal 8 ได้อย่างไร
ใน Drupal 7 ฉันสามารถแก้ไข{system}
ตารางในฐานข้อมูลด้วยตนเองเพื่อปิดการใช้งานโมดูลสตับ ในเว็บไซต์ Drupal 8 ของฉันตารางนี้หายไป
ฉันจะปิดการใช้งานโมดูลด้วยตนเองใน Drupal 8 ได้อย่างไร
คำตอบ:
system
ตอนนี้ข้อมูลตารางDrupal 7 ถูกเก็บไว้ในconfig
ตารางใน Drupal 8 เทียบกับcore.extension
พารามิเตอร์
โซลูชันที่ 1: การกำหนดค่าการปรับปรุง
คุณสามารถเรียกใช้รหัสต่อไปนี้ใช้drush eval
หรืออาจจะใช้บทบัญญัติโมดูล Devel Execute PHP Code
ไป
// Read the configuration.
$module_data = \Drupal::config('core.extension')->get('module');
// Unset the modules you do not need.
unset($module_data['MODULE_NAME']);
// Write the configuration.
\Drupal::configFactory()->getEditable('core.extension')->set('module', $module_data)->save();
คุณสามารถทำสิ่งนี้ได้อย่างรวดเร็วด้วยสายการบินdrush
เดียว
drush eval "\$module_data = \Drupal::config('core.extension')->get('module'); unset(\$module_data['MODULE_NAME']); \Drupal::configFactory()->getEditable('core.extension')->set('module', \$module_data)->save();"
โซลูชันที่ 2: แก้ไขตารางกำหนดค่าหากคุณไม่สามารถใช้งาน PHP ได้
หากไซต์เสียเนื่องจากโมดูลมีปัญหาและคุณไม่สามารถเรียกใช้รหัส PHP ได้คุณอาจแก้ไขconfig
ตารางได้โดยตรง
ในแถวในที่config
ตารางที่และแก้ไขคอลัมน์หยดname = "core.extension"
data
The data
เป็นอาร์เรย์ PHP แบบอนุกรมที่คุณต้องลบโมดูลที่คุณต้องการกำจัดออกจากmodule
คีย์ของการกำหนดค่า
โซลูชันที่ 3: โซลูชันที่รวดเร็วและสกปรก
cache_config
อย่างไรก็ตามการแก้ปัญหานี้อาจส่งผลให้ข้อความบอกว่าโมดูลไม่ได้อยู่ในระบบไฟล์ซึ่งหมายถึงบางสิ่งผิดปกติ แต่อย่างน้อยโมดูลที่เสียหายจะถูกปิดการใช้งานและคุณสามารถเข้าถึงเว็บไซต์ของคุณในกรณีส่วนใหญ่
การล้างแคช
บางครั้งคุณอาจต้องล้างแคชหลังจากทำตามขั้นตอนด้านบน อ่านที่มีประโยชน์นี้เอกสารเกี่ยวกับวิธีการล้างแคช
drush eval
แต่ไม่ได้เพราะตารางสำหรับโมดูลจะหายไปคุณสามารถใช้ตัวเลือกที่สามด้วย ตัวอย่างหนึ่งซับคือ: drush eval "\$module_data = \Drupal::config('core.extension')->get('module'); unset(\$module_data['example_module']); \Drupal::configFactory()->getEditable('core.extension')->set('module', \$module_data)->save();
สังเกตเครื่องหมายดอลลาร์ที่ใช้ Escape เพื่อที่บรรทัดคำสั่งจะไม่ตีความผิด$module
เป็นตัวแปร Bash
config
ตารางด้วยตนเองname = 'core.extension'
และลบโมดูลออกจาก data blob ซึ่งเป็นอาเรย์ที่ต่อเนื่องกัน(...s:6:"module";a:HERE;{...)
cache_config
ตารางจาก phpmyadmin หรือใช้บรรทัดคำสั่งi:0;s:8:"name of the module";
s:8:"name of the module";i:0;
แต่สตริงเพื่อลบแต่ละโมดูลควรจะมีโครงสร้างเป็น สิ่งที่ @valli หมายถึงคืออาร์เรย์ที่อธิบายจำนวนโมดูลควรจะลดจำนวนลงตามจำนวนของโมดูลที่ถูกลบ จุดเริ่มต้นของหยดในการตั้งค่าของฉันคือa:4:{s:6:"module";a:59:{
ซึ่งเป็นอาร์เรย์ของ 59 โมดูล หากคุณลบการเปลี่ยนแปลงสองค่าของอาร์เรย์นั้นเป็น 57
พิจารณาใช้ Drush Drupal 8 ยังคงกำหนดว่า "โมดูลปิดการใช้งาน" ควรเป็นอย่างไร มีการสนทนาอย่างต่อเนื่องหากมีตัวเลือกนั้นหรือควรลบออก
ใน Drupal 8 ให้ลองลบโมดูลออกจากโฟลเดอร์โมดูลของคุณแล้วเรียกใช้ rebuild.php
ลองdrush pm-uninstall module-name
เช่นกัน
ฉันลองคำตอบอื่น ๆ ทั้งหมด แต่ได้รับข้อความแสดงข้อผิดพลาด drupal เพื่อแก้ปัญหาฉันต้องลบแถวออกจากตาราง key_value (มองหาชื่อโมดูลในคอลัมน์ชื่อ)
หากคุณต้องการอัปเดตสิ่งที่เกี่ยวข้องกับการกำหนดค่า Drupal ในกรณีนี้core.extension
ให้ใช้ Drush:
[Drush 8.x ในตัวอย่างนี้]
drush cedit core.extension
มีโมดูลสำหรับสิ่งนั้น โมดูลนี้ถูกโพสต์ใน ส.ค. 2013 เมื่อ drupal.org ในกรณีที่มีคนต้องการ
ตามที่ระบุไว้ในหน้าของโมดูลนี้
Drupal 8 ได้ลบความสามารถในการปิดการใช้งานโมดูลด้วยเหตุผลหลายประการ ดูที่ # 1199946: โมดูลที่ปิดใช้งานนั้นไม่สามารถใช้งานได้เกินกว่าจะซ่อมได้ดังนั้นจึงจำเป็นต้องลบฟังก์ชั่น "ปิด" ออกและปัญหาอื่น ๆ ในคิวของแกนหลักและโมดูลที่สนับสนุน
โมดูลนี้นำความสามารถในการปิดใช้งาน (ชั่วคราว) โมดูลจาก UI หรือด้วย Drush โปรดทราบว่าไม่มีการรับประกันสำหรับเนื้อหาของคุณกำหนดค่าหรือแม้กระทั่งเว็บไซต์ของคุณหลังจากที่คุณปิดการใช้งานโมดูล
นี่คือวิธีที่ฉันลบโมดูลชื่อ "better_messages" ด้วยตนเองออกจากอินสแตนซ์ Drupal 8 ของฉัน ทันทีที่ฉันติดตั้งโมดูล "better_messages" ไซต์ก็หยุดทำงาน ดังนั้นจึงไม่มีวิธีในการถอนการติดตั้งโมดูลจากส่วนต่อประสานผู้ใช้ ฉันไม่ได้ติดตั้ง Drush ฉันได้ทำการตั้งค่าหลายอย่างในฟอรัม แต่นี่เป็นวิธีที่ใช้งานได้ในที่สุด
1 เปลี่ยนชื่อโมดูลเป็น old_better_messages ในโฟลเดอร์โมดูล
ผ่านทาง URL วิ่งhttp: // IP: พอร์ต / foldername / rebuild.php สิ่งนี้ทำให้ไซต์นั้นกลับมา แต่ในโหมดอ่านอย่างเดียว ฉันไม่สามารถทำกิจกรรมของผู้ดูแลระบบหรือแก้ไขบทความได้
ใช้คำสั่งต่อไปนี้เพื่อลบรายการจากฐานข้อมูล
ลบออกจาก key_value WHERE collection = 'system.schema' และ name = 'better_messages';
ในกรณีของฉันไม่มีรายการในฐานข้อมูล ฉันคิดว่ามันอาจถูกลบเพราะการแสดงต่าง ๆ ที่ฉันทำไปก่อนหน้านี้
วิธีนี้แก้ไขปัญหาได้ สิ่งนี้มาจากการตีความของฉันที่https://www.drupal.org/node/2487215
คำตอบของ Jigarius เหนือการทำงาน ...
ฉันต้อง: // อ่านการกำหนดค่า
$module_data = \Drupal::config('core.extension')->get()['module'];
ซึ่งควรทำสิ่งเดียวกัน ไม่แน่ใจว่าทำไมมันไม่ทำงานอย่างที่ Jigarius เขียน ...