Удаление папки /install/ - обязательно!

Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Настройки прав доступа по группам
  • Настройки прав доступа по каждой категории
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
Loading

Go Back   форум vBSupport.org > >
Register Изображения Меню vBsupport Files Manager Аллея Звёзд Реклама на форуме Search Today's Posts Mark Forums Read
  • Мемберка
  • Администраторам
  • Premoderation
  • For English speaking users
  • Изменения в правах
  • Каталог Фрилансеров
Пароли на скачивание файлов в Member Area меняются автоматически каждый день
Если вам нужно скачать какой то скрипт, за паролем ко мне в ЛС
привет какирам kerk
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Не можете скачать вложение?
Изменения в правах групп пользователей
внимательно читаем эту и эту темы
Короткая версия - тут
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

 
 
Первый пост
Old  
pilsentico
Продвинутый
Default 0

Please find this hacks
Thanks

Flashchat: Who is chatting
http://www.vbulletin.org/forum/showthread.php?t=73042

vbPopup for vB3
http://www.vbulletin.org/forum/showthread.php?t=61647

Referral Statistics
http://www.vbulletin.org/forum/showthread.php?t=64469

Advanced Warning System (AWS)
http://www.vbulletin.org/forum/showt...&page=68&pp=15

Automatic Inactive Users Pruning
http://www.vbulletin.org/forum/showthread.php?t=78952

Last edited by pilsentico : 08-12-2005 at 06:24 AM.
 
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
Old  
AdamInc
Простоузер
Default Account 0

Do you have an account with Vbulletin or do you have a site where you get these?
 
Old  
Alan
Был когда-то
Адекватный
 
Alan's Avatar
Default 0

Does it matter?
 
Old  
AdamInc
Простоузер
Default 0

no iw as just thinknig that if it was a site it'd be easier to help ppl get them instead of you having to post everyones request. something to make your life easier but whatever
 
Old  
Alan
Был когда-то
Адекватный
 
Alan's Avatar
Default 0

http://vbsupport.org is all you need, dude
 
Old  
AdamInc
Простоузер
Default 0

i know that tahts why i'm here but i bet it gets annoying for you to keep posting but i dont mind requesting here i'm just finding a few i need
 
Old  
pilsentico
Продвинутый
Default 0

super thanks for the hacks m8
 
Old  
tintintin
Простоузер
Default 0

I have read below tips from vBulletin.org but them are not enough for me. I can't view full tips because I have no permission.
Codedisplayerror: (Update license status)
You cannot view codes as long as you haven't proven your license status!

[Tutorial] Developers Introduction To AJAX Technology
http://www.vbulletin.org/forum/showthread.php?t=81626
[How-to] Hooks and Plugins
http://www.vbulletin.org/forum/showthread.php?t=82923
How to make a plugin:
http://www.vbulletin.org/forum/showp...5&postcount=14
[How to] Add new/custom hook locations
http://www.vbulletin.org/forum/showthread.php?t=82703
[How to] Write Plug-ins/Hooks
http://www.vbulletin.org/forum/showthread.php?t=82625
[How to] Add entries to AdminCP Navigation Menu
http://www.vbulletin.org/forum/showthread.php?t=82698

Help me please! Thanks!
 
Old  
Alan
Был когда-то
Адекватный
 
Alan's Avatar
Default 0

#1
Quote:
Originally Posted by Zero Tolerance
Note: In an effort to keep discussion on track, any questions you have towards me un-related to the tutorial itself, please feel free to PM me.

Hey there, I thought since developers will like to use AJAX technology in future modifications perhaps, it would be good to have some form of tutorial, explaining how to set up a basic XJAX engine

Notice: This tutorial is aimed at developers, or at least those who have generic knowledge of JavaScript/XML.
- Also, please don't steal my tutorial, if you wish to post it on other sites, then leave a directing link back to this thread as a source of origin, thanks

