ไม่สามารถติดตั้ง ... แล้วในการกำหนดค่าที่ใช้งานอยู่


15

ใน Drupal 8.1 ฉันยังคงทำงานต่อไปกับข้อความประเภทนั้นเมื่อฉันพยายามเปิดใช้งานโมดูลที่กำหนดเองหรือคุณสมบัติที่กำหนดเองซึ่งทำการปรับเปลี่ยนบางอย่างในหน้าพื้นฐาน (เพิ่มฟิลด์)

มันน่ารำคาญจริงๆ ...

ขั้นตอน:

  • ล้างฐานข้อมูลทั้งหมด
  • ไปที่ /install.php แล้วเลือกโปรไฟล์มาตรฐาน
  • ตอนนี้ไซต์กำลังทำงานให้ไปที่ขยาย
  • เลือกคุณสมบัติ - หน้าพื้นฐาน

ผลลัพธ์:

Unable to install Feature - Basic Page, core.base_field_override.node.page.promote, core.entity_form_display.node.page.default, core.entity_view_display.node.page.default, core.entity_view_display.node.page.teaser, field.field.node.page.body, node.type.page already exist in active configuration.

ใช่ ... นั่นคือสิ่งที่ฉันต้องการจะทำ: เปลี่ยนการตั้งค่าเริ่มต้นเหล่านั้น!

Expexted:

สามารถติดตั้งคุณลักษณะของฉันซึ่งทำการแก้ไขบางอย่างในหน้าพื้นฐาน

คุณสมบัติของฉัน

นี่คือคุณสมบัติของฉันสร้างด้วยโมดูลคุณสมบัติ

โดยพื้นฐานแล้วมันจะเพิ่มสองฟิลด์คือ banner_image และ background_image ในหน้าพื้นฐาน

ไฟล์:

config
    install
        core.base_field_override.node.page.changed.yml
        core.base_field_override.node.page.created.yml
        core.base_field_override.node.page.promote.yml
        core.base_field_override.node.page.status.yml
        core.base_field_override.node.page.sticky.yml
        core.base_field_override.node.page.title.yml
        core.base_field_override.node.page.uid.yml
        core.entity_form_display.node.page.default.yml
        core.entity_view_display.node.page.default.yml
        core.entity_view_display.node.page.teaser.yml
        field.field.node.page.body.yml
        field.field.node.page.field_banner_image.yml
        field.field.node.page.field_image.yml
        field.storage.node.field_banner_image.yml
        language.content_settings.node.page.yml
        node.type.page.yml
feature_basic_page.features.yml
feature_basic_page.info.yml

ทำไมไม่สนับสนุนสิ่งง่าย ๆ นี้ มันเป็นข้อบกพร่องหรือไม่? ฉันควรทำอย่างไรเพื่อให้สามารถใช้คุณสมบัติของฉันได้


1
ใช้ โมดูลdrupal EasyInstallซึ่งใช้เพื่อลบการกำหนดค่าที่ใช้งานอยู่
Karthikeyan Manivasagam

1
+1 โมดูลที่น่าสนใจ - คุ้มค่าดู - ขอบคุณ @KarthikeyanManivasagam
therobyouknow

คำตอบ:


24

ด้วย drush คุณสามารถทำได้

drush config-delete module_name.settings

เพื่อลบการกำหนดค่าที่บ่น


ฉันยังค้นพบระหว่างการต่อสู้ครั้งยิ่งใหญ่ของฉันกับ Drupal ที่คุณสามารถย้ายไฟล์ปรับแต่งเหล่านั้นในoptional/โฟลเดอร์เพื่อทำให้มันปิดเครื่อง แต่ฉันไม่แน่ใจเกี่ยวกับความหมายทั้งหมด ...
Guillaume Bois

@GuillaumeBois: ความหมายก็คือการกำหนดค่าตัวเลือกเพิ่มเติมเหล่านี้จะถูกละเว้นหากติดตั้งไว้แล้วหรือไม่พบการพึ่งพา ดังนั้นจึงอาจนำไปสู่ปัญหาเพิ่มเติมหากการกำหนดค่าเป็นสิ่งจำเป็นสำหรับโมดูลในการทำงาน
Renrhaf

