2012-01-04 83 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。

一个插件可以被设计为仅需要其中一个系统事件,但由于使用上述两种状态都有好处,并且有助于解释,所以我已经使用了这两个。