【问题标题】:Using an object to make a folder structure使用对象制作文件夹结构
【发布时间】:2014-03-14 08:44:56
【问题描述】:

我有一个对象,其中包含来自导出的 OLAT 备份的数据(OLAT 是用 Java 编写的电子学习工具)。

现在我需要制作另一种“类型”的备份文件,即 Moodle 备份文件,以便我可以将其导入 Moodle 本身(另一种用 PHP 编写的电子学习工具)。所以我的计划是创建 Moodle 备份所需的文件夹结构,并将数据写入相应的 .xmls 和路径。

我知道这听起来很模糊,但我的问题是:创建这些文件的最佳做法是什么?例如,我需要制作一个具有这种结构的 .xml: p>

<?xml version="1.0" encoding="UTF-8"?>
<course id="8" contextid="78">
  <shortname>Test Course Short</shortname>
  <fullname>Test Course Long</fullname>
  <idnumber></idnumber>
  <summary></summary>
  <summaryformat>1</summaryformat>
  <format>topics</format>
  <showgrades>1</showgrades>
  <newsitems>5</newsitems>
  <startdate>1394668800</startdate>
  <marker>0</marker>
  <maxbytes>0</maxbytes>
  <legacyfiles>0</legacyfiles>
  <showreports>0</showreports>
  <visible>1</visible>
  <groupmode>0</groupmode>
  <groupmodeforce>0</groupmodeforce>
  <defaultgroupingid>0</defaultgroupingid>
  <lang></lang>
  <theme></theme>
  <timecreated>1394632991</timecreated>
  <timemodified>1394632991</timemodified>
  <requested>0</requested>
  <enablecompletion>0</enablecompletion>
  <completionnotify>0</completionnotify>
  <numsections>8</numsections>
  <hiddensections>0</hiddensections>
  <coursedisplay>0</coursedisplay>
  <category id="1">
    <name>Miscellaneous</name>
    <description>$@NULL@$</description>
  </category>
  <tags>
  </tags>
</course>

我知道这听起来像是基本的 PHP,但这也差不多。例如,我如何只用 PHP 制作这个文件?

【问题讨论】:

标签: php xml moodle platform


【解决方案1】:

您可以将所需的 Moodle 文件定义为 PHP 类(具有公共属性)。

namespace Moodle\Models;
class Course {
  protected $id;
  protected $contextid;

  public $shortname;
  public $fullname;
  ...
}

要使用 OLAT 内容填充 Moodle 对象,您可以编写一个小的 OLAT2Moodle 转换器。 转换器将有几个处理 OLAT 对象和创建 Moodle 对象的函数。 您可能想为此使用factory design pattern

在您的工厂方法中,您可以使用简单的数组来定义目标属性的源属性,并使用通用方法来填充您的对象。简单的例子。

function fillObject($sourceObject,$destinationObject,$conversationMap) {
  foreach (conversationMap as $destinationAttribute => $sourceAttribute) {
  {
    $destinationObject->$destinationAttribute = sourceObject->$sourceAttribute;
  }
}

$courseConversationMap = array(
  'id' => 'id',
  'title' => 'coursetitle',
  'desc' => 'description',
  'start' => 'startDate',
  ...
);

$OLAT_course_object = getOLAT_i_dont_know_how_you_do_that();
$moodleCourse = new Moodle\Course();

fillObject($OLAT_course_object ,$moodleCourse ,$courseConversationMap);

现在您只需定义对话映射并将该逻辑放入您的工厂方法中。 然后,您只需遍历给定的 OLAT 对象并调用工厂创建方法。 不要害怕——这不是火箭科学也不是脑外科手术;-)

然后使用一些PHP XML Library to convert said classes to XML 并简单地将 XML 对象写入文件。

您的转换器将是高度可重用的,您可以轻松地在它的基础上编写 SomethingElse2Moodle 转换器。

【讨论】:

  • 我已经有一个包含所有 OLAT 数据的对象,使用 OLAT 对象中的 getter 并通过首先将它们写入新的 Moodle 对象来使用它们来创建新课程是否容易,然后使用该对象来制作文件夹结构?
  • 检查工厂设计模式。基本上你可以使用属性映射。您在其中定义目标属性的源属性。我会相应地更新我的帖子。
  • 谢谢,这对我帮助很大。我认为这会让我更容易和更清晰。 +1(如果我有足够的代表)
  • 祝你的转换器好运。如果你完成了,考虑把它放到网上。代表会流动! :D
猜你喜欢
  • 2023-03-10
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
相关资源
最近更新 更多