ExpressionEngine 1 до ExpressionEngine 2 Обновление с помощью поля файла nGen
Я собираюсь сделать обновление ExpressionEngine v1 до ExpressionEngine v2 с большим количеством данных, хранящихся в полях файла nGen.
Какие шаги мне нужно предпринять до и после обновления, чтобы эти данные правильно работали с полем файла Ee2 SafeCracker?
5 ответов:
После обновления до EE2 найдите каждое поле ex-nGen File, измените его тип поля на File и выполните следующий 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.
Если вы установили Matrix в EE1, обновите до Matrix 2/EE2 и сделайте то же самое для любых столбцов файла ex-nGen, используя вместо этого следующий 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 = = Ваш идентификатор столбца матрицы (вы можете получите это от exp_matrix_cols), и Y == Ваш идентификатор предпочтения загрузки.
(заслуга принадлежитРобу Санчесу , конечно.)
Я написал это и для сайта - здесь нет поддержки матрицы, но она работает быстро и правильно для обычных полей.
Для массива левый столбец-это идентификатор каждого поля, который вы изменили на text pre-upgrade, и который необходимо изменить на file post upgrade, а правая сторона-это X filedir_X для файла upload dir, который вы хотите прикрепить к полю
// 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, что должно помочь любому, кто столкнется с этим процессом. Это код шаблона EE1 (он должен быть включен PHP либо на выходе, либо на входе), который показывает две вещи:
Во-первых, он отображает табличный обзор всех пользовательских полей в системе. Это для справки, чтобы помочь, когда вы пытаетесь найти все экземпляры определенного типа поля. Она охватывает нормального поля УО, упорядочивания по результатам вычисления Fieldframe, и даже столбцы матрицы.
Во-вторых, каждый раз, когда поле файла nGen шаблон генерирует код MySQL, который вам нужно будет использовать (после обновления до EE2), чтобы изменить данные в указанных полях в формат, требуемый полем собственного файла EE2. эти запросы только отображаются, а не выполняются . Идея заключается в том, что вы сохраняете запросы где-то, выполняете обновление EE1 - >EE2, а затем выполняете сохраненные запросы, когда они готовы.
Само собой разумеется, резервное копирование, резервное копирование, резервное копирование. Код шаблона никоим образом не изменяет базу данных вашего сайта и был проверено и отображает то,что его должно просто отлично. Однако, в то время как запросы MySQL, которые он генерирует (для вас, чтобы скопировать и вручную запустить позже), соответствуют тому, что Брэндон рекомендовал в своем ответе, мне еще предстоит проверить эти запросы в действии.
Лучший способ сделать это-действовать осторожно и делать резервные копии вашей базы данных на каждом этапе пути. Я уже писал об этом в своем блоге, но буду развивать дальше.
Шаг 1: Перед запуском обновления измените все типы полей ngen на текстовые, не волнуйтесь, что данные не будут потеряны. Шаг 2: Далее обновите ExpressionEngine в соответствии с официальными документами, а затем вернитесь в каждое поле и измените их на первый тип файла.Следующий шаг включает в себя немного манипуляций с базой данных, но это просто копирование и вставка, так что не волнуйтесь.
Шаг 3: сделайте резервную копию своей базы данных, прежде чем продолжить, на всякий случай.Шаг 4: Этот следующий шаг зависит от того, было ли ваше исходное поле файла nGen в поле стандартного канала или в поле матрицы.
Теперь войдите в базу данных и замените "X" на идентификатор поля файла (вы можете получить его из exp_channel_fields), а Y-на идентификатор предпочтения загрузки, который был установлен в поле файла nGen к.
(чтобы найти идентификатор предпочтения загрузки в панели управления, перейдите в раздел содержимое > файлы > настройки загрузки файлов. Выберите столбец 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 = = Ваш идентификатор столбца матрицы (вы можете получить его из exp_matrix_cols), а Y = = Ваш идентификатор предпочтения загрузки.
Заслуга Брэндона Келли и Роба Санчес.
Кроме того, та же процедура может быть использована для других дополнений, которые не существуют в EE2. Преобразовать в текст перед обновлением, а затем преобразовать в новое эквивалентное поле типа post upgrade, если это необходимо. Для получения дополнительной справки: Нажмите здесь