ExpressionEngine 1到ExpressionEngine 2使用nGen文件字段升级

时间:2012-10-24 00:49:40

标签: expressionengine

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

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

5 个答案:

答案 0 :(得分:21)

升级到EE2后,找到每个ex-nGen文件字段并将其字段类型更改为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文件列执行相同的操作,而不是使用此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。)

答案 1 :(得分: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';

答案 2 :(得分:5)

我有一篇关于此的博文,这篇博文基于我的经验和布兰登在答案中引用的主题。 Blog post here

答案 3 :(得分:0)

posted something to GitHub应该帮助任何面对这个过程的人。这是EE1模板代码(它需要在输出或输入上启用PHP),它显示了两件事:

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

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

毋庸置疑,备份,备份,备份。模板代码不会以任何方式修改您的站点数据库,并且已经过测试并显示它应该没问题。但是,虽然它生成的MySQL查询(供您复制并稍后手动运行)与Brandon recommended in his answer匹配,但我还没有真正测试这些查询。

答案 4 :(得分:0)

执行此操作的最佳方法是在每个步骤中仔细进行并备份数据库。我之前写过一篇关于此的博文,但会进一步阐述。

步骤1:在运行升级之前,将所有ngen字段类型更改为文本,不要担心数据不会丢失。

步骤2:按照官方文档升级ExpressionEngine,然后返回每个字段并将其更改为第一方文件类型。

下一步涉及一些数据库操作,但它只是复制和粘贴,所以不用担心。

步骤3:在继续以防万一之前,请备份数据库。

步骤4:下一步取决于您的原始nGen文件字段是在标准通道字段还是矩阵字段中。

现在进入你的数据库并将“X”替换为你的文件字段的ID(你可以从exp_channel_fields获得),以及带有nGen文件字段设置为的上传首选项ID的Y.

(要在控制台中查找上传首选项ID,请转到内容&gt;文件&gt;文件上传首选项。选择左侧与文件上传位置匹配的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中不存在的其他附加组件。在升级之前转换为文本,然后在需要时转换为升级后的新等效字段类型。如需更多帮助:Click here