[Résolu] Balise utilisateur -
Xtra - 06/01/2011
Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS: ?
#~ Nom de l'hébergeur : OVH
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.9.2
#~ Installed Modules:
#~ * CMSMailer: 2.0
#~ * FileManager: 1.0.3
#~ * MenuManager: 1.7.4
#~ * Search: 1.6.8
#~ * News: 2.11
#~ * nuSOAP: 1.0.2
#~ * Printing: 1.1.1
#~ * ThemeManager: 1.1.3
#~ * TinyMCE: 2.8.2
#~ * CGExtensions: 1.22.1
#~ * TreeManager: 0.6.0
#~ * ModuleManager: 1.4
#~ * Captcha: 0.4.3
#~ * FrontEndUsers: 1.12.8
#~ * CGCalendar: 1.5.6
#~ * SelfRegistration: 1.6.7
#~ * Forum: 0.9.4
#~ * Archiver: 0.2.3
#~ * CustomContent: 1.7.3
#~ Config Information:
#~ * php_memory_limit:
#~ * process_whole_template: false
#~ * output_compression: false
#~ * max_upload_size: 35000000
#~ * default_upload_permission: 664
#~ * url_rewriting: none
#~ * page_extension:
#~ * query_var: page
#~ * use_hierarchy: true
#~ * image_manipulation_prog: GD
#~ * auto_alias_content: true
#~ * locale:
#~ * default_encoding: utf-8
#~ * admin_encoding: utf-8
#~ * set_names: true
#~ Php Information:
#~ * phpversion: 5.2.9
#~ * md5_function: On (Vrai)
#~ * gd_version: 2
#~ * tempnam_function: On (Vrai)
#~ * magic_quotes_runtime: Off (Faux)
#~ * E_STRICT: 0
#~ * memory_limit: 128M
#~ * max_execution_time: 60
#~ * output_buffering: On
#~ * safe_mode: Off (Faux)
#~ * file_uploads: On (Vrai)
#~ * post_max_size: 15M
#~ * upload_max_filesize: 35M
#~ * session_save_path: /tmp (1777)
#~ * session_use_cookies: On (Vrai)
#~ * xml_function: On (Vrai)
#~ Server Information:
#~ * Server Api: cgi
#~ * Server Db Type: MySQL (mysql)
#~ * Server Db Version: 5.0.91
#~ ----------------------------------------------
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
Bonjour,
Je cherche a mettre une balise dans une autre balise.
J'ai tenté : echo "Le nombre d'enregistrement(s) est de {rr_somme_enreg_table table=ma_table}";
[Résolu] Balise utilisateur -
jissey - 06/01/2011
Bonsoir,
première remarque, si tu ne mets pas à jour CMSMS, tu vas te faire houspiller par les mods!
Pour ta question, c'est du smarty.
Je ne comprends pas trop ton exemple mais pour appeler une balise dans une autre tu peux utiliser {assign var='name' value='balise1'} et ensuite {balise2 param=$name}... je n'ai pas d'exemple concret en tête mais j'ai déjà utilisé cette méthode.
Vois si ça s'applique à ton cas.
[Résolu] Balise utilisateur -
Xtra - 07/01/2011
Je sais que je ne suis pas très à jour mais a chaque mise à jour j'ai des soucis. De plus la mise à jour entre la 1.8.2 et la 1.9.x et plus délicate donc je prends mon temps de bien tous tester avant.
Je ne suis pas sur de m'être bien exprimé. Je suis dans une balise utilisateur avec mon code PHP et au lieu de recopier un bout de code je l'ai mis dans une autre balise utilisateur. Je cherche seulement à l'appeler. Ca me semble très bête mais je suis coincé donc j'ai recopié mon code. Mais je préfèrerais coder plus propre.
[Résolu] Balise utilisateur -
jissey - 07/01/2011
Je crois comprendre...
peut-être ici la réponse
http://wiki.cmsmadesimple.org/index.php/User_Handbook/Admin_Panel/Extensions/User_Defined_Tags#How_to_Execute_Smarty_Tags_from_A_User_Defined_Tag_.28UDT.29
Mais si ton code devient trop complexe, il vaut peut-être mieux créer un module.
[Résolu] Balise utilisateur -
bess - 07/01/2011
Citation :De plus la mise à jour entre la 1.8.2 et la 1.9.x et plus délicate
ô_O'
je sais pas ou tu tires une telle information mais non, si l'on suit scrupuleusement les guides mis à dispo, la mise à jour se fait toujours sans soucis...
[Résolu] Balise utilisateur -
Xtra - 08/01/2011
Bonjour,
Du fait qu'il n'y a pas de mise à jour par différence mais complète.
jissey : Avant que mon code devienne complexe je serais devenue "bon"
Blague a part je n'ai pas réussi à comprendre le bout de code que j'avais déjà vue en french. Faut dire que mon ami Google fonctionne pas mal en se moment. Je post rarement car très souvent la solution existe. Le problème est de la comprendre quand on la trouve.
Dans une page {balise_utilisateur1} marche nikel et dans une balise utilisateur balise_utilisateur2 l'appel du code {balise_utilisateur1} met une erreur. Pourtant le tout se retrouve sur une page au final.
[Résolu] Balise utilisateur -
jissey - 08/01/2011
Bonsoir,
donc, il y a un message d'erreur et pourtant ça fonctionne.
Je ferai des essais lundi car ce cas de figure m'intéresse et j'y serai confronté un jour ou l'autre.
Est-ce que tu peux "dévoiler" ton exemple pour que je puisse tenter de t'aider.
Bon week-end.
[Résolu] Balise utilisateur -
Xtra - 08/01/2011
Je me suis décidé à mettre à jour le site pour voir si le problème persiste avec la dernière version. Mais mon 1er redémarrage me marque des erreurs. J'ai suivi à la lettre le tuto de JCE.
Pour l'instant j'en suis a :
Fatal error: Call to undefined method Content::URL() in /home/users/xtra/cmsms/admin/listcontent.php on line 723
Dans l'admin quand je cherche mes pages. J'essai de remettre tous en place est je reviens avec mes codes
Merci de t'intéresser a mon problème.
[Résolu] Balise utilisateur -
Xtra - 08/01/2011
Ouf j'ai fini la mise à jour sans trop en baver. Je commence a mieux saisir les arcanes de CMSMS.
Revenons a mon problème :
Dans ma page j'ai mis
{rr_ak_rech_multi}
rr_somme_enreg_table <--- nom de ma balise utilisateur 1
Code :
// Requête SQL
$sql = "SELECT * FROM ".$params['table'] ;
// Execution de la requête
$res = mysql_query($sql) or die ("Exécution de la requête impossible");
// Compte le nombre de ligne de résultat.
$nb_enregistrement = mysql_num_rows($res);
// Affichage du résultat
echo $nb_enregistrement;
rr_ak_rech_multi <--- nom de ma balise utilisateur 2
Code :
//Vérifie si on a choisit une valeur ici Nom
if(!empty($_POST['nom']))
{
// Attribue à la variable $nom, le nom du militaire
$nom = $_POST['nom'];
// Attribue à la variable $periode, la période de la recherche du militaire
$periode = $_POST['periode'];
// Requête SQL
$sql = "SELECT * FROM ak_matricules WHERE nom LIKE '".$nom."' AND periode='".$periode."' ORDER BY nom DESC LIMIT 0 , 100";
// Execution de la requête
$res = mysql_query($sql) or die ("Exécution de la requête impossible");
// Compte le nombre de ligne de résultat.
$nb_enregistrement = mysql_num_rows($res);
echo "<div align=center>";
echo "<table border=1 rules=all bordercolor='#000000'";
echo "<tr><td colspan=9 align=center valign=middle height=40>".$nb_enregistrement." soldat(s) trouvé(s)/{rr_somme_enreg_table table=ak_matricules} soldat(s)</td></tr>"; <---- LIGNE QUI NE FONCTIONNE PAS CORRECTEMENT
echo "<tr>";
echo "<td width=100 height=40 align=center><strong>Noms</strong><br></td>";
echo "<td width=100 height=40 align=center><strong>Prénoms</strong><br></td>";
echo "<td width=40 height=40 align=center><strong>Pages</strong><br></td>";
echo "<td width=60 height=40 align=center><strong>Matricule</strong><br></td>";
echo "<td width=100 height=40 align=center><strong>Lieu</strong><br></td>";
echo "<td width=100 height=40 align=center><strong>Département</strong><br></td>";
echo "<td width=100 height=40 align=center><strong>Pays</strong><br></td>";
echo "<td width=240 height=40 align=center><strong>Régiments</strong><br></td>";
echo "<td width=60 height=40 align=center><strong>Réf.</strong><br></td>";
echo "</tr>";
while ($donnees=mysql_fetch_array($res))
{
echo "<tr height= 20 align=center>";
echo "<td align=center>$donnees[nom]</td>";
echo "<td align=center>$donnees[prenoms]</td>";
echo "<td align=center>$donnees[page]</td>";
echo "<td align=center>$donnees[matricule]</td>";
echo "<td align=center>$donnees[lieu_origine]</td>";
echo "<td align=center>$donnees[dep_origine]</td>";
echo "<td align=center>$donnees[pays_origine]</td>";
echo "<td align=center>$donnees[regiments]</td>";
echo "<td align=center>$donnees[references]</td>";
echo "</tr>";
}
echo "</table>";
echo "</div>";
}
[Résolu] Balise utilisateur -
jissey - 10/01/2011
Bonsoir,
je comprends mieux la problématique...
Rapidement, première remarque, il faudrait utiliser les outils de CMSMS pour requêter la base.
CMSMS utilise la librairie ADODB pour dialoguer avec MySQL. Pour faire ta requête tu devrais faire:
Code :
$db =& $this->GetDb();
$sql = 'SELECT * FROM ".$params['table'];
$dbresult =& $db->Execute($sql);
echo $dbresult -> RecordCount()
Un tuto ADODB en french:
http://phplens.com/phpeverywhere/adodb_french
Je teste la compilation de la balise2 dans la balise1 demain matin.
[Résolu] Balise utilisateur -
Jean le Chauve - 10/01/2011
Comme
ceci peut-être ?
[Résolu] Balise utilisateur -
jissey - 10/01/2011
Oui, merci JLC, c'est mieux en français.
Donc pour résumer, dans ton UDT rr_somme_enreg_table tu mets:
Code :
global $gCms;
$db = &$gCms->GetDb();
$sql = "SELECT * FROM ".$params['table'];
$dbresult =& $db->Execute($sql);
echo $dbresult -> RecordCount();
et dans rr_ak_rech_multi (là, je ne refais pas le SQL):
Code :
//appel de la balise rr_somme_enreg_table
global $gCms;
$smarty = &$gCms->GetSmarty();
$smarty_data = "{rr_somme_enreg_table table=ak_matricules}"; //UDT précédente.
$smarty->_compile_source('temporary template', $smarty_data, $_compiled ); //compilation/interprétation de la balise. Le résultat est rangé dans $_compiled
@ob_start(); //on ouvre un tampon: ce qui suit sera executé en mémoire sans affichage.
$smarty->_eval('?>' . $_compiled); //evaluation/exécution du résultat de la compile.
$final_compiled = @ob_get_contents();//récupération du contenu du tampon dans une variable.
@ob_end_clean(); //fin tampon
//Vérifie si on a choisit une valeur ici Nom
if(!empty($_POST['nom']))
{
// Attribue à la variable $nom, le nom du militaire
$nom = $_POST['nom'];
// Attribue à la variable $periode, la période de la recherche du militaire
$periode = $_POST['periode'];
// Requête SQL
$sql = "SELECT * FROM ak_matricules WHERE nom LIKE '".$nom."' AND periode='".$periode."' ORDER BY nom DESC LIMIT 0 , 100";
// Execution de la requête
$res = mysql_query($sql) or die ("Exécution de la requête impossible");
// Compte le nombre de ligne de résultat.
$nb_enregistrement = mysql_num_rows($res);
echo "<div align=center>";
echo "<table border=1 rules=all bordercolor='#000000'";
echo "<tr><td colspan=9 align=center valign=middle height=40>".$nb_enregistrement." soldat(s) trouvé(s)/."$final_compiled." soldat(s)</td></tr>"; <---- appel de la variable résultante de ta balise rr_somme_enreg_table
echo "<tr>";
echo "<td width=100 height=40 align=center><strong>Noms</strong><br></td>";
echo "<td width=100 height=40 align=center><strong>Prénoms</strong><br></td>";
echo "<td width=40 height=40 align=center><strong>Pages</strong><br></td>";
echo "<td width=60 height=40 align=center><strong>Matricule</strong><br></td>";
echo "<td width=100 height=40 align=center><strong>Lieu</strong><br></td>";
echo "<td width=100 height=40 align=center><strong>Département</strong><br></td>";
echo "<td width=100 height=40 align=center><strong>Pays</strong><br></td>";
echo "<td width=240 height=40 align=center><strong>Régiments</strong><br></td>";
echo "<td width=60 height=40 align=center><strong>Réf.</strong><br></td>";
echo "</tr>";
while ($donnees=mysql_fetch_array($res))
{
echo "<tr height= 20 align=center>";
echo "<td align=center>$donnees[nom]</td>";
echo "<td align=center>$donnees[prenoms]</td>";
echo "<td align=center>$donnees[page]</td>";
echo "<td align=center>$donnees[matricule]</td>";
echo "<td align=center>$donnees[lieu_origine]</td>";
echo "<td align=center>$donnees[dep_origine]</td>";
echo "<td align=center>$donnees[pays_origine]</td>";
echo "<td align=center>$donnees[regiments]</td>";
echo "<td align=center>$donnees[references]</td>";
echo "</tr>";
}
echo "</table>";
echo "</div>";
}
Voilà, ceci devrait marcher, je ne peux pas tester sans ta bdd.
J'ai fait 2 balises qui fonctionnent pour tester.
comptage:
Code :
global $gCms;
$db = &$gCms->GetDb();
$sql = "SELECT * FROM ".cms_db_prefix()."content";
$dbresult =& $db->Execute($sql);
echo $dbresult -> RecordCount();
et display_comptage
Code :
global $gCms;
$smarty = &$gCms->GetSmarty();
$smarty_data = "{comptage}";
$smarty->_compile_source('temporary template', $smarty_data, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$final_compiled = @ob_get_contents();
@ob_end_clean();
echo "Il y a ".$final_compiled." pages dans le site.";
[Résolu] Balise utilisateur -
Xtra - 11/01/2011
Bonsoir,
Merci beaucoup pour cette réponse bien détaillée. J'ai fait fonctionner mon code et en plus je l'ai compris.
J'ai modifié mes 2 UDT pour avoir des connections ADODB. Le code via ADODB me semble bien plus compliqué.
Pour partir sur de bonne base j'ai deux questions qui me viennent à l'esprit suite au changement que tu me fais apporter à mon code.
1 - Est-ce que mon code PHP avec la connexion via ADODB est un standard ? Je veux dire par la, si je change de CMS ou si soyons fou je code sans CMS mon code sera obsolète.
2 - Est-ce que le code via ADODB est plus, moins optimisé que la méthode que j'avais utilisée ?
JLC : Effectivement j'avais trouvé la version française du 1er lien que jissey m'avais mis en lien. J'avais bien fait quelques tests en trifouillant. Le code était tellement barbare pour moi et je m'attendais aussi pas, a autant de ligne de code pour si peu (dans ma vision de débutant). Merci quand même.
[Résolu] Balise utilisateur -
bess - 11/01/2011
Citation :Est-ce que mon code PHP avec la connexion via ADODB est un standard ? Je veux dire par la, si je change de CMS ou si soyons fou je code sans CMS mon code sera obsolète.
Ne t'y méprend pas, coder avec ADODB n'ajoute pas de performance, il ne rend pas plus standard et ce code ne fonctionnera pas sur un autre CMS si celui ci ne fonctionne pas sur ADODB également
ADODB c'est ce qu'on appel un "best practice", c'est une manière de concevoir les choses plus qu'une nouvelle technologie. C'est avoir la possibilité de faire abstraction du type de base de donnée (Oracle ? mysql ? postgresql ? nosql ?) par rapport à ton code.
Ainsi techniquement ton installation CMSMS sous mysql fonctionnera exactement de la même manière que sous oracle car c'est ADODB qui se charge de cacher les petites différences de fonctionnement. Et dieu sait qu'il y en a des différences !
Coder en SQL pure pour attaquer une base Mysql c'est risquer demain de tout recoder par ce que ton nouvel environnement n'est pas sous Mysql, avec ADODB c'est plus un soucis.
Second point : les fonctionnalités de ADODB sont extrêmement puissante, pour exemple la façon de récupérer les données de ta requête dans un tableau de donnée et de le parcourir de manière sécurisé dans un simple "while()"
bref, un best-practice
[Résolu] Balise utilisateur -
Xtra - 12/01/2011
J'avais peur ce cette réponse qui me confirme mes doutes. merci bess.
[Résolu] Balise utilisateur -
jissey - 12/01/2011
C'est un best-practice, oui car il a été choisi par les dev, mais ça facilite quand même pas mal le code pour les fainéants comme moi.
Quant à la performance, de ce que j'ai pu lire, c'est la librairie d'abstraction la plus rapide.
Lu aussi que depuis PHP5 ADODB MySQL soustraite avec PDO...