PDA

Voir la version complète : vBulletin 3.6.x Créé une page annexe au forum avec session du forum


Samouel
21/10/2006, 16h50
Salut,

J'ai cherché un peu sur différents forum vbulletin un moyen d'utiliser les sessions/templates du forum pour pouvoir créer des pages hors forum.

J'ai trouvé un script, mais il ne fonctionne pas pour la version 3.6.2... j'ai donc trouvé la solution moi meme ^^ ca n'a pris que 10 minutes en fait :cool:.

Donc si vous souhaitez créer une page annexe à votre forum, il vous suffit de :

1 - Créer une page test.php en y placant ce code :

<?php

// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'index');

// pre-cache templates used by all actions
$globaltemplates = array(
'TEST'
);

// pre-cache templates used by specific actions
$actiontemplates = array();

// ######################### REQUIRE BACK-END ############################
require_once('./global.php');

eval('$navbar = "' . fetch_template('navbar') . '";');
eval('print_output("' . fetch_template('TEST') . '");');
?>

2 - Créer un template nommé 'TEST' via la zone d'administration des templates de vbulletin. Et dans cette page, vous y placer ce code :

$stylevar[htmldoctype]
<html dir="$stylevar[textdirection]" lang="$stylevar[languagecode]">
<head>
<!-- no cache headers -->
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Cache-Control" content="no-cache" />
<!-- end no cache headers -->
$headinclude
<title><phrase 1="$vboptions[bbtitle]">$vbphrase[x_powered_by_vbulletin]</phrase></title>
</head>
<body>
$header
$navbar

<br />

<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" style="border-bottom: 0" width="100%" align="center">
<tr>
<td class="cat-top">TEST</td>
</tr>
</table>
<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" width="100%" align="center">
<tbody>
<tr>
<td colspan="2">TEST</td>
</tr>
</tbody>
</table>
<br />

$footer
</body>
</html>

Voila ca devrait fonctionner ! A vous d'adapter le code a vos besoins maintenant !

Je poste ce code sur le forum au cas ou quelqu'un en aurait besoin :cool:.

++
Samuel

Pitchoune
21/10/2006, 20h42
Essaye d'inclure $phrasegroups et $specialtemplates, ça peut te faire planter l'affichage. Le code suivant n'a pas été testé.<?php

// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'index');

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array();

// get special data templates from the datastore
$specialtemplates = array();

// pre-cache templates used by all actions
$globaltemplates = array('TEST');

// pre-cache templates used by specific actions
$actiontemplates = array();

// ######################### REQUIRE BACK-END ############################
require_once('./global.php');

eval('$navbar = "' . fetch_template('navbar') . '";');
eval('print_output("' . fetch_template('TEST') . '");');

?>

Samouel
21/10/2006, 23h36
est ce que quelqu'un sait comment depuis la page test.php, récupérer les données d'une base (hors forum) et afficher les données sur la page test.php ?

Je n'ai pas de probleme pour afficher un enregistrement, mais comment faire lorsque l'on souhaite afficher 5 enregistrements provenant d'une boucle ?

Exemple :

dans la page test.php, j'ai :

$name = $db->query_read_slave("SELECT name FROM country");

while ($country = $db->fetch_array($name))
{
$vbphrase[name] = $country['name'];
}


Dans le fichier template test, j'ai placé ce code :
$vbphrase[name]
comment faire pour afficher les différents résultats sur la page ?? Je n'ai pas réussi à afficher les données de la boucle while :((

Pitchoune
21/10/2006, 23h38
Essaye de voir si cette ligne irait pas mieux ?$vbphrase['name'] .= $country['name'];

Samouel
22/10/2006, 13h11
cool merci Pitchoune ! ;)

J'aurais une dernière question...

Tous les noms des pays s'affichent à la suite... France Belgique Suisse, etc...

Comment faire pour que lorsque l'on affiche la page test.php, cela affiche les noms de la façon suivante :

<tr>
<td class="alt2">France</td>
</tr>
<tr>
<td class="alt2">Suisse</td>
</tr>
<tr>
<td class="alt2">Belgique</td>
</tr>

et pas :
<tr>
<td class="alt2">FranceSuisseBelgique</td>
</tr>





Le code html du template test :
<tr>
<td class="alt2">$vbphrase[nom]</td>
</tr>

s'afficherait autant de fois qu'il y a de pays.

