View Full Version : Problem passing variable or array from php to conditional in template
luroca
05-19-2005, 06:16 PM
Well, I hope this question goes here.
I use the "is_member_of improvement" hack of merk (https://vborg.vbsupport.ru/showthread.php?t=61149) because I need it for the hack I am making for vb3.
I have a problem, I can pass values from file.php to the template but not to the conditional in the template.
An example:
In myfile.php:
$forusergroups = $case['forusergroups'];
// values of $forusergroups for different caseids are: 3 / 5,6,7 / NULL / 2,4
$cansee = array($forusergroups);
$caseid = &$case['caseid'];
In mytemplate:
--$caseid--
<br>
1) forusergroups: $forusergroups
<br>
2) cansee: $cansee
<br>
3) <if condition="is_member_of($bbuserinfo, 4,5,6)">OK for number <else /> FAIL </if>
<br>
4) <if condition="is_member_of($bbuserinfo, $forusergroups)">OK for variable <else /> FAIL </if>
<br>
5) <if condition="is_member_of($bbuserinfo, $cansee)">OK for array <else /> FAIL </if>
<br>
-------------
<br><br>
And I get ($bbuserinfo = 6):
--1--
1) forusergroups: 3
2) cansee: Array
3) OK for number
4) FAIL
5) FAIL
-------------
--2--
1) forusergroups: 5,6,7
2) cansee: Array
3) OK for number
4) FAIL
5) FAIL
-------------
--3--
1) forusergroups:
2) cansee: Array
3) OK for number
4) FAIL
5) FAIL
-------------
--4--
1) forusergroups: 2,6
2) cansee: Array
3) OK for number
4) FAIL
5) FAIL
-------------
I have also tested LeeCHeSSS?s version of the merk?s hack for 5) but it?s the same.
I want to get "4) OK for variable" or "5) OK for array" but I always get "FAIL". The value of variable or array does not enter into the conditional.
Please, help me.
----Edited to put a missing "[" ----
Zero Tolerance
05-19-2005, 10:15 PM
Not exactly sure what your trying to accomplish, but i did notice this:
$caseid = &$case'caseid'];
Shouldn't that be:
$caseid = &$case['caseid'];
?
- Zero Tolerance
luroca
05-20-2005, 06:51 AM
Thanks Zero Tolerance, I put the missing "["
In my template instead of "OK for variable" there is a code that must be ejecuted or shown only if condition is OK for that "caseid". The condition varies in every "caseid".
Marco van Herwaarden
05-20-2005, 07:24 AM
What kind of code you need to have executed. Please give us some more info on what you are trying to achieve. Remember that the better the info is that you give us, the better the answers will be.
luroca
05-20-2005, 08:08 AM
What kind of code you need to have executed. Please give us some more info on what you are trying to achieve.It?s not a secret :)
The code is the template "subscription_availablebit"
I want to do some subscriptions avalaible only for some usergroups but now the problem is not the code, the problem is that values I get in php for $forusergroups are not valid in the conditional of the template, perhaps I need to "addslashes" it or something similar.
I have post a service request for this hack in https://vborg.vbsupport.ru/showthread.php?t=81287 but I have not luck so I try to do myself. It?s not easy because I am not a coder.
Thanks for your help
If I put in file.php
$forusergroups = '4,5,6'
the conditional in the template
4) <if condition="is_member_of($bbuserinfo, $forusergroups)">OK for variable <else /> FAIL </if>
The conditional works with $bbuserinfo = 6, by example.
4) OK for variable
So, I think what is wrong if the forrmat of values I get from database in "$forusergroups = $case['forusergroups'];". The values are correct but not the format.
Marco van Herwaarden
05-20-2005, 02:21 PM
Well i don't know the contents of your $case array.
It would really help if you posted a bit more code snippets.
luroca
05-20-2005, 04:11 PM
Well i don't know the contents of your $case array.
It would really help if you posted a bit more code snippets. Well, you have asked it :)
This is the real thing, not an example.
In Subscription Tools add a new phrase:
Varname: forusergroups
Text: Avalaible only for these usergroups
Run this query to add a new definition (forusergroups) in table subscription:
ALTER TABLE subscription ADD forusergroups varchar(255) NOT NULL AFTER description
In Admincp/subscriptions.php:
FIND:
print_textarea_row($vbphrase['description'], 'sub[description]', $sub['description']);
And ADD this to can input value of "forusergroups" in "Subscription Manager" of Admin CP:
print_input_row($vbphrase['forusergroups'], 'sub[forusergroups]', $sub['forusergroups']);
In forum/subscriptions.php, AFTER:
foreach ($subscriptioncache AS $subscription)
{
$show['will_extend'] = false;
ADD:
$forusergroups = $subscription['forusergroups'];
------------- ACLARATION BEGINS ----------------
$subscription is got from /includes/functions_subscriptions.php:
function cache_user_subscriptions()
{
global $DB_site, $subscriptioncache;
if (!is_array($subscriptioncache))
{
$subscriptioncache = array();
$subscriptions = $DB_site->query("SELECT * FROM " . TABLE_PREFIX . "subscription");
while ($subscription = $DB_site->fetch_array($subscriptions))
{
$subscriptioncache["$subscription[subscriptionid]"] = $subscription;
}
$DB_site->free_result($subscriptions);
}
}
------------- ACLARATION ENDS -------------------
Now go to template "subscription_availablebit"
BEFORE all the template ADD:
<if condition="is_member_of($bbuserinfo, $forusergroups)">
And AFTER all the template, ADD:
</i>
For each subscription there is a "forusergroups" with the value you want, for example: 3 or 5,6,7 or 2,4 or 2,4,5,6,7,8 etc, this is, the usergroups for which this subscription will be available.
And here we are, it must be work but not, the value in $forusergroups is correct but it is not ok into the conditional; if I put $forusergroups in another place in the template shows the correct value.
Remember I am using the "is_member_of improvement" hack of merk (
https://vborg.vbsupport.ru/showthread.php?t=61149) This hack is working OK as I see changing $forusergroups for "4,5,6" for example.
------------- ACLARATION BEGINS -----------------
I also have tried putting a conditional in /forum/subscriptions.php besides:
if ($subscription['active'])
but it does not work
*********** CORRECTION 1 ************
It works only if array is of only ONE number, for example: 2 or 6 but nor 2,6
------------- ACLARATION ENDS -------------------
I think this is all the info :)
Thanks very much.
--- Edited to add the correction 1 ---
---------
Marco van Herwaarden
05-20-2005, 07:28 PM
Try adding the following before evaluating your template:
$forusergroupsarray = explode(",", $forusergroups);
then use $forusergroupsarray in you template conditional.
luroca
05-20-2005, 07:51 PM
Try adding the following before evaluating your template:
$forusergroupsarray = explode(",", $forusergroups);
then use $forusergroupsarray in you template conditional.Yes and not :)
It does not work in the template :(
It works (and very very well) in the php and so merk?s hack is not necesary neither modify the template :D
Now the hack wil be finished soon.
Thanks, thanks, thanks, one thousand thanks :)
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.