+1 ขอบคุณ @GiorgosK (ตอนที่ 1 จาก 2): ฉันพบวิธีแก้ปัญหานี้ในกรณีของฉัน: ฉันพบข้อผิดพลาดนี้ในเว็บเบราว์เซอร์สำหรับเว็บไซต์ dev ของฉัน: Warning: in_array() expects parameter 2 to be array, null given in lightning_layout_block_alter() (line 91 of modules/contrib/lightning_layout/lightning_layout.module).หลังจากตั้งค่าซอร์สโค้ดคอมไพล์ของฉันและฐานข้อมูลบนเครื่องอื่น .
therobyouknow

(ตอนที่ 2 จาก 2) ดังนั้นเพื่อแก้ปัญหาฉันพยายามถอนการติดตั้ง lightning_layout และติดตั้งใหม่ drush pm-uninstall lightning_layoutทำงานแล้ว แต่เมื่อฉันพยายามติดตั้งใหม่drush en lightning_layoutฉันได้รับข้อผิดพลาดบรรทัดคำสั่งนี้ "ใน PreExistingConfigException.php บรรทัดที่ 65: วัตถุการกำหนดค่า (field.storage.node.panelizer) โดย Lightning_layout มีอยู่แล้วในการตั้งค่าที่ใช้งานอยู่" ดังนั้นฉันจึงใช้ วิธีแก้ปัญหา: drush config-delete field.storage.node.panelizer และจากนั้นก็สามารถเปิดใช้งานโมดูลอีกครั้ง:drush en lightning_layout
therobyouknow

1
หากคุณไม่แน่ใจว่าคุณต้องลบ "การตั้งค่า" อะไรคุณควรเรียกใช้ "drush config-list" เพื่อรับชื่อที่แน่นอนของการกำหนดค่า
Jorge Valvert

3

สิ่งนี้ไม่ได้รับการสนับสนุนเนื่องจากโมดูลอาจไม่สามารถแทนที่เอนทิตีการกำหนดค่าที่มีอยู่แล้วด้วยการติดตั้งการกำหนดค่า

ในการเพิ่มรูปแบบและการกำหนดค่าโหมดดูสำหรับประเภทโหนดที่มีอยู่แล้วคุณต้องใช้สิ่งนี้ในรหัสใน hook_install ()

หรือคุณต้องลบประเภทโหนดก่อนในเว็บไซต์ของคุณ แต่คุณต้องลบเนื้อหา

และไม่ใช่นี่ไม่ใช่ข้อผิดพลาดนี่คือวิธีกำหนดเพื่อป้องกันการสูญเสียการกำหนดค่า


มันเศร้ามาก ใน D7 นี้เป็นไปได้ (เพิ่มเขตข้อมูลไปยังหน้าพื้นฐานผ่านคุณสมบัติ) ฉันยังคิดว่ามันควรจะเป็น D8 ด้วย คุณบอกว่ามันคือการป้องกันการสูญเสียของการตั้งค่า แต่ในความเป็นจริงมันก็เพิ่มการกำหนดค่า (ฟิลด์, น้ำหนัก, ฉลาก, ฯลฯ ) โปรดทราบว่าฉันยังมีปัญหานี้กับโมดูลที่กำหนดเองของฉันเอง
Guillaume Bois

ไม่มันไม่เพียงเพิ่ม มุมมองและการแสดงรูปแบบจะถูกแชร์ในทุกฟิลด์ของประเภทโหนดเดียว จะเกิดอะไรขึ้นถ้าสองโมดูลพยายามเพิ่มไฟล์นั้นใครจะเป็นผู้ชนะ เกิดอะไรขึ้นกับฟิลด์ที่มีอยู่ซึ่งมีอยู่แล้วในประเภทเพจ เกิดอะไรขึ้นถ้าชนิดโหนดพื้นฐานมีอยู่ แต่มีการตั้งค่าที่แตกต่างจากในฟิลด์ของคุณ สถานการณ์พฤติกรรมเช่นนั้นไม่ได้ถูกกำหนดไว้ สำหรับคุณสมบัติแบบสแตนด์อโลนคุณควรกำหนดประเภทโหนดของคุณเองและปรับใช้การเปลี่ยนแปลงนี้ในเว็บไซต์ของคุณเองคุณไม่จำเป็นต้องมีโมดูลคุณลักษณะเช่นใน 7.x คุณสามารถส่งออกการกำหนดค่าและนำเข้าอีกครั้ง
Berdir

