Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Effectuer une requête vers la base de données
#1

créer une balise utilisateur (extension=>balise Utilisateur)
Code :
echo '<table>
<caption>test BD</caption>';
echo '<thead><tr>';
echo "<th>content id</th>";
echo "<th>alias</th>";
echo "</tr></thead>";
global $gCms; //pour pouvoir travailler avec les objets, classes et méthodes du cms
$db = &$gCms->GetDb(); //connection à la bd cms
$query = "SELECT * FROM cms_content WHERE content_id >1 AND type = 'content' ORDER BY parent_id ";
$dbresult = &$db->Execute($query);//exécution de la requête
    while ($dbresult && !$dbresult->EOF)
    {
$resultChamps1 = $dbresult->fields['content_name'];
$resultChamps2 = $dbresult->fields['content_alias'];
echo <<<REQUETE
<tr>
<td>{$resultChamps1}</td>
<td>{$resultChamps2}</td>
</tr>
REQUETE;
    $dbresult->MoveNext();//enregistrement suivant
}//tous les enregistrements sont dans des tableaux
if ($dbresult) $dbresult->Close();//on ferme la connection
echo "</table>";
Si vous avez nommé cette balise "select", vous n'avez plus qu'à insérer {select} dans la page où vous désirez voir apparaître le tableau avec le résultat.
Cela devrait vous donner un tableau avec le nom de chacun de vos content ainsi que l'alias de page correspondant.
Vous n'avez plus qu'à modifier votre requête pour qu'elle corresponde à vos désirs.
Note :
Code :
echo <<<REQUETE
<tr>
<td>{$resultChamps1}</td>
<td>{$resultChamps2}</td>
</tr>
REQUETE;
c'est la syntaxe heredoc, très pratique pour ne pas s'ennuyer avec les apostrophes et raccourcir le code. Voir http://www.manuelphp.com/php/language.ty...eredoc.php
Et pour un INSERT :
Code :
global $gCms;
$db = &$gCms->GetDb();
$query = "INSERT INTO nomTable (champs1, champs2, ...) VALUES ('$variable1', 'variable2')";
$db->Execute($query);
Vous pouvez bien sûr utiliser une autre table que cms_content, il est d'ailleurs très pratique d'ajouter vos tables perso dans la bd de cms. Vous n'aurez ainsi jamais besoin de vous demander comment vous y connecter.
Have fun Smile
Répondre
#2

Enfin Smile

Merci beaucoup pour tes recherches !
Répondre
#3

Merci Jean!!!
Par manque de temps j'ai laissé tombé smarty pour l'instant ainsi que formbuilder. C'est remis à plus tard.
Je garde ton message précieusement
Salut
Répondre
#4

Plus difficile : vous devez afficher des adresses email dans votre tableau et voudriez utiliser {mailto address='adresse@hebergeur' encode='javascript' subject='Bonjour'}.
Pas de chance, la tag utilisateur vous renvoie une erreur.
Comme la documentation l'indique : Comment exécuter une balise Smarty à partir d'une balise personnalisée
Code :
echo "<table>";
echo "<thead><tr><th>email</th></tr></thead>";
global $gCms;
$db = &$gCms->GetDb();
$query = "SELECT email FROM maTable ";
$dbresult = &$db->Execute($query);
    while ($dbresult && !$dbresult->EOF)
    {
       $email = $dbresult->fields['email'];
       if ($email !='')
       {
           $smarty = &$gCms->GetSmarty();
           $smarty_data = "{mailto address='$email' encode='javascript' subject='Bonjour'}";  
           $smarty->_compile_source('temporary template', $smarty_data, $_compiled );
           @ob_start();
           $smarty->_eval('?>' . $_compiled);
           $_contents = @ob_get_contents();
           @ob_end_clean();
           echo "<td>".$_contents."</td></tr>";
        }
        else {
           echo "<td></td></tr>";
        }
        $dbresult->MoveNext();
    }
   if ($dbresult) $dbresult->Close();
   echo "</table>";
Répondre
#5

Salut Jean!

Du coup je me remet un peu au smarty. Le code que tu as passé marche très bien.
J'ai une base de données externe qui grossit et je ne préfère pas la mélanger avec la base de cmsms. Comme j'expérimente c'est mieux comme ça.
Comment je peux me connecter à une autre bdd avec smarty?
merci
Répondre
#6

Bonjour,

Il y a plusieurs méthodes pour accéder à une autre base de données que celle de cms ms.

Je peux t'indiquer celle que j'ai utilisée avec la création d'une balise utilisateur comportant le code php suivant :

ouverture de la base de données externe :

$dbhost="xxxxxt";
$dblogin="yyyy";
$dbpassword="zzzz";
$dbname="aaaaa";
$connect_mysql = mysql_connect($dbhost,$dblogin,$dbpassword);
if(!$connect_mysql) die("Impossible de se connecter à MySQL");
mysql_select_db($dbname) or die( "Impossible d'ouvrir $dbname : ".mysql_error() );

Ensuite ton code de manipulation de ta base et tes traitements.

et pour finir la fermeture de ta base et la reconnexion à celle de cms ms :

mysql_close($connect_mysql);

$dbhost="bbbbb";
$dblogin="ccccct";
$dbpassword="dddd";
$dbname="eeee";
$connect_mysql = mysql_connect($dbhost,$dblogin,$dbpassword);
if(!$connect_mysql) die("Impossible de se connecter à MySQL");
mysql_select_db($dbname) or die( "Impossible d'ouvrir $dbname : ".mysql_error() );

Ne pas oublier de réouvrir la base cms ms, car sinon cms ms est bloqué pour les accès suivants.

Cordialement

Jean-Michel Potiquet
Répondre
#7

J'arrive à me connecter à ma bdd externe mais je n'arrive pas à reproduire le 1er tableau plus haut de Jean le Chauve.

Y a t il quelque chose à changer dans les 2 lignes suivantes?

Code :
global $gCms;
$db = &$gCms->GetDb();
Les bdd externes n'aurons bientôt plus de secrets. Merci à Jean et Jean-Michel.

Boby
Répondre
#8

Merci d'ouvrir un nouveau post. Celui-ci était sensé servir de tuto.
Répondre
#9

Bonjour,
Existe-t-il une liste des objets, classes et méthodes du cms ?
Merci et bonne journée.
Répondre
#10

re,

Il y a tout ça sur le wiki http://wiki.cmsmadesimple.org/index.php/Main_Page
et en particulier
http://www.cmsmadesimple.org/apidoc/

J-C Etiemble v 2.2.xx
Répondre
#11

Magnifique ! Un grand merci.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)