PDA

View Full Version : How to create friendly url for my own addon ?


Ljusya
04-27-2010, 02:12 PM
Now in my addon links look like as http://mysite.net/addon.php?category=2&id=123

But i want change it like as http://mysite.net/category/2-123 if forum using friendly url

I look class_friendly_url.php but not enough understened how to do this

Lynne
04-28-2010, 12:27 AM
Look up fetch_seo_url in the API (or the files).

Andreas
05-02-2010, 03:45 PM
You'll need to

Subclass vB_Friendly_Url/vB_Friendly_Url_Paged
Take a look at vB_Friendly_Url_Member in class_friendly_url.php to see how that works - it's pretty straightforward.
Create a Plug-in for Hook Hook friendlyurl_resolve_class to load your class if necessary
Create an appropriate rewrite rule
Use fetch_seo_url(), verify_seo_url() in your PHP code when you constructing URLs
Use {vb:link} in your templates

Ljusya
05-04-2010, 12:43 PM
thanks, so i describe all my steps
i create file /includes/class_myaddon_seo.php with code

class vB_Friendly_Url_Category extends vB_Friendly_Url_Paged
{
protected $idvar = 'cat';
protected $idkey = 'id';
protected $titlekey = 'catname';
protected $ignorelist = array('cat','product');
protected $script = 'myaddon.php';
protected $rewrite_segment = 'category';
}

create plugin on hook friendlyurl_resolve_class
include_once('./includes/class_myaddon_seo.php');

in myaddon.php define
define('FRIENDLY_URL_LINK', 'articles');

add in .htaccess rules
ReWriteRule ^category/.* myaddon.php [QSA]

And successfully generate links for example
$url=$vbulletin->options['bburl'].'/'.fetch_seo_url('category',$categorydata);
And links look as http://mysite.net/category/id-categoryname
All works good!

Jaxel
05-09-2010, 04:02 AM
Okay... I'm confused on how this whole process works. Would someone mind explaining it better to me?

media.php?do=category&cid=(categoryID)
media.php?do=details&mid=(mediaID)
media.php?do=user&uid=(userID)

media/c(categoryID)-(categoryName)
media/m(mediaID)-(mediaName)
media/u(userID)-(userName)

Is something like this possible? And if so, how would I do it?

--------------- Added 1273382667 at 1273382667 ---------------

With my URLs, a lot of information can get passed... for instance

/media.php?do=category&cid=9&sort=rating&page=5

With my current SEO method (I want to change, because its causing problems), the URL would be:

/media/c9-kogarasumaru?sort=rating&page=5

With the built in SEO method, could I keep a similar URL? Or would it have to be:

/media/category/9-kogarasumaru/rating/5

xman_79
06-18-2010, 11:49 AM
Hi,
::Edit.

Sorry, I had an error in my code. Now everything works fine

------------------------

::Old

I tried this method but I got an error:
Call to undefined method vB_Friendly_Url_Error::redirect_canonical_url() in ...\includes\functions.php on line 6902

Vossi
11-22-2010, 01:44 PM
How can I handle a link like this one:

myaddon.php?do=showentry&id=1

As a matter of fact I didnt find any way to work with such a link in order to convert it to

myaddon/entry/1-nameofentry

This would be the friendly url I'd like to see, but with the actual method vB uses it aint easy to do.

Any ideas?

Lynne
11-22-2010, 02:42 PM
If you need to actually have a 'converter' script for your own page, then you can probably write a class to extend vB_Friendly_Url_Paged

Vossi
11-22-2010, 03:54 PM
If you need to actually have a 'converter' script for your own page, then you can probably write a class to extend vB_Friendly_Url_Paged
What means, that I cant do it like the way which is explained in this thread, correct?

To actually 'convert'

myaddon.php?id=1

to

myaddon/1-nameofentry

is described in here; i got this done (with changings).

Lynne
11-22-2010, 06:36 PM
You would need to add that to your htaccess if you want it to redirect.

Vossi
11-23-2010, 04:44 AM
ReWriteRule ^category/.* myaddon.php?do=showentry [QSA]

doesnt work ;)

Lynne
11-23-2010, 02:11 PM
Did you also create the class to extend vB_Friendly_Url_Paged?

Vossi
11-24-2010, 06:55 AM
Yes, sure. My problem is, that I cant get rid of ?var=int right after myaddon.php as the content of the var I set in $idkey within the class only allows integer. I can set $idvar to 'do' for example but $idkey doesnt allow strings.

By changing $script in the class and by adding a ?do=routine i can place the holders, but then class_friendly_url.php puts a ?= right after it and it looks like this: myaddon.php?do=routine?=&id=x

Lynne
11-24-2010, 01:47 PM
Post up your code for the class and perhaps we can see what is wrong. (And I assume you are using the htaccess rewrite rule from above?)

Vossi
11-24-2010, 02:03 PM
I'm about to include friendly url to my glossary addon so i wrote the following class (filename: class_friendly_url_vbglossar.php):
class vB_Friendly_Url_Glossary_Category extends vB_Friendly_Url_Paged
class vB_Friendly_Url_Glossary_Category extends vB_Friendly_Url_Paged
{
protected $idvar = 'catid';
protected $idkey = 'id';
protected $ignorelist = array('catid', 'id');
protected $script = 'vbglossar.php';
protected $rewrite_segment = 'glossary_category';
}
and included it with
<plugin active="1" executionorder="5">
<title>vBulletin-Glossar: Include additional class for friendly url</title>
<hookname>friendlyurl_resolve_class</hookname>
<phpcode><![CDATA[include_once('./includes/class_friendly_url_vbglossar.php');]]></phpcode>
</plugin>
My re-write rules in .htaccess look like this:
# Glossary
RewriteRule ^glossary/.* vbglossar.php [QSA]
In the main script called 'vbglossar.php' i define
define('FRIENDLY_URL_LINK', 'glossary_category');
Usually my addon calls the category with the following link (for example: the id of the category is 1, the name is 'automobile'):
vbglossar.php?do=showcat&catid=1
and I want to convert the link to
vbglossar.php/glossary_category/1-automobile
So I'm using this code in my template:
<a href="{vb:link glossary_category, {vb:raw row}, {vb:raw pageinfo}, 'catid', 'title'}">{vb:raw row.title}</a>
$pageinfo['catid'] is set to 1, $row['do'] = 'showcat'. So the output by now is:
vbglossar.php?do=&catid=1
How and where do I include 'showcat' as $idkey only works with integer?