PDA

View Full Version : hide a specific block from the sidebar


fxdigi-cash
10-09-2014, 07:49 AM
Hi,

I want to know how to hide a certain block from the sidebar because I'm trying to test hiding blocks from a specific style using this:

<vb:if condition="THIS_SCRIPT =='index' AND $bbuserinfo['styleid']==10">

I'm wondering what to do in order to hide a block. I tired to create a new block_html template and then use it as a block in the block adding manager through html/php, but that didn't work...

any idea how to do that??

:confused:

Disco_Stu
10-09-2014, 09:39 AM
Just enclose your block of code within a span or division and then toggle the display from NONE to BLOCK whenever you want to hide or display your code:

Here the span is hidden via the style attribute of "display:none"

<span id="myspan" style="display:none;">

and here it is displayed:

<span id="myspan" style="display:block;">

To change it I created two functions LoadElement and HideElement which accepts the name of a span or division as the parm.

function LoadElement(eid)
{
var element = document.getElementById(eid);
element.style.display = 'block';
}

function HideElement(eid)
{
var element = document.getElementById(eid);
element.style.display = 'none';
}


Then to display the span:

LoadElement('myspan');


and to hide the span:

HideElement('myspan');

That's how I do it. Of course you still need the code to test for a specific user , group or style that you want to show/hide the block for

fxdigi-cash
10-09-2014, 02:19 PM
Thanks @Disco_Stu (https://vborg.vbsupport.ru/member.php?u=475448)

The solution is good, but not recommended by vbulletin. I have tried similar solution in the past using display:none property, but I was told to avoid such thing for some reason.

I'm still looking for a plugin type solution to make things easier

Disco_Stu
10-09-2014, 03:04 PM
I'm not sure why you were told to avoid using what is a standard style attribute used by millions of web sites but to each their own.

Lynne
10-09-2014, 03:49 PM
The only reason I can think you were told that is because the block will still actually be in the source code of the page. So, if you had information in there that you didn't want others to see, they could still see it in the page source. Or, if the reason you don't want to block is to save resources (queries, etc), then hiding the block won't do that either.

Disco_Stu
10-09-2014, 04:15 PM
if you are trying to hide a display due to a security issue then an easy way to do that is to store the code in a DB table and then when you want to display it just read each line of code and populate a span or division with the contents of the DB table.

For example, let's say you have some code that only user 123 should see.

1) Test for user 123

2) If user 123 then load up a variable called myhiddencode with some code read from a DB table. Then populate a division with that code

document.getElementById(mydivision').innerHTML = '<div >' + myhiddencode + '</div>' ;

3) If not user 123 then

document.getElementById(mydivision').innerHTML = '<div > </div>' ;


Then only user 123 will see the code and it will not be part of the page source for any other user so they cannot see it even if they dump the entire page source.

tbworld
10-09-2014, 07:21 PM
Hi,

I want to know how to hide a certain block from the sidebar because I'm trying to test hiding blocks from a specific style using this:

<vb:if condition="THIS_SCRIPT =='index' AND $bbuserinfo['styleid']==13"> I'm wondering what to do in order to hide a block. I tired to create a new block_html template and then use it as a block in the block adding manager through html/php, but that didn't work...

any idea how to do that??

:confused:
I think you were on the right track. :)

So create a new template for "block_html", lets call it "block_html_new" and then insert your conditional. I placed optional conditionals in the two most likely positions, for reference, in the markup below. (I know you tried this, but I think you missed a step.) :)


Contents of newly created template "block_html_new"

<!-- HTML/Template Wrapper Conditional - START -->
<vb:if condition="THIS_SCRIPT =='index' AND $bbuserinfo['styleid']==3">

<li>
<div class="block smaller">
<div class="blocksubhead">
<a class="collapse" id="collapse_block_html_{vb:raw blockinfo.blockid}" href="{vb:raw relpath}#top"><img alt="" src="{vb:stylevar imgdir_button}/collapse_40b.png" id="collapseimg_html_{vb:raw blockinfo.blockid}"/></a>
<span class="blocktitle">{vb:raw blockinfo.title}</span>
</div>
<div class="widget_content blockbody floatcontainer">
<div id="block_html_{vb:raw blockinfo.blockid}" class="blockrow">


<!-- Block content only conditional - START -->
<vb:if condition="THIS_SCRIPT =='index' AND $bbuserinfo['styleid']==13">
Styleid: {vb:raw bbuserinfo['styleid']}
</vb:if>
<!-- Block content only conditional - END -->


{vb:raw content} <!-- In this example, the variable will return "<dummy></dummy>" -->
</div>
</div>
</div>
<div class="underblock"></div>
</li>
</vb:if>
<!-- HTML/Template Wrapper Conditional - END -->



IMPORTANT !!!
-------------------
1.) Make sure you insert text or some dummy tag in the "content" box in the "Block Manager" --> "Edit Box" dialogue. If the text-box is empty the block will not be processed. [NOTE: vb-conditionals will not work in this text-box -- the HTML dialog box on Block Manager --> Edit.

<dummy></dummy>
or
<!-- comment -->
or
<div>actual content</div>
2.) When testing, set the cache time to '0', but set it back to a higher number for production.

:)

cellarius
10-09-2014, 08:00 PM
I'm not sure why you were told to avoid using what is a standard style attribute used by millions of web sites but to each their own.
I like to not render what I don't want to show, instead of first rendering and then hiding it ;)