What is 'AJAX'?
To start with, AJAX stands for Asynchronous JavaScript and XML, don't worry about the word 'Asynchronous' just yet, we'll come to that later. So what is it/does it do?
Well to put it as simply as possible, AJAX allows a web application to send and receive data via a XML HTTP request - with absolutely no page refreshing at all! I'm sure you could think of endless possibilities where it could be implemented to make things so much better, faster, and more user friendly.

How does AJAX work?
AJAX technology is built on 2 main languages, 1 is optional, but they are JavaScript and XML, the JavaScript is the code that will do most of the work, while the XML is just a format of response, the XML however is optional, you can use a XMLHTTP request without actually calling an XML file, however you will be unable to use the pre-defined methods in JavaScript to call objects within the XML file, so you'd have to build your own parse engine if you decided to turn your own data that isn't XML.
A 3rd part, which again is optional, but most likely what you will use, is a dynamic server-side script, such as PHP, you could use this to output 'dynamic' XML files which contain different data depending on conditions set.

Enough! I want to see a working example!
Okay, let's not rush into things. First of all lets run through a JavaScript function which will initiate a XMLHTTP request.
The request is different for IE, than it is for other browsers, in IE you would have:
Code:
Request = new ActiveXObject("Microsoft.XMLHTTP")
While in Mozilla/Netscape etc.. you would have:
Code:
Request = new XMLHttpRequest()
So to make the request work on all the browsers, i would suggest using:
Code:
	IE = (window.ActiveXObject)? true : false

		if(IE){
		Request = new ActiveXObject("Microsoft.XMLHTTP")
		} else {
		Request = new XMLHttpRequest()
		}
Okay, to that’s the request object, next we want to set up a state change, this will call to another JavaScript function, which in turn will check the state of the XML request, if it's loaded, or failed, or ready to use. This is done like so:
Code:
Request.onreadystatechange = collectData
We'll worry about the collectData() function after we've gone through the rest of this function. Next up, we want to specify the request, such as the URL, method of request (POST/GET etc...), and if we will use 'Asynchronous' or not.

Asynchronous:
This is a parameter available in the request specification, if set to true, the script on the page will continue to run while the server is still loading the request, while if it is set to false, it will lock and stay locked until the request has finished loading. This can cause problems if the request is not found for whatever reason it may be, so setting it to 'true' be a must really.
Okay, so how do we set the request?, let's see..
Code:
Request.open(method,location,async,username,password)
The method is usually "GET", unless you specifically want "POST", the location is the location of the request, i.e.: data.xml, async is Asynchronous, remember we want that to be true, and the username & password variables are for authentication, if the page requires it, if not just ignore them.
So a basic request would be:
Code:
Request.open("GET", "data.xml", true)
No we're nearly done, just one more thing - send the request!
Code:
Request.send('')
You'll notice the parameter in the send() function is blank, leave it as this, Mozilla complains if it is not specified, you can even set it to null, just as long as it is not ignored.
Okay, so lets see what the whole function would look like:
Code:
	function requestData(Location,Handler){
	IE = (window.ActiveXObject)? true : false

		if(IE){
		Request = new ActiveXObject("Microsoft.XMLHTTP")
		} else {
		Request = new XMLHttpRequest()
		}

		if(Request){
		Request.onreadystatechange = collectData
		Request.open("GET", "data.xml", true)
		Request.send('')
		}
	}
Next up - collectData(), as said above, this function will determine if the request is complete and ready for use, making it safe really before we attempt to try do anything more. It's a really simple function, so I’ll just paste it down and show you how it works.
Code:
	function collectData(){
		if(Request.readyState == 4){
			if(Request.status == 200){
			// Code Execution Here
			}
		}
	}
Okay, we check first in an if conditional that the state of the request is 4, which means it has loaded. Next we check that the page status is 200, which is 'OK'. After that you're ready do your nifty bits of programming to make things fancy.

