如何在插件中暂停项目发布数据验证错误

时间:2014-08-19 10:01:48

标签: osclass

假设我在osclass中有一个插件Foo。在该插件中,我们在发布项目时注册了一个钩子。根据{{​​3}},发布项目时唯一的钩子是posted_item

但据我所知,在查看代码之后,这是在初始项目数据已经过验证并存储在数据库中之后运行的。如果对某些特定于插件的代码的验证失败并且我想向用户显示错误消息并再次向他提供该表单以使他/她有机会更改此信息,该怎么办?就像您尝试提交新项目但不填写其中一个基本信息(例如description)一样。

我似乎找不到办法做到这一点。我发现尽管包含无效的插件特定数据而没有编辑主要的osclass代码,但我发现避免发布项目的解决方法是在我的插件的posted_item钩子回调函数中再次删除已发布的项目。这感觉非常麻烦,并且还需要每个其他插件检查该项目是否仍然存在,以确保它们不保存连接到现在已删除的项目的数据。

我想要的,并且想知道我是否错过了,是一个钩子,当一个项目被发布但在它被写入数据库之前运行并能够生成“错误”,导致项目不被已发布,用户重定向回到表单,显示“错误”,就像基本项目信息一样。

任何人都有我错过的解决方案吗?这感觉就像插件的一个非常重要的部分,没有贴出的项目可能会变得非常分散。

1 个答案:

答案 0 :(得分:0)

osclass论坛上的用户( teseo )告诉我可以使用的未记录的钩子pre_item_add

<?php
function cust_my_plugin($aItem) {

    osc_add_flash_error_message('My plugin has a complaint.');
    $pItem = new CWebItem();
    $pItem->redirectTo( osc_item_post_url() );
}

osc_add_hook('pre_item_add', 'cust_my_plugin');
?>

他也是sais

  

唯一的坏消息是您无法合并插件验证   进程与核心脚本的进程,所以如果广告有错误   与你的插件和其他错误有关,它会被拒绝两次,   一个是你的插件,第二个是核心脚本。我看不到任何东西   这个小问题的解决方法。