nGenファイルフィールドに保存されている大量のデータを使用して、ExpressionEnginev1からExpressionEnginev2へのアップグレードを実行しようとしています。
このデータをEE2SafeCrackerFileフィールドで正しく機能させるために、アップグレードの前後に実行する必要のある手順は何ですか?
nGenファイルフィールドに保存されている大量のデータを使用して、ExpressionEnginev1からExpressionEnginev2へのアップグレードを実行しようとしています。
このデータをEE2SafeCrackerFileフィールドで正しく機能させるために、アップグレードの前後に実行する必要のある手順は何ですか?
EE2にアップグレードした後、各ex-nGenファイルフィールドを見つけて、そのフィールドタイプをファイルに変更し、次の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_%'
「X」をファイルフィールドのID(exp_channel_fieldsから取得できます)に置き換え、YをnGenファイルフィールドが設定されたアップロード設定IDに置き換えます。
マトリックスがEE1にインストールされている場合は、マトリックス2 / EE2にアップグレードし、代わりに次のSQLクエリを使用して、すべてのex-nGenファイル列に対して同じことを行います。
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 ==マトリックス列ID(exp_matrix_colsから取得できます)、Y==アップロード設定IDです。
(もちろん、クレジットはRob Sanchezに送られます。)
私はこれをサイト用にも作成しました。ここではマトリックスのサポートはありませんが、通常のフィールドではすばやく正しく機能します。
アレイの場合、左側の列はアップグレード前にテキストに変更した各フィールドIDであり、アップグレード後にファイルに変更する必要があります。右側は、添付するファイルアップロードディレクトリのfiledir_XのXです。分野
// 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';
私の経験とブランドンが彼の回答で参照したスレッドに基づいた、これに関するブログ投稿全体があります。ここにブログ投稿。
このプロセスに直面している人を助けるために、GitHubに何かを投稿しました。2つのことを示すのはEE1テンプレートコードです(出力または入力のいずれかでPHPを有効にする必要があります)。
まず、システム内のすべてのカスタムフィールドの概要を表形式で表示します。これは参照用であり、特定のフィールドタイプのすべてのインスタンスを検索しようとしているときに役立ちます。通常のEEフィールド、Fieldframeフィールドタイプ、さらにはMatrix列もカバーします。
次に、nGenファイルフィールドが検出されるたびに、テンプレートは、( EE2にアップグレードした後)使用する必要のあるMySQLコードを生成して、これらのフィールドのデータをEE2のネイティブファイルフィールドで必要な形式に変更します。これらのクエリは表示されるだけで、実行されません。クエリをどこかに保存し、EE1-> EE2アップグレードを実行し、準備ができたら保存したクエリを実行するという考え方です。
言うまでもなく、バックアップ、バックアップ、バックアップ。テンプレートコードは、サイトデータベースを変更することはなく、テスト済みであり、正常に機能するはずのものを表示します。ただし、生成されるMySQLクエリ(後でコピーして手動で実行するため)は、ブランドンが回答で推奨したものと一致しますが、実際にそれらのクエリを実際にテストすることはまだできていません。
これを行う最良の方法は、慎重に進めて、各ステップでデータベースのバックアップを作成することです。私は以前にこれについてブログ投稿を書きましたが、さらに詳しく説明します。
ステップ1:アップグレードを実行する前に、すべてのngenフィールドタイプをテキストに変更してください。データが失われないことを心配しないでください。
ステップ2:次に、公式ドキュメントに従ってExpressionEngineをアップグレードしてから、各フィールドに戻り、ファーストパーティのファイルタイプに変更します。
次のステップでは、データベースを少し操作しますが、コピーして貼り付けるだけなので、心配する必要はありません。
ステップ3:万が一の場合に備えて、先に進む前にデータベースのバックアップを作成してください。
ステップ4:この次のステップは、元のnGenファイルフィールドが標準のチャネルフィールドにあったか、マトリックスフィールドにあったかによって異なります。
次に、データベースに移動し、「X」をファイルフィールドのID(exp_channel_fieldsから取得できます)に置き換え、YをnGenファイルフィールドが設定されたアップロード設定IDに置き換えます。
(コントロールパネルでアップロード設定IDを見つけるには、[コンテンツ]>[ファイル]>[ファイルアップロード設定]に移動します。左側にあるファイルのアップロード場所と一致するID列を選択します。)
4a:標準のチャネルフィールドを更新する場合は、このクエリを使用します
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:マトリックスの場合、フィールドは代わりにこのクエリを実行します
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 ==マトリックス列ID(exp_matrix_colsから取得できます)、Y==アップロード設定ID。
BrandonKellyとRobSanchezの功績によるものです。
さらに、EE2に存在しない他のアドオンにも同じ手順を使用できます。アップグレード前にテキストに変換してから、必要に応じてアップグレード後に新しい同等のフィールドタイプに変換します。さらにヘルプが必要な場合:ここをクリックしてください