PDA

View Full Version : Need help getting setting value in postbit_display_start hook?


Quarterbore
09-13-2008, 09:24 PM
I have an issue that impacts vBulletin 3.7.3 which does not seem to impact 3.6.11 that has me stumped.

Specifically, I want to use a setting in an add-on product in a vBulletin template hook. The template hook I am working with is the postbit and postbit legacy and here are the specific details:


Plugin off hook: postbit_display_start

When I add the following code in 3.7.3:


echo 'System Testing in Process!<br />';
echo '$vbulletin->options[bbactive] = ' . $vbulletin->options[bbactive] . ' <br />';
exit();


I get the following:

System Testing in Process!
$vbulletin->options[bbactive] =

Now, I think that is the proper way to get a variable and it works in 3.6.11 as in that version I get the obviously correct anwser of:

System Testing in Process!
$vbulletin->options[bbactive] = 1

Is there something in vBulletin 3.7 that makes it necessary to globalize settings that they are available for the templates?

Obviously, my variable I want to use is a configuration option for "Show this in PostBit and PostBit Legacy" but literally no variables seem to be working?

It worked in a previous version of vBulletin 3.7 (I think I had it in 3.7.1 and it worked) but not in the current version and I am stumped!

Guest190829
09-13-2008, 11:16 PM
Make sure the $vbulletin variable is a valid registry object...it could be possible that you are in a class (making the correct variable $this->registry instead of $vbulletin). Also, you should be using quotes around string array indexes.

Eg:

$vbulletin->options['bbactive']

Quarterbore
09-14-2008, 01:27 AM
Make sure the $vbulletin variable is a valid registry object...it could be possible that you are in a class (making the correct variable $this->registry instead of $vbulletin). Also, you should be using quotes around string array indexes.

Eg:

$this->registry->options['bbactive']


Thanks! I did try both with and without the single string in my frustration...

So, I was supposed to be using the $this->registry instead as my new test code:


echo 'System Testing in Process!<br />';
echo '$vbulletin->options[bbactive] = ' . $vbulletin->options['bbactive'] . ' <br />';
echo '$this->registry->options[bbactive] = ' . $this->registry->options[bbactive] . ' <br />';


Outputs like this:


System Testing in Process!
$vbulletin->options[bbactive] =
$this->registry->options[bbactive] = 1


This is going to get complicated to cde so that this will work in both 3.6.x and 3.7.x. if they will require both setups but obviously it can be coded like:


if($vbulletin->options['bbactive'] OR $this->registry->options['bbactive']{
echo 'Yo Dummy, your forums are on!';
}



Thanks for the help as I was really stumped!

Opserty
09-14-2008, 09:30 AM
postbit_display_start is executed within a class so $this->registry should/will work on both versions...

Quarterbore
09-14-2008, 10:55 PM
postbit_display_start is executed within a class so $this->registry should/will work on both versions...

You are correct! I did test that so I could have one version of code and it did work in 3.6.11 and 3.7.3!