10

我即将进行 ExpressionEngine v1 到 ExpressionEngine v2 的升级,大量数据存储在 nGen 文件字段中。

我需要在升级前和升级后采取哪些步骤才能使这些数据在 EE2 SafeCracker 文件字段中正常工作?

4

5 回答 5

21

升级到 EE2 后,找到每个 ex-nGen File 字段并将其 Field Type 更改为 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”替换为您的文件字段的 ID(您可以从 exp_channel_fields 中获取),并将 Y 替换为 nGen 文件字段设置为的上传首选项 ID。

如果您在 EE1 中安装了 Matrix,请升级到 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 列 ID(您可以从 exp_matrix_cols 获得),并且 Y == 您的上传首选项 ID。

(当然,这要归功于 Rob Sanchez。)

于 2012-10-24T00:58:57.113 回答
6

我也是为一个网站写的——这里没有矩阵支持,但它可以快速正确地用于常规字段。

对于数组,左边一栏是升级前你改成文本的每个字段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';
于 2012-10-30T20:57:13.027 回答
5

我有一篇关于此的完整博客文章,这是基于我的经验和 Brandon 在他的回答中引用的线程。博客文章在这里

于 2012-10-24T01:10:09.440 回答
0

我已经在 GitHub 上发布了一些内容,应该可以帮助任何面临这个过程的人。它是 EE1 模板代码(需要在输出或输入上启用 PHP),它显示了两件事:

首先,它显示系统中所有自定义字段的表格概览。这是供参考,以在您尝试查找某个字段类型的所有实例时提供帮助。它涵盖了普通的 EE 字段、Fieldframe 字段类型,甚至是 Matrix 列。

其次,每次遇到 nGen File 字段时,模板都会生成您需要使用的 MySQL 代码(升级到 EE2 之后),以将所述字段中的数据更改为 EE2 的本机 File 字段所需的格式。这些查询只显示,不运行。这个想法是您将查询保存在某处,运行 EE1->EE2 升级,然后在准备好时运行保存的查询。

不用说,备份,备份,备份。模板代码不会以任何方式修改您的站点数据库,并且已经过测试并显示了它应该很好的内容。然而,虽然它生成的 MySQL 查询(供您复制并稍后手动运行)与Brandon 在他的回答中推荐的内容相匹配,但我还没有实际测试这些查询。

于 2014-06-29T17:43:33.480 回答
0

做到这一点的最好方法是谨慎行事,并在每一步都备份您的数据库。我之前写过一篇关于此的博客文章,但会进一步详细说明。

第 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 == 您的 Matrix 列 ID(您可以从 exp_matrix_cols 获得),并且 Y == 您的上传偏好 ID。

感谢 Brandon Kelly 和 Rob Sanchez。

此外,相同的过程可用于 EE2 中不存在的其他附加组件。在升级前转换为文本,然后在升级后转换为新的等效字段类型(如果需要)。更多帮助:点击这里

于 2017-11-30T04:19:10.157 回答