View Full Version : Add methode to class in constructor?
Whissi
03-07-2008, 07:14 PM
Hello,
I'd like to extend the forum dm.
It's easy to add new fields within the "forumdata_start" hook, but I also want to include a verify method.
When I add "function verify_fieldname" and "$this->validfields['fieldname'] = array(TYPE_STR, REQ_NO, VF_METHOD);" to "forumdata_start", I get an error, that "verify_fieldname" wasn't found...
Any hint?
Antivirus
03-07-2008, 09:54 PM
I don't think you can use vfmethod for custom fields added to datamanagers unless a function already exists. I get around this problem by checking validation using php like follows:
'daysprune' => array(TYPE_INT, REQ_AUTO, 'if ($data == 0) { $data = -1; } return true;'),
There's some good details on datamanagers here (http://www.vbulletin.com/docs/html/data_manager_advanced), but I assume you've already read that.
Whissi
03-07-2008, 11:15 PM
Your solution doesn't work for me.
To check the data, I need to access some DM ressources :(
Opserty
03-08-2008, 08:21 AM
Are you sure? Make sure you changed it appropriately. If you want to do a more complicated check you could define a function outside the class using another Plugin then use that function in the custom check field.
function mycustom_check($data)
{
// Some long code here
// ....
// ....
// ....
// return true/false
}
// Try this first:
$this->validfields['fieldname'] = array(TYPE_STR, REQ_NO, 'return mycustom_check($data)');
// If the above doesn't work try this:
// $this->validfields['fieldname'] = array(TYPE_STR, REQ_NO, 'if(mycustom_check($data)) {return true;} else { return false; }');
// This is just a guess I haven't tried/tested it out.
What exactly are you trying to check for? (Give examples of valid/invalid data)
Whissi
03-08-2008, 11:51 AM
That's working - that's what Antivirus said and what I also tried.
But the problem is, that "mycustom_check" can't access class ressources.
If the check will fail, I cannot use "$this->error()" for example.
Opserty
03-08-2008, 12:59 PM
Well then but the contents of mycustom_check directly inside the string instead, does that not work?
like:
$string =
' /* Do some long check */
if($data != "something")
{
/*$this->error("You cant do this or something()*/
}
else
{
return true;
}
';
$this->validfields['fieldname'] = array(TYPE_STR, REQ_NO, $string);
Does that not work? Does it generate errors or something? Have you test your validation code independently to ensure that it works in the first place?
Or:
function mycustom_check($data)
{
// Some long code here
// ....
// ....
// ....
// return true/false
}
$this->validfields['fieldname'] = array(TYPE_STR, REQ_NO, 'if(!mycustom_check($data)) { $this->error("Some error message!");} ');
How about that? (If you only need to use the error method).
What are you checking for/validating for? Is there not already a validation method in the Base Datamanager?
Whissi
03-08-2008, 03:43 PM
Thanks. Nice idea.
In the actual case, that will solve my problem.
vBulletin® v3.8.12 by vBS, Copyright ©2000-2024, vBulletin Solutions Inc.