Est ce que tu sais comment faire Pitchoune ? ce ne serait pas une histoire de <if> dans le template ? mais comment le faire fonctionner ?

Pitchoune
22/10/2006, 15h07
Essaye ceci :

$name = $db->query_read_slave("SELECT name FROM country");

while ($country = $db->fetch_array($name))
{
$vbphrase['name'] = implode(',', $country['name']);
}

Samouel
22/10/2006, 15h27
Cela m'affiche autant de ligne Warning que de Pays a afficher c'est à dire :

Warning: implode(): Bad arguments. in \test.php on line 25

Warning: implode(): Bad arguments. in \test.php on line 25

Warning: implode(): Bad arguments. in \test.php on line 25

Warning: implode(): Bad arguments. in \test.php on line 25

Warning: implode(): Bad arguments. in \test.php on line 25

C'est normal que cela ne fonctionne pas vu que les noms des pays sont listés à la suite :
FranceSuisseBelgique

Il n'y a pas de virgule entre eux :(

Histoire de tester, j'ai ajouté une virgule entre chaque pays et tenté de faire un explode :rolleyes: :

while ($poker = $db->fetch_array($listepoker))
{
$country['name'] = $country['name'].',';
$vbphrase[name] = explode(',', $country['name']);
}

et lorsque j'affiche la page test, cela m'affiche Array :confused:

Samouel
22/10/2006, 15h45
Je pense que la solution viendra de :
<if condition="$show['threadslist']"></if>

non ?

Je pense que les <if></if> dans le template doivent servir justement à afficher les boucles... la liste des messages par exemple, la liste des catégories, etc...

Je vais essayer de trouver comment est généré, d'ou vient le "$show['threadslist']" par exemple :rolleyes:

Pitchoune
22/10/2006, 16h01
$name = $db->query_read_slave("SELECT name FROM country");

while ($country = $db->fetch_array($name))
{
$vbphrase['name'] = $country['name'];
eval('$pays = "' . fetch_template('TEST_PAYS') . '";');
}Tu remplaces TEST_PAYS par le template qui doit afficher le pays et tu modifies $pays pour être inséré dans le template TEST.

Voilà ce à quoi tu devrais arriver au final :

Template TEST :
$stylevar[htmldoctype]
<html dir="$stylevar[textdirection]" lang="$stylevar[languagecode]">
<head>
<!-- no cache headers -->
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Cache-Control" content="no-cache" />
<!-- end no cache headers -->
$headinclude
<title><phrase 1="$vboptions[bbtitle]">$vbphrase[x_powered_by_vbulletin]</phrase></title>
</head>
<body>
$header
$navbar

<br />

<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" style="border-bottom: 0" width="100%" align="center">
<tr>
<td class="cat-top">TEST</td>
</tr>
</table>

<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" width="100%" align="center">
<thead>
<tr>
<td colspan="2">TEST</td>
</tr>
</thead>
<tbody>
$pays
</tbody>
</table>
<br />

$footer
</body>
</html>Template TEST_PAYS :
<tr>
<td class="alt2">$vbphrase[name]</td>
</tr>Code de ta page :
<?php

// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'index');

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array();

// get special data templates from the datastore
$specialtemplates = array();

// pre-cache templates used by all actions
$globaltemplates = array('TEST');

// pre-cache templates used by specific actions
$actiontemplates = array();

// ######################### REQUIRE BACK-END ############################
require_once('./global.php');

$name = $db->query_read_slave("SELECT name FROM country");

while ($country = $db->fetch_array($name))
{
$vbphrase['name'] = $country['name'];
eval('$pays = "' . fetch_template('TEST_PAYS') . '";');
}

eval('$navbar = "' . fetch_template('navbar') . '";');
eval('print_output("' . fetch_template('TEST') . '");');

?>

Je te conseille quand même de ne pas utiliser les variables $vbphrase comme ça, si tu as une expression sur le forum qui s'appelle $vbphrase[name] ailleurs, ça peut ne rien afficher.

Samouel
22/10/2006, 17h11
ton code fonctionne, mais il ne boucle pas le template "TEST_PAYS". Il n'affiche qu'un seul pays ! :crazy:

<tr>
<td class="alt2">France</td>
</tr>

Pitchoune
22/10/2006, 17h17
eval('$pays .= "' . fetch_template('TEST_PAYS') . '";');

Samouel
22/10/2006, 17h58
merci Pitchoune ! ca fonctionne nickel :cool:

:D :D