我有一个包含导出的OLAT备份数据的对象(OLAT是一个用Java编写的电子学习工具)。
现在我需要制作另一种'类型'备份文件,即Moodle备份文件,所以我可以将其导入Moodle本身(另一个用PHP编写的电子学习工具)。所以我的计划是创建Moodle备份所需的文件夹结构,并将数据写入相应的.xmls和路径。
我知道这听起来很模糊,但我的问题是:创建这些文件的最佳做法是什么?例如,我需要使用这种结构制作一个.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创建此文件?
答案 0 :(得分:0)
您可以将所需的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);
现在您只需定义conversationMaps并将该逻辑放在工厂方法中。 然后,您只需迭代给定的OLAT对象并调用工厂创建方法。 不要害怕 - 它不是火箭科学也不是脑外科; - )
然后使用一些PHP XML Library to convert said classes to XML并简单地将XML对象写入文件。
您的转换器可以高度重复使用,您可以轻松地在其基础上编写SomethingElse2Moodle转换器。