【问题标题】:ExpressionEngine 1 to ExpressionEngine 2 Upgrade with nGen File Field使用 nGen 文件字段从 ExpressionEngine 1 升级到 ExpressionEngine 2
【发布时间】:2012-10-14 00:53:32
【问题描述】:

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

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

【问题讨论】:

    标签: expressionengine


    【解决方案1】:

    执行此操作的最佳方法是谨慎行事,并在每一步都备份您的数据库。我之前写过一篇关于此的博文,但会进一步详细说明。

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

    感谢 Brandon Kelly 和 Rob Sanchez。

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 哈!事情发生了……我在 2007 年从您的“建立教会网站”教程中学习了 EE,所以我很高兴能够回馈一些东西! ;)
      • 嘿 - 刚刚开始能够运行它。该脚本没有看到我的 nGen 文件字段,也没有生成我在您的示例中看到的 SQL。我在 EE1.7.1 中还没有转换任何字段类型。 nGen / Matrix 似乎运行正常,因为我可以添加一个带有新 nGen 文件字段的新 Matrix 列。
      • 模板是否启用了 PHP?
      • 好吧,不要在这里乱七八糟,而是在 GitHub 上的 repo 中打开一个问题。包括尽可能多的信息会有所帮助,尤其是。诸如PHP版本之类的东西。我刚刚在我仍然拥有 1.7.1 的网站上试用了 repo,除了没有定义 BR 常量之外,它工作正常。
      • 会做...可能今晚早些时候。谢谢!
      【解决方案3】:

      我也是为一个站点编写的 - 这里不支持矩阵,但它可以快速且正确地用于常规字段。

      对于数组,左边一栏是升级前你改成文本的每个字段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';
      

      【讨论】:

        【解决方案4】:

        我有一篇完整的博客文章,这是基于我的经验和 Brandon 在他的回答中引用的主题。 Blog post here.

        【讨论】:

          【解决方案5】:

          升级到 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。)

          【讨论】:

          • 完美。谢谢布兰登!我确实在网站上使用了 Matrix。
          猜你喜欢
          • 2012-10-14
          • 2011-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-09
          • 1970-01-01
          相关资源
          最近更新 更多