ExpressionEngine 1 до ExpressionEngine 2 Обновление с помощью поля файла nGen


Я собираюсь сделать обновление ExpressionEngine v1 до ExpressionEngine v2 с большим количеством данных, хранящихся в полях файла nGen.

Какие шаги мне нужно предпринять до и после обновления, чтобы эти данные правильно работали с полем файла Ee2 SafeCracker?

5 10

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, если это необходимо. Для получения дополнительной справки: Нажмите здесь