Özelliği kaldırdıktan sonra özellik içeriği türü silinemiyor


Yanıtlar:


15

Çözüm

hook_uninstall()FEATURE_NAME.install dosyasında bir dosya kullanarak ve içerik türünün durumunu değiştirerek sistem kilitlenmemiş, özel bir içerik türü olduğunu düşünüyor.

Bunu ayrıca d.org'da yayınladım .

<?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();

}

Bu, bu içerik türü için "Sil" düğmesinin görünmesini sağlar, böylece onu yöneticiden silebilirsiniz.

Umarım bu birine yardımcı olur!


1
Netleştirmek için, bu içerik türünü silmez; içerik türü listeleme sayfasında 'delete' bağlantısını yapar. Ivanhoe123 @ teşekkürler!
doub1ejack

1
Ayrıca, özellikler modülüm etkinken bunu yapamadım, ancak devre dışı bıraktıktan ve kaldırdıktan sonra (drush kullandım) bu çok güzel çalıştı. Kısayol: bu fonksiyonun içeriğini / devel / php içine bırakarak devel modülünü kullanın. Programlı içerik türünü silmek node_type_delete($ctype); için for döngüsündeki sorgudan sonra add ekleyin .
doub1ejack

Bu kod için teşekkürler. Bu kodu gördükten sonra veritabanımı phpMyAdmin kullanarak ve "node_type" tablosunu düzenledim. Sonra silmek ve "Özel" değerini "1" olarak ayarlamak istediğim bağlam türünü buldum. Ve finnaly, Drupal İdaresi'nden sildim.
ANDiTKO

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

@ MarcoLazzeri'nin çözümü benim için mükemmel bir şekilde çalıştı ve sadece kaldırmak için özellik modülümü güncellemekten çok daha iyiydi.
Donut

11

Benim için çözüm, içerik türleri sayfasında "delete" bağlantısı olmadığı için silme sayfasını elle yüklemek oldu. Bunu yapmak için, diğer içerik türleri için silme sayfasındaki aynı URL yapısını izleyerek URL'yi kendiniz oluşturmanız yeterlidir:

admin / yapı / türleri / / YOUR_CONTENT_TYPE_MACHINE_NAME / silme yönetmek

Bu, içerik türü silme onayı sayfasını açtı, bu da içerik türünü silmeme izin verdi.

Başvuru için Drupal.org'daki şu konuya bakın:

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

Saygılarımızla,

@cmsdave


Sonunda görünen içerik içeriği bağlantısını silmeyi yeni değiştirdim ve içerik türünü sorunsuz bir şekilde kaldırabilirim. Bu çözüm işe yarıyor!
cateye

Not : Bu işe yaramadan önce, özelliğin .infodosyasını düzenlemek ve içerik türünü kaldırmak zorunda kaldım , sonra gerçekten silindi.
Duncanmoo

3

Yukarıdaki yöntem taksonomileri silmez, ancak bu, modülü devre dışı bırakıp çıkardıktan sonra aşağıdakileri ekleyerek elde edilebilir:

// 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

Geliştirme sitemdeki veritabanına doğrudan benim için çalışan başka bir çözüm. Daima veritabanınızı yedeklemeyi unutmayın.

Nedjo'nun önerdiği şekilde # 16 özelliği ile oluşturulan içerik türünü elle silmek için :

  • Özelliği devre dışı bırakın. Bazen bu konuda sorun yaşıyorum - bir özellik devre dışı bırakılmaz. Bu durumda, özellik modülü kodunu kaldırın.
  • Silinecek içerik türünün makine ismini belirleyin, örneğin 'mytype'.
  • Veritabanında, node_type tablo değerlerini, içerik türü kullanıcı arayüzü aracılığıyla manuel olarak oluşturulmuşmuş gibi varsayılanlara döndürün:

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

  • İçerik türü değişikliğinin kullanılabilir olduğundan emin olmak için önbellekleri temizleyin.
  • Admin / structure / types içindeki UI aracılığıyla içerik türünü silin.

0

Admin_menu modülünü kullanırsanız , içerik türleri sayfasında görünmese bile açılan menü yapısı Silme / İçerik tipleri / [içerik türü adı] / Silme menüsünü göreceksiniz.

Artık bu içerik türüne başka bir referans olmadığından emin olursanız, bu silme bağlantısını kullanmanın güvenli olduğunu söyleyebilirim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.