The Example
In this example, i have slightly modified the 2 functions above to include a parameter for usage, I’ll explain it below.
We assume that 'data.xml' has the following contents:
Code:
<?xml version="1.0" encoding="iso-8859-1" ?>
<data>
<username>Zero Tolerance</username>
<userid>1</userid>
</data>
The task: Pull out all username and userid from XML using AJAX.

Okay, so here's my javascript:
Code:
<script type='text/javascript'>
<!--

	function requestData(Location,Handler){
	IE = (window.ActiveXObject)? true : false

		if(IE){
		Request = new ActiveXObject("Microsoft.XMLHTTP")
		} else {
		Request = new XMLHttpRequest()
		}

		if(Request){
		Request.onreadystatechange = function(){collectData(Handler)}
		Request.open("GET", Location + '&nocache=' + Math.random(0,9999), true)
		Request.send('')
		}
	}

	function collectData(Handler){
		if(Request.readyState == 4){
			if(Request.status == 200){
			eval(Handler + '(Request)')
			}
		}
	}

	function parseData(Request){
	Data = Request.responseXML.documentElement
	User = Data.getElementsByTagName('username')[0].firstChild.data
	UID  = Data.getElementsByTagName('userid')[0].firstChild.data
	document.getElementById('data').innerHTML = '<b>Username:</b> '+User+'<br /><b>UserID:</b> '+UID
	}

requestData('data.xml','parseData')


-->
</script>
You'll notice the requestData() & collectData() have a new parameter as said earlier, this is to allow one function to call XMLHTTP request, but allow another function to parse the data once it has been collected, so you don't have to specify tons for different functions over and over for different XMLHTTP requests.

Apart from that, the function parseData() is the only one added, this is the handler for the XML data. Request.responseXML.documentElement will return the document for the XML, which is an object, note that if you have not sent a valid XML file over, then you may not use this method, it will appear as null (also if your using php to generate a dynamic XML file, don't forget to add header('Content-Type: text/xml');!).
If you know JavaScript already then you will know how getElementsByTagName('tagname') works, it basically returns the tag with the name specified, and the 0 at the end specifies we want the 'first' occurrence of this tag, so we grab the username and userid tag, get the data it has, then send it into an element on our page with the id 'data', such as:
Code:
<div id='data'></div>
Once loaded in your browser, you should see:


Or unless you changed the data in the XML file ofcourse..

If you wanted to send non-XML data via a XMLHTTP request, then you can call the whole file contents once the data has been collected by collectData(), to call it, simply put:
Code:
alert(Request.responseText)
You will see a pop up with all the contents of the file, just store that in a variable and you're ready to make your own parser for it, if the predefined js methods just don't do it enough for you ;)

Alright, i think I’ve covered everything that needs to be said, to finish off, I have attached a file 'ajax.php', which includes the XML output (via php) and the JS AJAX engine, all in 1, simply upload it to your server to give it a go

I hope this has been of some help to you.

- Zero Tolerance
Добавлено через 01 минут(ы)
#2
Quote:
Originally Posted by calorie
In hooks_vbulletin.xml you will see things like the following:
Code:
	<hooktype type="general">
		<hook>global_start</hook>
		<hook>global_complete</hook>
The hooktype is just a unigue name for the hook tags within. The hook tags refer specifically to PHP code in the vB files.

The PHP code in the vB files looks like the following:
Code:
	($hook = vBulletinHook::fetch_hook('global_start')) ? eval($hook) : false;
Note how global_start is in a hook tag in hooks_vbulletin.xml and also in the vB PHP code.

To make a plugin hooked to global.php, you create an XML file as follows:
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>

