Voir la version complète : vBulletin 3.6.x Créé une page annexe au forum avec session du forum
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') . '");');
?>
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'];
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']);
}
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:
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.
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') . '";');
merci Pitchoune ! ca fonctionne nickel :cool:
:D :D
vBulletin® v.3.8.0 Beta 1, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org