PDA

View Full Version : autodiscovery links in header


Cloud-Warrior
12-06-2007, 10:54 AM
I'm currently working on a script that produces XML/RDF output for some of vBulletin's data.
For that I'd also like to make a plugin that puts different autodiscovery links into the headers of various vBulletin pages.

E. g. for forumdisplay.php it should put
<link rel="meta" type="application/rdf+xml" title="SIOC" href="sioc.php?sioc_type=forum&id=XXX" />
into its header (with XXX being the id of the currently viewed forum)

There seems to be no way to hook into the header, I only found the possibility to manually edit templates.
Is it possible to have autodiscovery links that change according to which forum/post/user profile page is viewed?
Can that be done in a way so that a user installing such a plugin doesn't have to do any maual editing of templates?

RedTyger
12-06-2007, 11:21 AM
Use the hook global_setup_complete.


if (isset($foruminfo['forumid']))
{
$headinclude .= '<link rel="meta" type="application/rdf+xml" title="SIOC" href="sioc.php?sioc_type=forum&id='.$foruminfo['forumid'].'" />';
}



$headinclude contains the meta tags and a few other additions, anything you add there will go between the <head></head> tags.

Cloud-Warrior
12-06-2007, 03:44 PM
Thanks RedTyger - that was a very helpful answer!

Now I try to distinguish if a forum, thread, post or user profile is currently displayed and give only the appropriate autodiscovery link for that. E. g. when a post is viewed, don't give additional links for the thread or forum it is in.
I came up with this code that I included at the hook location you told me:

$vbulletin->input->clean_array_gpc('r', array( 'userid' => INT ));
if ($vbulletin->GPC['userid']) {
$headinclude .= '<link rel="meta" type="application/rdf+xml" title="SIOC" href="sioc.php?sioc_type=user&sioc_id='.$vbulletin->GPC['userid'].'" />';
} elseif ($vbulletin->GPC['postid']) {
$headinclude .= '<link rel="meta" type="application/rdf+xml" title="SIOC" href="sioc.php?sioc_type=post&sioc_id='.$vbulletin->GPC['postid'].'" />';
} elseif ($vbulletin->GPC['threadid']) {
$headinclude .= '<link rel="meta" type="application/rdf+xml" title="SIOC" href="sioc.php?sioc_type=thread&sioc_id='.$vbulletin->GPC['threadid'].'" />';
} elseif ($vbulletin->GPC['forumid']) {
$headinclude .= '<link rel="meta" type="application/rdf+xml" title="SIOC" href="sioc.php?sioc_type=forum&sioc_id='.$vbulletin->GPC['forumid'].'" />';
} else {
$headinclude .= '<link rel="meta" type="application/rdf+xml" title="SIOC" href="sioc.php?sioc_type=site" />';
}
I think this solution is a bit awkward, and I'm not sure if there are situations in which it might not work.
Is there another, more elegant solution for that?

RedTyger
12-07-2007, 07:30 AM
You could use a switch if you wanted it to be a little neater I suppose, I personally would use THIS_SCRIPT to determine when links are used as the other variables may be added or used elsewhere.


switch (THIS_SCRIPT)
{
case 'member':
$headinclude .= '<link rel="meta" type="application/rdf+xml" title="SIOC" href="sioc.php?sioc_type=user&sioc_id='.$_REQUEST['u'].'" />';
break;
case 'showpost':
$headinclude .= '<link rel="meta" type="application/rdf+xml" title="SIOC" href="sioc.php?sioc_type=post&sioc_id='.$_REQUEST['p'].'" />';
break;
case 'showthread':
$headinclude .= '<link rel="meta" type="application/rdf+xml" title="SIOC" href="sioc.php?sioc_type=forum&sioc_id='.$_REQUEST['t'].'" />';
break;
case 'forumdisplay':
$headinclude .= '<link rel="meta" type="application/rdf+xml" title="SIOC" href="sioc.php?sioc_type=forum&sioc_id='.$_REQUEST['f'].'" />';
break;
default:
$headinclude .= '<link rel="meta" type="application/rdf+xml" title="SIOC" href="sioc.php?sioc_type=site" />';
}



You can clean the $_REQUEST values if you want, but as they're not accessing any data and the forum will deal with incorrect values by default it's probably not necessary.

Cloud-Warrior
12-10-2007, 10:04 AM
Ah, I didn't know about THIS_SCRIPT, that's just what I needed - thank you!