PDA

View Full Version : Need to hide some specific URLs from Guests


humour
04-07-2011, 07:17 AM
I need to hide some specific URLs from Guests. Say hiding all the links of imdb.com from the thread only for the guest

Can anyone recommend me the way to do it. I will use preg_match to get every IMDB link in the thread but how to replace it with blank text only for guest ?

richy96
04-07-2011, 09:20 AM
I do something similar to stop search engines (guests) from indexing members usernames from forum posts, while leaving the forums visible for earch engines to index the posts content

In my case I added the code to do this to forumdisplay.php

The loop handling the display of forum threads starts

while ($thread = $db->fetch_array($threads))

It executes once for each post in the thread


This would be a good point to enter your code. Here is mine (which reverses the characters in usernames and sets them all to lowercase) you could do something similar to replace your unwanted URLs with blank space, or some other text like 'veiwable only to members'

I determine if a user is guest from if (!$show['member'])


while ($thread = $db->fetch_array($threads))
{ // AND $counter++ < $perpage)
// jumble up poster and last poster name for guests/search engines
if (!$show['member'])
{
$thread['postusername'] = strtolower(strrev($thread['postusername']));
$thread['lastposter'] = strtolower(strrev($thread['lastposter']));
}



Hope that helps
Rich

humour
04-07-2011, 02:13 PM
can u tell me which variable hold the actual thread content? I will replace the value which i dont want along with showthread_start hook.

richy96
04-07-2011, 08:33 PM
HI humour



--------------- Added 1302252988 at 1302252988 ---------------

Edit - Sorry I told you wrong there

That was part of the mod I used to stop usernames showing to guests during display of forum thread lists - not forum threads

I did something similar to stop attachments from showing to guests within threads


The file you want to look at is showthread.php and the thread text is stored in $post['pagetest_html']


I just had a look to see how I did this on my site

I actually put the mod into the file includes/class_postbit.php which contains code that is called from showthread for each post, parses any bbcode and returns the html for the post text.


There is a hook in this file called postbit_display_complete

You could use that hook however my mod was put inline directly after the hook call

($hook =& vBulletinHook::fetch_hook('postbit_display_complet e')) ? eval($hook) : false;
$hidemessage = "Only registered users can view images";
if($show['guest'])
{
$this->post['message'] = preg_replace("/<img.+?\>/i", $hidemessage, $this->post['message']);
}

That replaces any image tag in the thread post with the $hidemessage

You should be able to very easily change my mod to do exactly what you need just by changing the preg_replace

Rich

humour
04-08-2011, 10:01 AM
well isnt it possible using plugin manager ?

$this->post['message'], doesnt show up when i used it with plugin

may be some another workaround to make it work in plugin system.
$GLOBALS[postcache][$FIRSTPOSTID][message]
^ I dumped all variables & step by step got to know that this variable has message content, but when i change content in this variable it is not reflected in thread, dunno y :(

richy96
04-08-2011, 02:04 PM
OK I found some plug in on here that does basically what I did (hide attachments in threads) but don't recall what it is called - and that plugin uses the same hook location (though as I said I put my code inline instead)

I am sure my own mod and this plugin do the exactly same thing if you look a the code

If you want to use a plugin, maybe this one can easily be modified to your purpose

Rich


<?xml version="1.0" encoding="ISO-8859-1"?>

<product productid="hideimg_guests" active="1">
<title>Hide Images from Guests</title>
<description>Allows you to show a message to guests instead of images.</description>
<version>1.0</version>
<url>http://www.vbstyle.org/</url>
<versioncheckurl />
<dependencies>
</dependencies>
<codes>
</codes>
<templates>
</templates>
<plugins>
<plugin active="1" executionorder="5">
<title>Hide Images from Guests</title>
<hookname>postbit_display_complete</hookname>
<phpcode><![CDATA[if($vbulletin->options['hideimg_enabled'] AND $show['guest'])
{
$this->post['message'] = preg_replace("/<img.+?\>/i", $vbulletin->options['hideimg_message'], $this->post['message']);
}]]></phpcode>
</plugin>
</plugins>
<phrases>
<phrasetype name="vBulletin Settings" fieldname="vbsettings">
<phrase name="setting_hideimg_enabled_desc" date="1248758309" username="vB Style" version="1.0"><![CDATA[Enable Hide Images from Guests?]]></phrase>
<phrase name="setting_hideimg_enabled_title" date="1248758309" username="vB Style" version="1.0"><![CDATA[Enable Hide Images from Guests]]></phrase>
<phrase name="setting_hideimg_message_desc" date="1248758579" username="vB Style" version="1.0"><![CDATA[Insert the message here to be displayed to guests instead of images (You can use HTML):]]></phrase>
<phrase name="setting_hideimg_message_title" date="1248758579" username="vB Style" version="1.0"><![CDATA[Hide Images from Guests Message]]></phrase>
</phrasetype>
</phrases>
<options>
<settinggroup name="showthread" displayorder="430">
<setting varname="hideimg_enabled" displayorder="320">
<datatype>free</datatype>
<optioncode>yesno</optioncode>
<defaultvalue>yes</defaultvalue>
</setting>
<setting varname="hideimg_message" displayorder="330">
<datatype>free</datatype>
<defaultvalue><![CDATA[<font color="red">Guests cannot see images in the messages. Please register to forum by clicking <a href="register.php"><strong>here</strong></a> to see images.</font>]]></defaultvalue>
</setting>
</settinggroup>
</options>
<helptopics>
</helptopics>
<cronentries>
</cronentries>
<faqentries>
</faqentries>
</product>

humour
04-09-2011, 07:56 AM
well dude thanks for all ur help & assistance. My friend did this work for me & it is pretty much same as the code in the above post


if ($show['guest'])
{
$this->post['message'] = str_ireplace("Text1","Hidden for guests",$this->post['message']);
}


thanks anyways ;)

richy96
04-09-2011, 01:10 PM
no probs m8
I'm happy to have helped

Rich