我有一个对象,其中包含导出的OLAT备份(OLAT是用Java编写的电子学习工具)中的数据。
现在我需要制作另一种"类型"的备份文件,即Moodle备份文件,以便我可以将其导入Moodle本身(另一个用PHP编写的电子学习工具)。因此,我的计划是创建Moodle备份所需的文件夹结构,并将数据写入相应的.xml和路径。
我知道这听起来很模糊,但我的问题是:创建这些文件的最佳行动方案是什么?例如,我需要用这个结构创建一个.xml文件:
<?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制作这个文件?
您可以将所需的Moodle文件定义为PHP类(带有公共属性)。
namespace Moodle'Models;
class Course {
protected $id;
protected $contextid;
public $shortname;
public $fullname;
...
}
要用OLAT内容填充Moodle对象,您可以编写一个小OLAT2Moodle转换器。转换器将具有几个处理OLAT对象和创建Moodle对象的函数。对此,您可能需要使用工厂设计模式。
在你的工厂方法中,你可以使用简单的数组为目标属性定义源属性,并使用通用方法来填充你的对象。简单的例子。
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);
现在您只需定义conversationMaps并将该逻辑放入工厂方法中。然后只需遍历给定的OLAT对象并调用工厂创建方法。别害怕,这不是火箭科学,也不是脑外科;-)
然后使用一些PHP XML库将所述类转换为XML,并简单地将XML对象写入文件。
你的转换器将是高度可重用的,你可以很容易地在它的基础上写SomethingElse2Moodle转换器