ExpressionEngine 1 для ExpressionEngine 2 Обновление с помощью поля файла nGen
Я собираюсь сделать ExpressionEngine v1 для ExpressionEngine v2 Upgrade с большим количеством данных, хранящихся в полях файла nGen.
Каковы шаги, которые необходимо предпринять для предварительного и пост-обновления, чтобы эти данные работали корректно с полем файла EE2 SafeCracker?
Ответы
Ответ 1
После обновления до 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" на свой идентификатор полей файла (вы можете получить его из exp_channel_fields) и Y с идентификатором предпочтения загрузки, в котором установлено поле файла nGen.
Если у вас установлена матрица в EE1, обновите ее до Matrix 2/EE2 и сделайте то же самое для любых столбцов ex-nGen File, используя этот SQL-запрос:
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 == ваш идентификатор столбца Matrix (вы можете получить это из exp_matrix_cols), а Y == ваш идентификатор предпочтения загрузки.
(Кредит идет Rob Sanchez, конечно.)
Ответ 2
Я написал это для сайта, а здесь нет поддержки матрицы, но он работает быстро и правильно для регулярных полей.
Для массива в левом столбце указывается каждый идентификатор поля, который вы изменили на предварительное обновление текста, и его необходимо изменить на обновление после публикации файла, а справа - это X of filedir_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';
Ответ 3
У меня есть целый пост в блоге об этом, основанный на моем опыте и потоке, на который ссылается Брэндон в своем ответе. Сообщение в блоге здесь.
Ответ 4
Я отправил кое-что в GitHub, который должен помочь кому-либо, кто сталкивается с этим процессом. Это код шаблона EE1 (ему нужно включить PHP на выходе или вводе), который показывает две вещи:
Во-первых, он отображает табличный обзор всех настраиваемых полей в системе. Это для справки, чтобы помочь, когда вы пытаетесь найти все экземпляры определенного типа полей. Он охватывает нормальные поля EE, полевые типы Fieldframe и даже столбцы Matrix.
Во-вторых, каждый раз, когда встречается поле файла nGen, шаблон генерирует код MySQL, который вам нужно использовать (после перехода на EE2), чтобы изменить данные в указанных полях в формате, требуемом исходным полем файла EE2. Эти запросы отображаются только, а не запускаются. Идея заключается в том, что вы где-то сохраняете запросы, запускаете обновление EE1- > EE2, а затем запускаете сохраненные запросы при готовности.
Разумеется, резервное копирование, резервное копирование, BACKUP. Код шаблона каким-либо образом не изменяет вашу базу данных сайта, и был протестирован и отображает то, что должно быть просто отлично. Однако, в то время как запросы MySQL, которые он создает (для копирования и запуска вручную позже), соответствуют тому, что Брэндон рекомендовал в своем ответе, мне еще предстоит проверить эти запросы в действии.
Ответ 5
Лучший способ сделать это - тщательно проработать и сделать резервные копии своей базы данных на каждом шаге. Ранее я написал сообщение в блоге, но подробно остановимся.
Шаг 1: перед запуском вашего обновления измените все типы полей ngen на текст, не беспокойтесь, данные не будут потеряны.
Шаг 2: Следующее обновление ExpressionEngine в соответствии с официальными документами, а затем вернитесь в каждое поле и измените их на первый тип файла сторон.
Следующий шаг включает в себя немного манипуляции с базой данных, но он просто копирует и вставляет, поэтому не беспокойтесь.
Шаг 3: Сделайте резервную копию своей базы данных, прежде чем приступить к выполнению на всякий случай.
Шаг 4: Следующий шаг зависит от того, было ли ваше исходное поле файла nGen в стандартном поле Channel или в поле Matrix.
Теперь перейдите в свою базу данных и замените "X" на свой идентификатор полей файла (вы можете получить это из exp_channel_fields), а Y с идентификатором предпочтения загрузки, в который было установлено поле файла nGen.
(Чтобы найти свой идентификатор предпочтения загрузки на панели управления, перейдите в раздел "Содержимое" > "Файлы" > "Настройки загрузки файлов". Выберите столбец идентификатора слева, который соответствует месту загрузки файла.)
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 == Ваш идентификатор столбца Matrix (вы можете получить его из exp_matrix_cols), а Y == ваш идентификатор предпочтения загрузки.
Кредит Брэндону Келли и Робу Санчесу.
Кроме того, эту же процедуру можно использовать для других надстроек, которые не существуют в EE2. Преобразуйте в текст перед обновлением, а затем при необходимости переведите в новый эквивалентный тип поля. Для получения дополнительной помощи: Нажмите здесь