Perché non riesco a eliminare determinati tipi di contenuto?


19

Ho un sito Drupal 7 e nel menu Tipi di contenuto, solo alcuni tipi hanno un link "Elimina" nella colonna "Operazioni".

Tutti i tipi di contenuto hanno i collegamenti per 'modifica', 'gestisci campi' e 'gestisci display', ma solo alcuni hanno 'elimina', mentre altri no.

Ho controllato le mie autorizzazioni per il mio utente e ce l'ho Administer content types- ma questa sembra essere un'autorizzazione globale per tutti i tipi di contenuto, quindi ancora non capisco perché alcuni siano cancellabili mentre altri no.

Perché solo alcuni tipi di contenuto hanno un'operazione di eliminazione?

Risposte:


15

Puoi eliminare solo i tipi di contenuto creati manualmente (tramite admin/structure/types/add).

I tipi di contenuto che non dispongono di un collegamento per l'eliminazione vengono creati a livello di codice dai moduli installati e verranno eliminati dopo averli disinstallati .


5
Nel caso in cui qualcuno sia ancora qui - ho un tipo di contenuto che è stato creato a livello di codice, ma è ancora in giro per il mio sito anche dopo che ho eliminato tutte le sue tracce dal codice del sito - ci sono ancora voci per esso in {menu_link } e {menu_router} e simili, quindi viene ancora visualizzato nei menu "Crea contenuto" e simili. Evidentemente qualcosa si è incasinato lungo la strada; c'è un buon modo per sbarazzarsi di questo poco di (ugh) hackerare direttamente il database, che mi piacerebbe davvero non fare?
Jim Miller,

Ho lo stesso problema. Su un sito multiplo, ho esportato un tipo di contenuto con l'aiuto di Funzioni ed esportato su un altro. Ora ho rimosso i moduli correlati ma il tipo di contenuto è ancora qui.

3
Probabilmente hai, ma stai solo verificando: hai disinstallato i moduli oltre a disabilitarli semplicemente ?
user56reinstatemonica8


Non so se questa risposta sia stata corretta in precedenza, ma certamente non è più corretta con Drupal 7.23. I tipi di contenuto possono essere eliminati, indipendentemente da come sono stati creati.
Kari Kääriäinen,

30

Eliminali andando all'URL /admin/structure/types/manage/content-machine-name/delete

content-machine-name è il nome della macchina del tipo di contenuto che si desidera eliminare. Inoltre, assicurarsi di utilizzare i trattini nel nome della macchina anziché i caratteri di sottolineatura.


1
Fantastico, ha funzionato molto bene! Ho installato Enterprise Blog ed Enterprise FAQ qualche tempo fa, ma ho finito per non usarli. La schermata Tipi di contenuto non offriva un'opzione per eliminare quei tipi di contenuto, quindi il tuo metodo è stato un gradito sollievo!
hockey2112

1
Non mi aspettavo che funzionasse, ma ha funzionato magnificamente. Ottimo per rimuovere i tipi di contenuto aggiunti utilizzando il Modulo funzionalità.
Citricguy,

Sì! Questo consiglio è stato fantastico. Funziona bene.
Boriana Ditcheva,

Questa è la soluzione reale :)
petergus

Questo funziona, tuttavia, se il link "elimina" non viene visualizzato in modo naturale, significa che potrebbe non essere sicuro eliminarlo. Una volta che non ci sono tipi di contenuto che lo utilizzano, nessuna dipendenza, nessun contenuto memorizzato nella cache, variabili e funzionalità che lo utilizzano, il collegamento verrà visualizzato. Quindi, consiglio di usarlo con cautela.
Christia,

2

Come indicato da hpn È possibile eliminare solo i tipi di contenuto creati manualmente.

Ma a volte le cose non vanno per il meglio. I seguenti passaggi hanno aiutato a eliminare i tipi di contenuto. È necessario eseguire il backup del database prima di provare questo.

[Per eliminare manualmente un tipo di contenuto creato 1 # 16 suggerito da Nedjo in drupal.org:

  • 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.

I passaggi precedenti sono ciò che mi ha aiutato prima quando ho riscontrato questi problemi.


1

La disabilitazione del modulo che fornisce il tipo di contenuto dovrebbe essere il primo passo. Se il tipo di contenuto è stato fornito da una funzione, dovrai comunque eliminare il tipo di contenuto.

Per una funzionalità ben realizzata, la possibilità di eliminare un tipo di contenuto verrà dopo che la funzionalità è disabilitata. Questo è preferibile rispetto all'eliminazione di un tipo di contenuto da una funzione, poiché la funzionalità corrente o i futuri aggiornamenti a quella funzione potrebbero richiedere il tipo di contenuto.

Si noti che è possibile disabilitare i moduli funzione (admin / moduli) anche quando l'interfaccia Funzionalità (piuttosto stupidamente) afferma che non può disabilitare un modulo a causa di conflitti.

E se non vuoi fare nulla attraverso l'interfaccia e vuoi solo fare il codice, ecco un esempio di un hook di aggiornamento che disabiliterà le funzionalità Commons Wiki e Posts e quindi eliminerà i tipi di contenuto che forniscono.

<?php
/**
 * Remove unused features and content types.
 */
function example_update_7001() {
  // Delete one (spam) piece of wiki content.
  node_delete(2731);
  // Disable Feature modules.
  module_disable(array('commons_wikis_pages', 'commons_wikis', 'commons_posts'));
  // Delete content types.
  node_type_delete('wiki');
  node_type_delete('post');
}
?>
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.