8768 sujets

Développement web côté serveur, CMS

Re bonjour à tous (oui je sais deux topics le même jour j'abuse sûrement un peu mais mon envie d'apprendre et sans limite Smiley biggrin )

Voila dans le cadre de mon projet je suis obligé d'utiliser smarty. Pour l'instant bien que je comprenne le fonctionnement de base, j'ai un peu de mal à m'y retrouvé avec son fonctionnement.

Pour bien comprendre les deux problèmes qui suivent, je pose les bases. Le site comporte :

- un dossier PHP avec tous les fichiers php de traitement renvoyant vers les modèles
- un dossier HTML avec tous les modèles.

Alors premièrement, lorsque je fais des display pour afficher les modèles, j'utilise pour l'instant des chemins de ce type :

$smarty->display("../html/inscription_NOK.html");


Mon problème est le suivant : lors de la navigation, étant donné que je fais appel à des fichiers contenu dans des sous-dossiers je me retrouve avec des erreurs 404 puisque les liens ne sont fonctionnels que si je suis dans le bon répertoire.
J'ai donc crée une variable dans mon fichier config.php du style :

$URL="http://www.toto.com";


sauf que Smarty n'a pas l'air d'aimer ce genre de variable dans son code puisque je me retrouve avec une erreur soit de chargement de template soit de wrapper HTTP.

$smarty->display("$URL/html/inscription_NOK.html");


Ma question est donc simple, comment pourrais-je régler simplement ce problème ? j'aimerais vraiment utiliser une sorte de variable pour utiliser des chemins absolus ce qui m'éviterai les erreurs 404.

Je précise que j'ai aussi essayé un truc du genre

$smarty->display("".getcwd()."/html/inscription_NOK.html");


Deuxièmement.

J'ai donc un menu sur l'ensemble de mes pages et qui varie en fonction du fait que le membre soit connecté ou non.
Dans les pages classiques PHP, je fais quelque chose dans ce genre :

<?php 
	if(empty($_SESSION))
		{
		 include("html/header.html"); 
	   }
	else
	{
		include("html/header_membre.html"); 
	} 
?>


Sauf que dans certains modèles HTML, j'ai besoin de faire quelque chose de similaire mais je ne peux pas utiliser PHP.
Je cherche donc à faire dans le même genre mais avec la syntaxe de smarty.

J'ai tenté comme ceci :

$smarty->assign('logged',$_SESSION['id']);
dans mon php

et dans le HTML :

{if {$logged} != ""}
		{include file="../html/header_membre.html"}
	{else}
		{include file="../html/header.html"}
{/if}


mais ça ne fonctionne pas.
En fait en cherchant un peu sur le net, je n'ai pas trouvé grand chose sur l'utilisation des sessions avec Smarty.

Voila donc si quelqu'un peut éclairer ma lanterne pour ces deux questions, je perds un temps fou sur ça alors que j'ai un délai super serré Smiley bawling Smiley bawling .

Merci !
Modifié par shupi (17 Feb 2014 - 20:02)
Quand tu fais un smarty->display ça reviens à faire un include de ton fichier de template (modèle). Donc il attend un chemin du système de fichiers et pas une URL.

Pour t'éviter les tracas avec les chemins relatifs quand tu fais tes inclusions de fichiers tu devrais travailler avec des chemins absolus.

Et pour ton deuxième problème :


$logged = false;

if ( !empty($_SESSION['id']) ) {
  $logged = true;
}

$smarty->assign('logged',$logged);


Et dans le template :


{if $logged}
  {include file="../html/header_membre.html"}
{else}
  {include file="../html/header.html"}
{/if}


Une question, tu es étudiant ou en formation si j'ai bien compris, c'est ton prof qui vous oblige à utiliser Smarty ?
Modifié par jb_gfx (17 Feb 2014 - 21:02)
J'ai toujours ce genre de message :

Notice: Undefined index: logged in /********/php/templates_c/875629e24d485881e53623f1cbd8aed4aa67dce1.file.compte.html.php on line 58

Pour répondre à ta question oui je suis en formation actuellement et dans le cadre du projet à réaliser smarty coûte une bonne partie de la note donc oui c'est obligé.

Je n'ai pas trop l'habitude de le manipuler vu que nous n'avons eu aucun cours dessus mais il vaut mieux que je m'y fasse, l'entreprise où je vais bientôt faire mon stage l'utilise.
Le message signifie que tu n'as pas assigné la variable logged à ton template.

Tu peux poster ton code ?
côté PHP

case 'connexion':
			
			// on vérifie que le le login et le password existe bien dans la base de données
			$login= $_POST['login'];
			$password= $_POST['password'];
			$query="SELECT * FROM membre WHERE login=".$connexion->quote($login)." AND pass=".$connexion->quote(md5($password))." AND valide='yes'";
			
			try {
					//récupération des données dans la table membre
					$res = $connexion->query($query);
					$ligne=$res->fetch(PDO::FETCH_OBJ);
					$id = $ligne->id_membre;
					
					// si l'id du membre existe, on démarre la session
					if ($id != null)
					{
						$smarty = new Smarty();
						session_start();
						
						// récupération des infos du membres
						$infosession = array(
						$_SESSION['id'] = $ligne -> id_membre,
						$_SESSION['login'] = $ligne -> login,
						$_SESSION['date_inscription'] = $ligne -> date_inscription,
						$_SESSION['lastvisite'] = $ligne -> lastvisite,
						$_SESSION['email'] = $ligne -> email,
						$_SESSION['civilite'] = $ligne -> civilite,
						$_SESSION['nom'] = $ligne -> nom,
						$_SESSION['prenom'] = $ligne -> prenom,
						$_SESSION['ville'] = $ligne -> ville,
						$_SESSION['telephone'] = $ligne -> telephone,
						$_SESSION['cp'] = $ligne -> code_postal
						);
						// on redirige le membre connecté
						header("Location: ../index.php");
						
						// maj de la date de dernière visite
						$now=date("Y-m-d");
						$update="UPDATE membre SET lastvisite=".$connexion->quote($now)." WHERE id_membre=".$connexion->quote($id);
						$connexion->exec($update);
						
						$logged = false;
						if ( !empty($_SESSION['id']) ) {
						  $logged = true;
						}
						$smarty->assign('logged',$logged);
					}
						// message d'erreur si les informations de connexion sont érronnées
					else 
					{
						header("Location:../connexion.php?error=badlogin");
					}
				}
						// message d'erreur si la connexion n'a pas pu se faire même si les ID sont bons
				catch (PDOException $erreur)
				{
				
					$smarty = new Smarty();
					$smarty->display("../html/error.html");
				}
		
			break;


côté HTML :

<header id="headert">
			{if $logged}
 			 {include file="../html/header_membre.html"}
				{else}
 			 {include file="../html/header.html"}
			{/if}
		</header>

Modifié par shupi (17 Feb 2014 - 22:59)
Je ne vois pas où tu appelles ton template après avoir assigné ta variable 'logged' (à la ligne : $smarty->assign('logged',$logged);)
Modifié par jb_gfx (17 Feb 2014 - 23:27)
en fait je crois que la fatigue et la saturation me font dire et faire un peu n'importe quoi.

le header.html ou header_membre.html ne sont pas affichés via un template sur une page unique mais sont présents en permanence sur l'ensemble de pages du site.

Donc mon problème est la en fait. Je crée bien la variable $logged à la connexion du membre mais il faut que je puisse réutiliser ça partout.

(désolé pour le temps perdu à faire/dire n'imp)
Modifié par shupi (17 Feb 2014 - 23:55)