PDA

View Full Version : Validating Datamanager Values?


Abhik
02-13-2012, 04:10 PM
Hello,
I have added two simple html text fields in newthread template and now want to save them using datamanager and show them in the showthread template.

First, I have placed them in GPC Array (in newthread_post_start hook):
$vbulletin->input->clean_array_gpc('p', array(
'domainforsalename' => TYPE_STR,
'domainforsalebnprice' => TYPE_STR,
));
$newpost['domainforsalename'] = $vbulletin->GPC['domainforsalename'];
$newpost['domainforsalebnprice'] = $vbulletin->GPC['domainforsalebnprice']; Second, I added the values (in newpost_process hook):
$domaindata =& datamanager_init('Thread', $vbulletin, ERRTYPE_ARRAY, 'threadpost');

$domaindata->setr('domainforsalename', $domainforsalename);
$domaindata->setr('domainforsalebnprice', $domainforsalebnprice);

$domaindata->setr('domainforsalename', $post['domainforsalename']);
$domaindata->setr('domainforsalebnprice', $post['domainforsalebnprice']);

$domaindata->pre_save();
if (count($domaindata->errors) > 0)
{
// Errors occurred. Do not proceed with the save.
// You may want to loop through $dataman->errors and
// display the results the user.
}
else
{
// No errors occurred.
// Proceed with the save (see the next step).
}


$domainforsalename = $domaindata->save();
$domainforsalebnprice = $domaindata->save();

// updating an existing record
$domaindata->save();And, finally validating the data (in threaddata_presave hook):
$this->validfields['domainforsalename'] = array(TYPE_STR, REQ_NO);
$this->validfields['domainforsalebnprice'] = array(TYPE_STR, REQ_NO);Still I am getting an error;
Fatal error: Field domainforsalename is not defined in $validfields in class vB_DataManager_Thread in [path]/includes/class_dm.php on line 515

What should I do?

kh99
02-13-2012, 04:23 PM
(Oops, sorry - I see you already added those fields.)

But you might try doing it at the threaddata_start hook, because it could be the calls to setr() that are causing the error.

Abhik
02-13-2012, 04:51 PM
Thanks,
Now it get saved without any error. How do I check if they got saved properly?

Also, how may I call them in my templates?
$post['domainforsalename']
and/or
{vb:raw post.domainforsalename}
?

kh99
02-13-2012, 05:04 PM
Thanks,
Now it get saved without any error. How do I check if they got saved properly?

You could look at the database. Do something like

SELECT domainforsalename, domainforsalebnprice FROM thread WHERE threadid = ID


Also, how may I call them in my templates?
$post['domainforsalename']
and/or
{vb:raw post.domainforsalename}
?


The second one, but if you're only saving one per thread then you'd probably want {vb:raw thread.domainforsalename} (although it depends what template you're trying to display it in).

Abhik
02-13-2012, 05:20 PM
I am getting two blank fields.. Is that normal?
Shouldn't it be filled from the values from the text fields?

http://i41.tinypic.com/1qg9r8.png

I am trying to display the info in showthread template.

Thanks

kh99
02-13-2012, 05:34 PM
The fields shouldn't be blank. I think the problem is that at the newpost_process hook the new thread hasn't been created yet. When that hook code runs, there is an existing Thread_Firstpost data manager, so you probably want to use that instead of creating your own thread data manager. So when you add the valid fields, use hook threadfpdata_start instead of threaddata_start. Then at newpost_process, try just doing this:

if ($type == 'thread')
{
$dataman->setr('domainforsalename', $post['domainforsalename']);
$dataman->setr('domainforsalebnprice', $post['domainforsalebnprice']);
}

Abhik
02-13-2012, 06:00 PM
Awesome!! :)
Now the columns are being populated.
One more problem,
I am using
<h2 class="blockhead">Domain Details</h2>
<div class="blockbody formcontrols">
<h3 class="blocksubhead">The Domain Details</h3>
Domain Name: $post['domainforsalename']
Domain Price: $post['domainforsalebnprice']
</div>on SHOWTHREAD template to show the values. But its returning

Domain Name: $post['domainforsalename'] Domain Price: $post['domainforsalebnprice']

What I am doing wrong?

--------------- Added 14 Feb 2012 at 00:40 ---------------

Okay.. I got it working

Just needed to use {vb:raw threadinfo.domainforsalename} at SHOWTHREAD template.

Thanks Kevin for helping me out and all the hardwork you have done for me.

--------------- Added 14 Feb 2012 at 01:21 ---------------

Kevin, I am stuck again

I need to show the information on threads only in a single forum. I tried the conditions in SHOWTHREAD template.

<vb:if condition="$forum[forumid] == 61">
<h2 class="blockhead">Domain Details</h2>
<div class="blockbody formcontrols">
<h3 class="blocksubhead">The Domain Details</h3>
Domain Name: {vb:raw threadinfo.domainforsalename}
Domain Price: {vb:raw threadinfo.domainforsalebnprice}
</div>
</vb:if>And also
<vb:if condition="in_array($forum['forumid'], array(61))">
<h2 class="blockhead">Domain Details</h2>
<div class="blockbody formcontrols">
<h3 class="blocksubhead">The Domain Details</h3>
Domain Name: {vb:raw threadinfo.domainforsalename}
Domain Price: {vb:raw threadinfo.domainforsalebnprice}
</div>
</vb:if>
But, none of them working. In fact, when I wrap my code in those conditionals, they are not showing at all.
If my codes are wrong, then atleast the blockhead, blockbody and blocksubhead should appear.