2012-01-04 113 views
0

我的工作在鏌鋣創建的網站上執行PHP代碼。我需要知道的是創建的任何資源時,我可以執行PHP代碼,還可以編輯關聯到創建的資源模板變量的方式。鏌鋣:創建任何資源時

回答

0

您可以使用plugin,設爲在OnDocFormSave事件上運行做到這一點。此事件具有模式屬性剛剛創建要保存的文件時會被設置爲 - 你可以做一個簡單的檢查了這對防止插件正在運行的每一個文件保存時間。

要爲當前資源電視機值,這樣做:

// get the required TV object by name (or id) 
$tv = $modx->getObject('modTemplateVar',array('name'=>'tvName')); 

// set the new value and save it 
$tv->setValue($modx->resource->get('id'), $newValue); 
$tv->save(); 
0

答案由okyanet是正確的,但我已經添加了對那些不熟悉鏌鋣細節。

創建一個插件,並將其配置爲在兩個系統事件'onBeforeDocFormSave'和'onDocFormSave'上執行。這兩個事件只是在資源被保存之前和之後被觸發。當資源被保存時,$模式變量是提供給你的插件,如果它是一個新的資源它的值是modSystemEvent :: MODE_NEW如果更新它的值是modSystemEvent:MODE_UPD

我寫了一個要點,其中包括完整的代碼示例:

https://gist.github.com/2768300

這個例子展示瞭如何通過目標switch語句,以及如何進一步針對「新」或「更新」無論哪種情況行動的狀態。對於使用onBeforeDocFormSave事件,你可以簡單地改變任何資源字段名與$資源 - >設置(「yourFieldname」)攔截和改變資源領域,它很容易。沒有$資源 - >另存爲這此事件後自動發生所需的()

由於處理tvs的方式,使用onBeforeDocFormSave事件保存電視明顯要困難得多,因此該示例顯示瞭如何使用系統事件'onDocFormSave'更新電視。再次沒有需要$ resource-> save(),因爲當你調用setValue時立即保存tvs。

一個插件可以被設計爲僅需要其中一個系統事件,但由於使用上述兩種狀態都有好處,並且有助於解釋,所以我已經使用了這兩個。