2012-10-24 4 views

risposta

21

Dopo l'aggiornamento a EE2, trovare ogni campo File ex NGEN e cambiare il suo tipo di campo su file, ed eseguire questa query SQL:

UPDATE exp_channel_data 
SET field_id_X = CONCAT('{filedir_Y}', field_id_X) 
WHERE field_id_X != '' 
AND field_id_X NOT LIKE '{filedir_%' 

Sostituire “X” con l'identificativo del tuo campo File (è possibile ottenere da exp_channel_fields), e Y con l'ID di preferenza di caricamento su cui è stato impostato il campo file nGen.

Se aveva Matrix installato in EE1, l'aggiornamento a Matrix 2/EE2 e fare lo stesso per tutte le colonne di file ex NGEN, usando questa query SQL invece:

UPDATE exp_matrix_data 
SET col_id_X = CONCAT('{filedir_Y}', col_id_X) 
WHERE col_id_X != '' 
AND col_id_X NOT LIKE '{filedir_%' 

Anche in questo caso, X == tua Matrix ID colonna (puoi ottenerlo da exp_matrix_cols) e Y == l'ID preferenza caricamento.

(merito va a Rob Sanchez, ovviamente.)

+0

Perfetto. Grazie, Brandon! Io uso Matrix sul sito. –

5

Ho un intero post su questo blog che ha sede fuori della mia esperienza e il filo che Brandon fa riferimento nella sua risposta. Blog post here.

+0

Leggendolo ora. –

6

Ho scritto questo anche per un sito, senza supporto per le matrici qui, ma funziona rapidamente e correttamente per i campi regolari.

Per la matrice, la colonna di sinistra è ogni ID di campo che è stato modificato in pre-aggiornamento del testo e deve essere modificato in aggiornamento del file, mentre il lato destro è X di filedir_X per la directory di caricamento del file che si desidera da allegare al campo

// Insert file upload directories 

$array = array(
    '16' => '1', 
    '22' => '1', 
    '121' => '3', 
    '58' => '1', 
    '67' => '1', 
    '68' => '1', 
    '71' => '1', 
    '76' => '1', 
    '78' => '1', 
    '94' => '1', 
    '99' => '1', 
    '108' => '3', 
    '109' => '3', 
    '110' => '3', 
    '139' => '1' 
    ); 

foreach($array as $field_id => $dir_id) { 

    $q_entries = $this->EE->db->query("SELECT entry_id, field_id_{$field_id} as 'field' from exp_channel_data where field_id_{$field_id} != '' order by entry_id asc"); 

     if ($q_entries->num_rows() > 0) { 

      echo '<h3>field_id_'.$field_id.'</h3>'; 

      foreach($q_entries->result_array() as $entry) { 

       echo $entry['entry_id']; 

       $filename = trim('{filedir_'.$dir_id.'}'.$entry['field']); 

       echo ' - '.$filename.'<br/>'; 

       $data = array(
        'field_id_'.$field_id => $filename, 
        ); 
       $sql = $this->EE->db->update_string('exp_channel_data', $data, "entry_id = '{$entry['entry_id']}'"); 
       $this->EE->db->query($sql); 

      } 
     } 

} 

echo 'done'; 
0

Ho posted something to GitHub che dovrebbe aiutare chiunque deve affrontare questo processo. È un codice modello EE1 (richiede PHP abilitato su output o input) che mostra due cose:

In primo luogo, visualizza una panoramica tabulare di tutti i campi personalizzati nel sistema. Questo è per riferimento, per aiutare quando stai cercando di trovare tutte le istanze di un certo tipo di campo. Copre i normali campi EE, fieldtypes Fieldframe e persino le colonne Matrix.

In secondo luogo, ogni volta che si incontra un campo File NGEN, il modello genera il codice di MySQL è necessario utilizzare (dopo l'aggiornamento a EE2) per modificare i dati in detti campi al formato richiesto da EE2 del nativo Campo file Queste query vengono visualizzate solo, non eseguite. L'idea è di salvare le query da qualche parte, eseguire l'aggiornamento EE1-> EE2 e quindi eseguire le query salvate quando sono pronte.

Inutile dire backup, backup, BACKUP. Il codice del modello non modifica in alcun modo il database del tuo sito ed è stato testato e mostra ciò che dovrebbe essere corretto. Tuttavia, mentre le query MySQL che genera (per voi per copiare ed eseguire manualmente in un secondo momento) corrispondono a ciò che è Brandon recommended in his answer, devo ancora testare effettivamente queste query in azione.

+0

Solo per la necessità di questo - grazie mille! –

+0

Hah! Cosa succede intorno ... Ho imparato l'EE nel 2007 dal tuo tutorial "Costruire un sito web della Chiesa", quindi sono felice di essere stato in grado di contribuire con qualcosa! ;) – Sandwich

+0

Ehi - mi sto solo muovendo per poterlo fare. Lo script non sta visualizzando i miei campi di file nGen e non sta generando l'SQL che vedo nei tuoi esempi. Sono ancora in EE1.7.1 e non ho convertito alcun tipo di campo. nGen/Matrix sembra funzionare correttamente poiché posso aggiungere una nuova colonna Matrix con un nuovo campo nGen File. –

0

Il modo migliore per eseguire questa operazione è procedere con attenzione e eseguire backup del database in ogni fase del processo. In precedenza ho scritto un post sul blog ma elaborerò ulteriormente.

Passaggio 1: prima di eseguire l'aggiornamento, modificare tutti i tipi di campo di ngen in testo, non preoccuparti, i dati non andranno persi.

Passaggio 2: Prossimo aggiornamento di ExpressionEngine come da documentazione ufficiale e quindi tornare in ogni campo e modificarli nel tipo di file primo partito.

Il passaggio successivo comporta un po 'di manipolazione del database, ma è solo copia e incolla quindi non preoccuparti.

Passaggio 3: eseguire un backup del database prima di procedere nel caso.

Passaggio 4: Questo passaggio successivo dipende dal fatto che il campo del file nGen originale si trovava in un campo canale standard o in un campo matrice.

Ora vai nel tuo database e sostituisci "X" con l'ID del campo del tuo file (puoi farlo da exp_channel_fields), e Y con l'ID di preferenza di caricamento su cui è stato impostato il campo del file nGen.

(Per trovare il caricamento preferenza ID nel pannello di controllo, andare a Contenuti> File> Carica file Preferenze scegliere la colonna ID di sinistra corrispondente alla posizione di caricamento del file..)

4a: Se l'aggiornamento di serie Canale campi, utilizzare questa query

UPDATE exp_channel_data 
    SET field_id_X = CONCAT('{filedir_Y}', field_id_X) 
    WHERE field_id_X != '' 
    AND field_id_X NOT LIKE '{filedir_%' 

4b: Per matrice, campi eseguire questa query invece

UPDATE exp_matrix_data 
    SET col_id_X = CONCAT('{filedir_Y}', col_id_X) 
    WHERE col_id_X != '' 
    AND col_id_X NOT LIKE '{filedir_%' 

X == tua Matrix colonna ID (è possibile ottenere tha t da exp_matrix_cols), e Y == il tuo ID preferenza di caricamento.

Credito a Brandon Kelly e Rob Sanchez.

Inoltre, la stessa procedura può essere utilizzata per altri componenti aggiuntivi che non esistono in EE2. Converti in testo prima dell'aggiornamento e poi converti in un nuovo tipo di campo equivalente dopo l'aggiornamento se necessario. Per ulteriori informazioni: Click here