<plugins>
	<plugin active="1" devkey="Name" product="vbulletin">
		<title>Your Title</title>
		<hookname>global_start</hookname>
		<phpcode><![CDATA[//
// START PHP CODE

$foo = "bar";

// END PHP CODE
//]]></phpcode>
	</plugin>
</plugins>
The place in vB PHP code where your global_start plugin runs is where the following occurs in global.php:
Code:
	($hook = vBulletinHook::fetch_hook('global_start')) ? eval($hook) : false;
Basically, you make plugins via XML and your plugins hook to vB PHP code
via <hookname>hook_name</hookname> from the plugins,
which needs to match the fetch_hook('hook_name') in the vB PHP code,
which needs to match <hook>hook_name</hook> in hooks_vbulletin.xml.

You can even make a plugin that hooks to multiple vB PHP files as follows:
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>

<plugins>
	<plugin active="1" devkey="Name1" product="vbulletin">
		<title>Your Title1</title>
		<hookname>global_start</hookname>
		<phpcode><![CDATA[//
// START PHP CODE1

$foo = "bar";

// END PHP CODE1
//]]></phpcode>
	</plugin>
	<plugin active="1" devkey="Name2" product="vbulletin">
		<title>Your Title2</title>
		<hookname>forumhome_start</hookname>
		<phpcode><![CDATA[//
// START PHP CODE2

$bar = "foo";

// END PHP CODE2
//]]></phpcode>
	</plugin>
</plugins>
This latter example runs the first batch of PHP code where the following occurs in global.php:
Code:
($hook = vBulletinHook::fetch_hook('global_start')) ? eval($hook) : false;
And runs the second batch of PHP code where the following occurs in index.php:
Code:
($hook = vBulletinHook::fetch_hook('forumhome_start')) ? eval($hook) : false;
Again, note how <hookname>hook_name</hookname> in the XML plugin
matches fetch_hook('hook_name') in the vB PHP code
matches <hook>hook_name</hook> in hooks_vbulletin.xml.

Further readings...

What is a hook:

- http://www.vbulletin.org/forum/showp...9&postcount=11

How to make a plugin:

- http://www.vbulletin.org/forum/showp...5&postcount=14

How to add a new hook location:

- http://www.vbulletin.org/forum/showp...01&postcount=1
Attached Files
File Type: php ajax.php (1.2 KB, 6 views)
 
Old  
Alan
Был когда-то
Адекватный
 
Alan's Avatar
Default 0

#3
Quote:
Originally Posted by Revan
I have an addition to this tutorial:

[high]vbulletin_plugins.xml[/high]
If you need to tell your users to add a lot of plugins, this will become tedious as much copy/pasting is required. A simpler way would be to use the .xml import. It works just like the importing of templates and phrases, by adding the contained code as a Plugin.
The correct format for a plugin.xml file is like so (thanks to Live Wire):
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<plugins>
	<plugin active="1">
		<title>vB Category Icons</title>
		<hookname>forumdata_start</hookname>
		<phpcode><![CDATA[$this->validfields['forumhomeicon'] = array(TYPE_STR, REQ_NO);]]></phpcode>
	</plugin>
</plugins>
Explanations:
<plugin active="1"> - The 'active' attribute determines the default value of 'Plugin is Active' in the Plugin Manager.
<title></title> - Self explanatory, it is the 'Title' field in the Manager.
<hookname></hookname> - The 'Hook Location' you would select.
<phpcode><![CDATA[ ]]></phpcode> - Anything added in the space between these is added to the 'Plugin PHP Code' part.


// end my contribution (if this is being merged into the first post, nothing below this is to be included)

And just for all you lazy people out there, here is an empty set, ready for copypasting into a blank xml file (only the <?xml and <plugins> tags need to be there already):
Code:
	<plugin active="1">
		<title></title>
		<hookname></hookname>
		<phpcode><![CDATA[]]></phpcode>
	</plugin>
I hope this helps hack writers that want to minimise the hassle for the end-user
Добавлено через 00 минут(ы)
#4
Quote:
Originally Posted by Brad
This guide will teach you how to add your own hook locations to your scripts/default vBulletin source code. Note that I assume that you are working within the vBulletin.php files or you have included vBulletin's global.php.

The first thing you need to do is edit a .xml file so your hooks show up in the 'Hook Location' drop down box in the plug-in manager. All hooks listed in this drop down live in the .xml file located at /vbroot/includes/xml/hooks_vbulletin.xml

Find this bit of code at the very top of the file:

HTML Code:
<hooks>
	
	<hooktype type="admindata">
		<hook>admindata_start</hook>
		<hook>admindata_presave</hook>
		<hook>admindata_postsave</hook>
		<hook>admindata_delete</hook>
	</hooktype>

Looks simple eh? Heres what these tags do

<hooks> - anything between this tag and </hooks> will be included in the drop down

<hooktype type="name"> - The name of your hook group, you should group all common hooks under a group so you can find them quickly. Make sure you don't use a name already used by a default hooktype.

<hook> - The name of your hook, this must be the same as the hook's name in the php code

Here is an example of my .xml file, I added three custom hooks under a new hooktype:

HTML Code:
<hooks>
	
	<hooktype type="loo_custom">
		<hook>loo_custom1</hook>
		<hook>loo_custom2</hook>
		<hook>loo_custom3</hook>
	</hooktype>
Now for the php code....

Adding a hook location to the php code is easy, just make sure you use the correct hook name! Use this bit of php anywhere after your call to global.php to call your custom hook. Also note that you must use the $hook var!

PHP Code:
($hook vBulletinHook::fetch_hook('hook_name')) ? eval($hook) : false
Here is an example of my custom hooks working in vBulletin's index.php file:

PHP Code:
// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################

($hook vBulletinHook::fetch_hook('forumhome_start')) ? eval($hook) : false;
(
$hook vBulletinHook::fetch_hook('loo_custom1')) ? eval($hook) : false;
(
$hook vBulletinHook::fetch_hook('loo_custom2')) ? eval($hook) : false;
(
$hook vBulletinHook::fetch_hook('loo_custom3')) ? eval($hook) : false
As you can see I added them right under a current hook, which mostly defeats the purpose of making custom hooks. But for this post they serve their purpose ;)

Now all you need to do is browse to your admincp's add new plug-in page and test your new hook location! I use this just to make sure it is working correctly:

PHP Code:
echo('Testing hook_name hook'); 
If that outputs its text above the vBulletin header then you are good to go!.
Добавлено через 01 минут(ы)
#5
Quote:
Originally Posted by Brad
This is your basic guide to making plug-ins and hooks, as we are all coming over from the 'hack the files' mentality I am posting this thread more for people that are used to hacking the 3.0.x source code and looking to port modifications. Although a newbie should be able to come away with a good understanding of how to do this to .

[high]Things to consider[/high]

Ok before we get started here are a few things to keep in mind. First and foremost plug-ins are stored in the database, serlized, unserlized and evaled on page generation. If you code preforms badly with such a wrapper forget making a plug-in and just hack it, trust me you'll thank yourself for it when your forum gets large.

Second thing, hooks will not get you into every corner of the code. Some things will always be done best with a hack. For example if you are looking to add something but need to query the db for some extra data and want to avoid and extra query (in other words you are going to modify an existing one with a join or such) forget it and hack it in, there are no hooks that let you modify existing queries.

Last but not least hooks are not magic, don't add a million of them and expect your forum to run as fast as it did when you first installed it. Only plug-in/hack-in what you really need!

Ok enough with the boring stuff, lets add our first plug-in!

[high]Basics:[/high]

First thing you need to do is make sure plug-ins are enabled, you can find this option in the admin cp by browsing to vBoptions -> Select Plugin/Hook System from menu -> Set Enable Plugin/Hook System to yes.

Now head to the add plug-in page located at http://www.yoururl.com/forum/admincp/plugin.php?do=add

Lets go over what all these options mean:

Hook Location: This is where the php code will be executed at, hook locations at defined all across vBulletin. You can find them by opening and php file and searching for the var $hook. When you find a bit of php code like this you have found a hook:

PHP Code:
($hook vBulletinHook::fetch_hook('showthread_postbit_create')) ? eval($hook) : false
See that bit fetch_hook('showthread_postbit_create')? Well the text "showthread_postbit_create" is the name of this hook, if you look in the drop down you will find that listed in there somewhere. Incase you are wondering that hook is located in showthread.php at line 1012

Title: This is the title of your plug-in, use a good name because this is the only thing you have to identify the plug-in in the plug-in manager.

Plugin PHP Code: Can you guess? This is where you put your custom php code, on page generation it is executed at the hook location in the .php files. Note that you do not need <?php ?> tags here, in other words:

wrong:

PHP Code:
<?php $var true?>
Right:

PHP Code:
$var true
Plugin is Active: Allows you to turn the plug-in on/off without removing it. If set to 'yes' php code is ran on page execution.

Edit - Thanks to Revan for this addition:



[high]Tips[/high]

At first approach coding the plug-in like a hack.

Open the php file you would normally edit and get your mind around the new code.

Once you have a good understanding of the new code you should start looking for where you need to add your custom php. Once you find the right location in the code start looking for a nearby hook, if you don't see one you can work with you are out of luck! :(

Edit- Thanks to KirbyDE for his addition:



Once you find your hook note its name and apply your changes in the admincp, from here on out you are on your own
Добавлено через 00 минут(ы)
and #6
Quote:
Originally Posted by KirbyDE
The AdminCP Navigation is now controlled through XML files.
To add custom entries, you must create a new file cpnav_yourhack.xml and place it in directory includes/xml.

This XML-File constist of 6 important tags:
  • <navgroups>
    This indicates that this is a XML File containing navgroups.
    It has one parameter product that should be set to vBulletin
  • <navgroup>
    This is the container for one Settings-Group, like Stales & Templates, vBulletin Options, etc.
    It has three parameters: phrase/text, permissions and hr.
    If you are using phrases, phrase must contain the variable name, if you are using hardcoded text then text must contain the label.
    Parameter permissions (optional) can be used to check an administrator permission, like canadminoptions.
    Parameter hr (optional) can be used to put a spacer below this navgroup.
  • <navoption>
    This is one Menu-Entry.
  • <phrase> or <text>
    This must contain the varname or hardcoded text for the menuetry.
  • <link>
    Tag link must contain the URL.
    You can use {$vbulletin->config[Misc][modcpdir]} to point to the ModCP directory here, no matter how it is actually called

Example
HTML Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<navgroups product="vBulletin">
	<navgroup phrase="demohack_settings" hr="true">
		<navoption>
			<phrase>demohack_foo</phrase>
			<link>demohack.php?do=foo</link>
		</navoption>
		<navoption>
			<phrase>demohack_modcp</phrase>
			<link>../{$vbulletin->config[Misc][modcpdir]}/foobar.php</link>
		</navoption>
	</navgroup>
	<navgroup text="Demohack Settings">
		<navoption>
			<text>Demohack Foo</text>
			<link>demohack.php?do=foo</link>
		</navoption>
		<navoption>
			<text>Demohack ModCP</text>
			<link>../{$vbulletin->config[Misc][modcpdir]}/foobar.php</link>
		</navoption>
	</navgroup>
</navgroups>
Update for Beta 3
With Beta 3 a new parameter displayorder has been introduced. This parameter is valid for Tags navgroup and navoption.
This way it is possible to control in which order the Navgroups and Links will be displayed, and you can also add custom Links to existing Navgroups.
To do su, your navgroup must hav them same displayorder and Phrase Varname as the existing group:

HTML Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<navgroups product="vBulletin">
	<navgroup phrase="forums_and_moderators" displayorder="60">
		<navoption displayorder="1">
			<text>Top-Link Forums &amp; Moderators</text>
			<link>demohack.php?do=foo</link>
		</navoption>
	</navgroup>
</navgroups>
Then Top-Link Forums & Moderators will be the first link in Navgroup Forums & Moderators (Displayorder: 60).

To find out the Displayorder for existing groups, take a look at cpnav_vbulletin.xml.

This How-To is (C) 2005 by KirbyDE and you are not allowed to redistribute it in any way without my explicit consent.
 
 

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 12:33 PM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.