ไม่สามารถลบประเภทเนื้อหาของฟีเจอร์หลังจากถอนการติดตั้งฟีเจอร์


คำตอบ:


15

วิธีการแก้

การใช้hook_uninstall()ไฟล์ใน FEATURE_NAME.install และเปลี่ยนสถานะของประเภทเนื้อหาดังนั้นระบบจึงคิดว่าเป็นประเภทเนื้อหาที่ปลดล็อคและกำหนดเอง

ฉันโพสต์สิ่งนี้บน d.orgด้วย

<?php
/**
 * Implements hook_uninstall().
 */
function FEATURE_NAME_uninstall() {

  // List custom content types added by this feature
  $custom_ctypes = array(
    'blog',
  );

  // Go through each and unlock the content type
  foreach ($custom_ctypes as $ctype) {
    db_query("UPDATE {node_type} SET `custom` = 1, locked = 0 WHERE type = :ctype", array(':ctype' => $ctype));
  }

  // Clean Drupal cache; this is necessary for the "Delete" link to appear
  // next to the content type created by the feature.
  drupal_flush_all_caches();

}

นี่จะทำให้ปุ่ม "ลบ" ปรากฏขึ้นสำหรับประเภทเนื้อหานั้นดังนั้นคุณสามารถลบออกจากผู้ดูแลระบบได้

หวังว่านี่จะช่วยใครซักคน!


1
หากต้องการชี้แจงสิ่งนี้จะไม่ลบประเภทเนื้อหา ทำให้ลิงก์ 'ลบ' พร้อมใช้งานในหน้ารายชื่อประเภทเนื้อหา ขอบคุณ @ Ivanhoe123!
doub1ejack

1
นอกจากนี้ฉันไม่สามารถทำได้ในขณะที่เปิดใช้งานโมดูลฟีเจอร์ของฉัน แต่หลังจากปิดการใช้งาน & ถอนการติดตั้ง (ฉันใช้ drush) สิ่งนี้ทำงานได้อย่างสวยงาม ทางลัด: ใช้โมดูล devel โดยวางเนื้อหาของฟังก์ชันนี้ลงใน / devel / php เมื่อต้องการลบชนิดเนื้อหาโดยทางโปรแกรมเพิ่มnode_type_delete($ctype); หลังจากเคียวรีใน for for วนซ้ำ
doub1ejack

ขอบคุณสำหรับรหัสนั้น หลังจากเห็นรหัสนี้ฉันแก้ไขฐานข้อมูลของฉันโดยใช้ phpMyAdmin และแก้ไขตาราง "node_type" จากนั้นฉันก็พบว่าประเภท contect ฉัน waned เพื่อลบและตั้งค่า "Custom" เพื่อ "1" และฟินนาลีฉันลบมันออกจาก Drupal Administration
ANDiTKO

2
mysql> UPDATE node_type SET custom = 1, locked = 0 WHERE type = '<content type machine name>';
Marco Lazzeri

@ โซลูชันของ MarcoLazzeri ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันและดีกว่าการอัปเดตโมดูลคุณลักษณะของฉันเพียงเพื่อถอนการติดตั้ง
โดนัท

11

สำหรับฉันทางออกคือการโหลดหน้าลบด้วยตนเองเนื่องจากไม่มีลิงก์ "ลบ" ในหน้าประเภทเนื้อหา ในการทำเช่นนี้คุณเพียงแค่สร้าง URL ด้วยตัวเองโดยทำตามโครงสร้าง URL เดียวกับหน้าลบสำหรับประเภทเนื้อหาอื่น:

ผู้ดูแลระบบ / โครงสร้าง / ประเภท / จัดการ / YOUR_CONTENT_TYPE_MACHINE_NAME / ลบ

สิ่งนี้นำมาสู่หน้ายืนยันการลบประเภทเนื้อหาซึ่งทำให้ฉันสามารถลบประเภทเนื้อหาได้

สำหรับการอ้างอิงดูหัวข้อนี้ใน Drupal.org:

https://drupal.org/node/1055460#comment-7297680

ความนับถือ,

@cmsdave


ฉันเพิ่งเปลี่ยนลิงค์ประเภทเนื้อหาที่แสดงในตอนท้ายเพื่อลบและสามารถลบประเภทเนื้อหาได้โดยไม่มีปัญหา วิธีนี้ใช้ได้ผล!
cateye

หมายเหตุ : ก่อนหน้านี้จะใช้งานได้ฉันต้องแก้ไข.infoไฟล์ของคุณสมบัติและลบประเภทเนื้อหาจากนั้นจะลบจริง
Duncanmoo

3

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

// Delete taxonomies.
$machine_names = array('taxonomy_a', 'taxonomy_b');
foreach ($machine_names as $machine_name) {
  $taxonomy = taxonomy_vocabulary_machine_name_load($machine_name);
  taxonomy_vocabulary_delete($taxonomy->vid);
}

1

โซลูชันอื่นที่ทำงานให้ฉันโดยตรงกับฐานข้อมูลในไซต์การพัฒนาของฉัน อย่าลืมสำรองฐานข้อมูลของคุณเสมอ

หากต้องการลบประเภทเนื้อหาที่สร้างโดยฟีเจอร์ # 16 สิ่งที่ Nedjoแนะนำคือสิ่งต่อไปนี้:

  • ปิดใช้งานคุณสมบัติ บางครั้งฉันพบปัญหาเกี่ยวกับสิ่งนี้ - คุณสมบัติจะไม่ปิดใช้งาน ในกรณีนี้ให้ลบโค้ดโมดูลคุณลักษณะ
  • กำหนดชื่อเครื่องของประเภทเนื้อหาที่จะลบเช่น 'mytype'
  • ในฐานข้อมูลให้ย้อนกลับค่าตาราง node_type เป็นค่าดีฟอลต์ราวกับว่าชนิดเนื้อหาถูกสร้างขึ้นด้วยตนเองผ่าน UI:

mysql> UPDATE node_type SET module = 'node', custom = 1, modified = 1, locked = 0 WHERE type = 'mytype';

  • ล้างแคชเพื่อให้แน่ใจว่ามีการเปลี่ยนแปลงประเภทเนื้อหา
  • ผ่าน UI ที่ผู้ดูแลระบบ / โครงสร้าง / ประเภทลบประเภทเนื้อหา

0

หากคุณใช้โมดูล admin_menuคุณจะยังคงเห็นลิงก์ลบในเมนูแบบเลื่อนลงโครงสร้าง / ประเภทเนื้อหา / [ชื่อประเภทเนื้อหา] / ลบแม้ว่าจะไม่ปรากฏในหน้าประเภทเนื้อหาก็ตาม

ฉันจะบอกว่ามันค่อนข้างปลอดภัยที่จะใช้ลิงค์ลบนี้หากคุณมั่นใจว่าไม่มีการอ้างอิงอื่น ๆ ประเภทเนื้อหานี้อีกต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.