@berdir นี่น่าสนใจมาก ดังนั้นฉันมาจากปัญหานี้จากการพยายามสร้างคุณลักษณะโปรไฟล์ผู้ใช้ที่มีบันทึกการดูและแบบฟอร์ม คุณกำลังบอกว่าสิ่งนี้ไม่สามารถทำได้ในฟีเจอร์เนื่องจากประเภทเนื้อหาของผู้ใช้จะมีอยู่แล้วและฟีเจอร์พยายามเปิดใช้งานหรือไม่ มีวิธีการอนุญาตให้ฟีเจอร์แทนที่สิ่งนี้เพื่อให้ใครบางคนสามารถเปิดใช้งานคุณลักษณะโปรไฟล์ในเว็บไซต์ที่มีอยู่แล้วหรือไม่?
kaleemclarkson

ผู้ใช้ @kaleemclarkson ไม่ใช่ประเภทเนื้อหา แต่เป็นประเภทเอนทิตี วิธีเดียวที่จะทำคือสิ่งที่ฉันอธิบายคุณต้องใช้รหัสใน hook_install () ของโมดูลคุณสมบัติของคุณเพื่อตั้งค่ารูปแบบและดูการกำหนดค่าการแสดงผล หรือใช้โมดูลโปรไฟล์และกำหนดประเภทโปรไฟล์ของคุณเองที่นั่น
Berdir

3

โมดูลพบการใช้งาน ง่ายติดตั้งโมดูลการกำหนดค่าการใช้งานล้างโดยไม่ต้องใช้ devel หรือ drush มันทำงานได้แม้ว่าคุณจะพลาดโฟลเดอร์ตัวเลือกและบังคับใช้ตัวเลือก ในไฟล์การกำหนดค่าโมดูลของคุณ ( yml )


1
นี่คือตัวเลือกที่ยอดเยี่ยม! ฉันเพิ่งใช้มันในวันนี้และมันช่วยฉันได้มาก!
rtd1123

3

ฉันมีปัญหาเดียวกันสำหรับเว็บไซต์แพนธีออน ฉันป้อนคำสั่ง drush

Pantheonsite: drush @ pantheon.SITENAME.ENVNAME config-delete ERRORNAME

Localsite: drush config-delete ERRORNAME

มันใช้งานได้สำหรับฉัน


1

ด้วยdrush enมันใช้งานได้!

[profile_test]$ drush en feature_basic_page -y
The following extensions will be enabled: feature_basic_page
Do you really want to continue? (y/n): y    
feature_basic_page was enabled successfully.   [ok]

แก้ไข: มีวิธีที่ดีกว่าตอนนี้ดู: ฉันจะลบวัตถุการกำหนดค่าออกจากการกำหนดค่าที่ใช้งานอยู่ได้อย่างไร


0

หากคุณต้องการเพิ่มการกำหนดค่าลงในโมดูลที่กำหนดเองของคุณ แต่มีอยู่แล้วในการกำหนดค่าที่ใช้งานอยู่และด้วยเหตุผลบางอย่างที่คุณไม่สามารถใช้ drush เพื่อลบการกำหนดค่าเหล่านั้น (ในกรณีของฉันเพราะมันเป็นส่วนหนึ่งของโปรไฟล์การติดตั้ง) จะไม่มีปัญหาเกิดขึ้นกับคุณเขียนทับการกำหนดค่านี่เป็นวิธีการแทนที่การกำหนดค่าเหล่านั้น

เพิ่มโฟลเดอร์ใหม่ในโมดูลที่กำหนดเองของคุณ / config / hook_install และเพิ่มไฟล์ config .yml ของคุณในโฟลเดอร์นั้นจากนั้นใน hook_install ของโมดูลของคุณ

use Drupal\Component\Serialization\Yaml;

/**
 * Implements hook_install().
 */
function mymodule_install() {

  // Replace these configs.  We're using code to do this, as they are already
  // installed.
  $config_files = [
    'language.types',
    'language.negotiation',
  ];

  foreach ($config_files as $config_id) {
    $raw_data = file_get_contents(drupal_get_path('module', 'mymodule') . '/config/hook_install/' . $config_id . '.yml');
    \Drupal::configFactory()->getEditable($config_id)
      ->setData(Yaml::decode($raw_data))
      ->save();
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.