2014-03-14 40 views
0

我有一個對象,其中包含來自導出的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>[email protected]@$</description> 
    </category> 
    <tags> 
    </tags> 
</course> 

我知道這聽起來像基本的PHP,但是這也幾乎是它是什麼。我如何使用PHP創建這個文件?

+2

隨着simpleXML http://php.net/manual/en/book.simplexml.php。它是許多php xml庫之一 – aleation

+0

一個簡單的模板引擎(ie.e.tigig)也可能是有用的。 –

回答

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轉換器。

+0

我已經擁有一個包含所有OLAT數據的對象,只需使用OLAT對象中的getters並通過首先將它們寫入新的Moodle對象來創建一個新課程,然後使用該對象使文件夾結構? – Axon

+0

檢查工廠設計模式。基本上你可以使用屬性圖。您可以在其中爲目標屬性定義源屬性。我會相應地更新我的帖子。 –

+0

謝謝你,這幫了我很多。我認爲這會讓我更容易和更清楚。 +1(如果我有足夠的代表) – Axon

相關問題