我正在使用ModX创建的网站。我需要知道在创建任何资源时我可以执行php代码的方式,还需要编辑与创建的资源相关联的模板变量。
答案 0 :(得分:0)
您可以使用plugin设置为在OnDocFormSave事件上运行。此事件具有模式属性,当刚刚创建了正在保存的文档时,该属性将设置为 new - 您可以对此进行简单检查以防止插件运行每次保存文档。
要为当前资源设置电视值,请执行以下操作:
// 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();
答案 1 :(得分:0)
okyanet的答案是正确的,但我已经为那些不熟悉MODX的人添加了细节。
创建一个插件,并将其配置为在两个系统事件上执行' onBeforeDocFormSave'和' onDocFormSave'。这两个事件在保存资源之前和之后触发。保存资源时, $ mode 变量可供您的插件使用,如果它是新资源,则其值为 modSystemEvent :: MODE_NEW ,如果更新的值是 modSystemEvent:MODE_UPD
我写了一个要点,其中包含完整的代码和示例:
https://gist.github.com/2768300
此示例向您展示如何通过switch语句定位事件,以及如何进一步定位&#39; new&#39;或者&#39;更新&#39;行动的状态。对于拦截和更改资源字段,使用 onBeforeDocFormSave 事件非常容易,因为您只需使用 $ resource-&gt;设置(&#39; yourFieldname&#39;)<更改任何资源字段名称< / em>的。没有 $ resource-&gt; save(),因为这会在此事件发生后自动发生。
使用onBeforeDocFormSave事件保存电视显然要困难得多,因为处理电视的方式,因此该示例显示了如何使用系统事件更新电视&#39; onDocFormSave&#39 ;。再次没有 $ resource-&gt; save(),因为当你打电话给'setValue&#39;时,会立即保存电视。在他们身上。
可以使插件只需要一个系统事件,但由于使用上述两种状态都有优势,并且为了帮助解释,我使用了两者。