Impossibile eliminare il tipo di contenuto della funzione dopo la disinstallazione della funzione


Risposte:


15

Soluzione

Utilizzando un hook_uninstall()file FEATURE_NAME.install e modificando lo stato del tipo di contenuto, il sistema ritiene che si tratti di un tipo di contenuto personalizzato sbloccato.

L'ho pubblicato anche su 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();

}

Questo farà apparire il pulsante "Elimina" per quel tipo di contenuto, in modo da poterlo eliminare dall'amministratore.

Spero che questo aiuti qualcuno!


1
Per chiarire, ciò non cancella il tipo di contenuto; rende disponibile il link "Elimina" nella pagina di elenco dei tipi di contenuto. Grazie @ Ivanhoe123!
doub1ejack,

1
Inoltre, non sono stato in grado di farlo mentre il mio modulo funzionalità era abilitato, ma dopo aver disabilitato e disinstallato (ho usato drush) ha funzionato magnificamente. Scorciatoia: usa il modulo devel rilasciando il contenuto di questa funzione in / devel / php. Per cancellare a livello di codice il tipo di contenuto, aggiungere node_type_delete($ctype); dopo la query nel ciclo for.
doub1ejack,

Grazie per quel codice. Dopo aver visto questo codice ho modificato il mio database usando phpMyAdmin e modificato la tabella "node_type". Poi ho trovato il tipo di oggetto che volevo eliminare e ho impostato il valore "Personalizzato" su "1". E alla fine l'ho cancellato dall'amministrazione Drupal.
ANDiTKO

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

La soluzione di MarcoLazzeri ha funzionato perfettamente per me ed era molto meglio che dover aggiornare il mio modulo di funzionalità solo per disinstallarlo.
Ciambella

11

Per me, la soluzione è stata quella di caricare manualmente la pagina di eliminazione poiché non esiste un link "Elimina" nella pagina dei tipi di contenuto. Per fare ciò, devi solo costruire l'URL da solo seguendo la stessa struttura dell'URL della pagina di eliminazione per altri tipi di contenuto:

admin / struttura / tipo / gestire / YOUR_CONTENT_TYPE_MACHINE_NAME / delete

Ciò ha portato alla pagina di conferma dell'eliminazione del tipo di contenuto, che mi ha permesso di eliminare il tipo di contenuto.

Per riferimento, vedere questa discussione su Drupal.org:

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

Saluti,

@cmsdave


Ho appena cambiato il link del tipo di contenuto di visualizzazione alla fine per eliminare e potrei rimuovere il tipo di contenuto senza problemi. Questa soluzione funziona!
Cateye,

Nota : prima che funzionasse, dovevo modificare il .infofile della funzione e rimuovere il tipo di contenuto, quindi sarebbe effettivamente eliminato.
Duncanmoo,

3

Il metodo sopra non elimina le tassonomie, ma ciò può essere ottenuto aggiungendo quanto segue dopo aver disabilitato e disinstallato il modulo:

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

Un'altra soluzione che ha funzionato per me direttamente sul database nel mio sito di sviluppo. Ricorda di eseguire sempre il backup del database.

Per eliminare manualmente un tipo di contenuto creato da una funzione # 16 ciò che Nedjo suggerisce è il seguente:

  • Disabilita la funzione. A volte ho riscontrato problemi con questo: una funzione non verrà disabilitata. In questo caso, rimuovere il codice del modulo funzione.
  • Determinare il nome della macchina del tipo di contenuto da eliminare, ad es. "Mytype".
  • Nel database, ripristinare i valori della tabella node_type sui valori predefiniti come se il tipo di contenuto fosse creato manualmente tramite l'interfaccia utente:

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

  • Cancella le cache per garantire che sia disponibile la modifica del tipo di contenuto.
  • Tramite l'interfaccia utente in admin / struttura / tipi, eliminare il tipo di contenuto.

0

Se usi il modulo admin_menu , vedrai comunque i collegamenti di eliminazione nel menu a discesa Struttura / Tipi di contenuto / [nome del tipo di contenuto] / Elimina, anche se non sono visualizzati nella pagina dei tipi di contenuto.

Direi che è abbastanza sicuro usare questo link di cancellazione se si assicura che non ci sono più altri riferimenti a questo tipo di contenuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.