情况是这样的:我有两个Tiki追踪器:一个是订单,另一个是客户。将新项目添加到订单跟踪器时,所需的字段之一是从客户跟踪器中选择的客户。偶尔,我们有拖欠客户,需要“黑名单”,防止为该客户创建新的订单项目。实现这一目标的最佳方法是什么?
我想出了最好的方法来构建一个定制的验证器,如下所示:https://doc.tiki.org/Tracker+Field+Validation。然后,我将在客户追踪器中有一个新的字段,显示他们是否在黑名单上。验证器会查找客户,如果他们被列入黑名单,则不允许输入新订单。
我的(可怜的)尝试如下:
<?php
function validator_Blacklist($input, $parameter = '', $message = '')
{
$trklib = TikiLib::lib('trk');
//parse_str($parameter, $arr);
//$info = $trklib->get_tracker_field($arr['fieldId']);
$bl = $trklib->get_item(4,204,$input);
if($bl>=1)
return tra("Customer is blacklisted.");
return true;
}
?>发布于 2015-06-16 20:31:44
好吧,所以我用一个验证器解决了这个问题:
<?php
function validator_Blacklist($input, $parameter = '', $message = '')
{
$trklib = TikiLib::lib('trk');
$query = strtoupper(trim($input)); //$input has a trailing space which affects the query, strtoupper probably not needed
$result = $trklib->get_item_id(4,14,$query,false); //usage: get_item_id(tracker_id,field_id,string_query,partial_match);
$info = $trklib->get_tracker_item($result); //pass item id retrieved above to get all it's fields
$status = intval($info[204]); //array item 204 has the customer service status, 205 has a descriptive comment
if ($status==1) {
return tra("<strong><font color=red>DO NOT SERVICE: " . $info[205] . "</font></strong>");
}
return true;
}
?>在我的字段类型(项目链接)传递未定义的$input时,也存在一个问题。一些深入研究表明,validatorslib.php并没有将项目链接作为下拉类型处理(项目链接的字母键是'r'):
if ( $field_value['type'] == 'g' or $field_value['type'] == 'e' or $field_value['type'] == 'y' or $field_value['type'] == 'd' or $field_value['type'] == 'D') {
// Let's handle drop-down style fields
$validationjs .= 'return $(\'select[name="'.$prefix.$field_value['fieldId'].'"] option:selected\').text(); ';
} else { // Let's handle text style fields
$validationjs .= 'return $("#'.$prefix.$field_value['fieldId'].'").val(); ';我把第一行改为:
if ( $field_value['type'] == 'g' or $field_value['type'] == 'e' or $field_value['type'] == 'y' or $field_value['type'] == 'd' or $field_value['type'] == 'D' or $field_value['type'] == 'r') {现在一切似乎都正常了(我不认为我破坏了这个过程中的任何其他功能)。当我有时间(以跟踪器和字段作为参数等)时,我可能会使它更加健壮。
发布于 2015-06-13 14:13:31
我不认为验证器是正确的方法(对不起,不允许发表评论,但希望能提供帮助)。这肯定是一个权限问题。
假设客户跟踪器是一个“用户跟踪器”,并且这些用户是登录的,您可以使用禁止系统来阻止这些用户使用Tiki的各个部分,例如跟踪器。这里有更多关于这个的信息:http://doc.tiki.org/Banning
或者,您可以将它们放到“黑名单”组中,并删除创建新跟踪项的权限(甚至可以首先发现它们看到订单)。
但是,如果这些客户没有登录(这将是奇怪的),并且订单跟踪器中的Customer字段是ItemLink,则可以将其设置为只接受字段选项中的“打开”状态客户项,并将黑名单客户的状态设置为“已关闭”。这实际上是为您“验证”该字段,而不需要编写新代码。
https://stackoverflow.com/questions/30806658
复制相似问题