0

假设我Foo在 osclass 中有一个插件。在那个插件中,我们注册了一个钩子,用于发布项目。根据osclass 挂钩文档,发布项目时运行的唯一挂钩是posted_item.

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

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

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

有人有我错过的解决方案吗?这感觉像是插件的一个非常重要的部分,如果没有它,发布的项目可能会变得非常分散。

4

1 回答 1

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');
?>

他还说

唯一的坏消息是您无法将插件验证过程与核心脚本的验证过程合并,因此如果广告出现与您的插件相关的错误和其他错误,它将被拒绝两次,一次被您的插件拒绝,第二次由核心脚本。对于这个小问题,我看不到任何解决方法。

于 2014-08-19T20:24:30.010 回答