Comment définir une variable contenant une include ? [PHP] - PHP - Programmation
Marsh Posté le 16-07-2009 à 22:19:04
idée au hasard (pas testé)
$variable=file_get_contents ('fichier.php');
Marsh Posté le 16-07-2009 à 22:27:34
Je vois absolument aucune application à ce que tu veux faire.. Mais ce qui s'en rapproche le plus est d'utiliser la fonction eval() à la place de ton echo :
Code :
|
Marsh Posté le 16-07-2009 à 22:33:12
Je vais tester ça, mais pour l'appli c'est simple.
Imagine un site vitrine sans BDD, dans ton template tu as toute une zone commune fixe et une zone dynamique pour le contenu. Pour chaque page soit tu as un texte court soit tu as quelque chose de plus complexe. Et dans la zone dynamique de ton template tu as <?php echo $variable ?>
et tu as un fichier de config qui switch en fonction de l'id de la page pour définir $variable, soit $variable = 'texte'; soit $variable = include(fichier.php); si jamais ça nécessite d'inclure un fichier tout entier.
D'habitude, j'utilise un système plus complexe d'include dynamique, mais là j'essaye de faire un truc où tu n'as juste qu'à modifier ton fichier de config et au pire un ou deux autres fichiers externes pour les pages complexes, afin d'éviter d'avoir une page de contenu différente pour chaque page.
Marsh Posté le 16-07-2009 à 22:55:00
Oui mais non...
tu fais juste un if qui switch entre un echo et un include ... pas besoin de chercher midi à 14h
Marsh Posté le 16-07-2009 à 23:40:13
esox_ch a écrit : Oui mais non... |
Je sais que j'ai cette possibilité là.
Mais ma question n'est pas "quel est le meilleur choix" c'est juste de savoir répondre à la problématique que je donne, car moi je bloquais dessus et je voulais savoir comment faire si un jour j'étais dans l'obligation d'utiliser cette méthode.
Marsh Posté le 17-07-2009 à 00:37:03
Au lieu de
Code :
|
Tu mets
Code :
|
Et encore mieux, si tu veux choisir ton contenu tu mets
Code :
|
Marsh Posté le 17-07-2009 à 01:39:51
Merci pour ta participation mais tu ne réponds pas du tout à ma question.
Je sais faire une include toute simple, ce n'est pas la question.
Je veux pouvoir avoir le choix entre définir une variable avec du texte ou avec un include fichier, sans utiliser de if, de switch, etc.
Ta proposition ne fonctionne qu'avec un fichier, si $variable = "coucou"; ça marche évidemment pas...
Ma question c'est une variable que je définie comme je veux (cf ci dessus) et après avec la fonction qu'on veut (echo, include, etc), ça affiche soit l'include soit le contenu, tout ça sans un if ni un switch.
Marsh Posté le 17-07-2009 à 10:17:27
Alors la réponse est non, non tu ne peux pas faire ça sans if ou autre
Marsh Posté le 18-11-2009 à 14:41:28
esox_ch a écrit : Je vois absolument aucune application à ce que tu veux faire.. Mais ce qui s'en rapproche le plus est d'utiliser la fonction eval() à la place de ton echo : |
je vais t'en donner une moi de raison... j'ai un formulaire assez énorme que je veux après enregistrer, ce que je voulais faire aussi c'est:
Code :
|
mais sa marche pas du tout, ca me crée bien le fichier mais apparemment $var a la valeur "1" est non la valeur de tous ce qui a dans "text.php"
je veux bien un peu d'aide sur cette question si vous savez comment faire.
merci
Marsh Posté le 18-11-2009 à 15:31:57
et dans ton text.php y'a quoi par exemple ?
sinon avec eval,
Code : |
rergarde du coté du buffer aussi
http://fr.php.net/manual/fr/ref.outcontrol.php
Code :
|
Marsh Posté le 18-11-2009 à 15:55:56
J'ai pas tout lu, mais à première vue si tu as besoin de faire ça c'est qu'il y a un truc qui ne va pas dans la conception du bouzin.
Marsh Posté le 18-11-2009 à 16:03:20
=> skeye
Ou l'envie forte de faire un code imbitable et impossible a maintenir, au choix
Marsh Posté le 18-11-2009 à 16:10:37
non moi je m'en sert, pour ma vue dans mon MVC
imagé une layout avec $this-content,
et un fichier php avec tout le traitement du 'content' dedans
c'est un peu délicat, au debut on a tendance a faire
include 'header.php'
include 'content.php'
include 'footer.php'
la non, le layout est en 1 seul fichier, ca parmet de faire par exemple des block (admin, message...) dynamique, et des les inseres apres
petit exemple d'une parti de mon code
Code :
|
Marsh Posté le 18-11-2009 à 16:16:18
Bah désolé de te dire ça, mais je trouve ça laid.
Et je parle même pas du @$_SERVER...
Marsh Posté le 18-11-2009 à 16:21:57
qu'est ce que tu proposerais comme solution adapté ?
bon apres le @ on a rien vu...
Marsh Posté le 18-11-2009 à 16:32:29
stealth35 a écrit : qu'est ce que tu proposerais comme solution adapté ? |
Franchement? J'ai même pas compris ce que tu essayes de faire avec ça.
Dans le doute et complètement au pif, je dirais que tu pourrais avoir une sorte de classe Layout qui maintient un liste d'objets affichables (tes blocs), et que tu initialises ta vue avec une instance de layout et une des instances de blocs.
Là-dessus, ton layout n'a a priori aucun mal à demander aux blocs de s'afficher au bon endroit...
Bon après j'ai peut-être rien compris à ton problème hein.
Marsh Posté le 18-11-2009 à 16:41:17
c'est un systeme de template rien de plus.
que tu fasses des liste d'objet ou pas, a un moment tu va devoir te retrouver avec :
Code :
|
avec dans ton block_message.php
Code :
|
Code :
|
Marsh Posté le 18-11-2009 à 16:52:40
stealth35 a écrit : a un moment tu va devoir te retrouver avec :
|
Je vois toujours pas l'intérêt.
Pour reprendre le truc de tout à l'heure, tu auras une classe Layout de ce style
Code :
|
Après il est très possible que la fonction display() de ton bloc "admin" se contente de faire un include("bloc_admin.php" ), mais il n'y a pas un eval ou je en sais quelle connerie du genre dans ces histoires...
Marsh Posté le 18-11-2009 à 16:57:14
sauf que a quelle moment tu lui insere la variable de l'utilisateur,
et surtout dans ton $this->beforeContent() et $this->afterContent()
c'est pareil faut que le code soit séparé, donc finis le template
on retourne a mon histoire du debut avec le
Code :
|
Marsh Posté le 18-11-2009 à 17:01:11
Dans mon exemple, chaque bloc sait s'afficher, il connait les variables dont il a besoin.
Et les beforeContent/afterContent savent afficher tout ce qui est du domaine du layout et non du contenu spécifique à la page demandée.
Bref, laisse tomber, je comprends rien à ce que tu racontes, on doit pas venir de la même planète.
Marsh Posté le 18-11-2009 à 17:11:37
héhé
je t'invite a faire un truc tout bete (si ta un peu de temps biensur)
ton layout.html
Code :
|
tes 2 pages
page info.php
Code :
|
page message.php
Code :
|
maintenant, quand tu fais index.php?action=info : ca affiche les info (décoré du layout, donc a la place de $this->content), et pareil avec index.php?action=message
Marsh Posté le 18-11-2009 à 17:50:58
stealth35 a écrit : héhé je t'invite a faire un truc tout bete (si ta un peu de temps biensur) |
C'est bien parce-que j'aimerais bien comprendre ce qui te bloque hein...
index.php:
Code :
|
Brol.php :
Code :
|
layout.phtml :
Code :
|
message.phtml
Code :
|
info.phtml :
Code :
|
Résultat :
Code :
|
Marsh Posté le 18-11-2009 à 19:29:18
ca pourrais etre une alternative, mais trop limité parce que on est obligé de créer une fonction,
j'ai un autre cas, ou je suis obligé comme ca de fait de l'asynchrone,
c'est un template de forumlaire (avec des champs genre option qui peuvent etre different), ce formulaire je le charge via DomDocument et je faire un traitrement derriere pour rempli les value, et ensuite j'affiche le forumaire rempli
mais je pourrais pas faire
$dom = new DomDocument();
$dom->load(form.php);
je vai me retrouve avec mes balises '<?php ?>' et le code dedan
ducoup
ob_start();
require_once('form.php');
$form = ob_get_contents();
ob_end_clean();
$dom = new DomDocument();
$dom->loadXML($form);
et la je peu traité mon truc
Marsh Posté le 18-11-2009 à 19:34:51
stealth35 a écrit : ca pourrais etre une alternative, mais trop limité parce que on est obligé de créer une fonction, |
Limité par quoi?
stealth35 a écrit : ce formulaire je le charge via DomDocument et je faire un traitrement derriere pour rempli les value, et ensuite j'affiche le forumaire rempli |
Marsh Posté le 18-11-2009 à 20:01:24
donc en fait, tu as pris un système qui a des contraintes pire qu'un vrai système de template ( genre smarty ) mais pas les avantages
Marsh Posté le 18-11-2009 à 20:15:18
Limité par quoi?
par l'écriture de fonction supplémentaire qu'on pas leur place dans un model MVC, et que par se principe de pattern, dans la vue ca doit etre uniquement des données de vue, donc pas de traitement derriere, mais je parle uniquement pour le mvc, apres y'a toujours plein de manière de faire les choses, et souvent y'a quelqu'un qui la deja fait et en mieux. En tout cas pour le buffer ca ma jamais choquer de ul'tilisé, et ca reviens assez souvent ce type de pratique (avec le require) dans les sources de framework (ZF par ex),
apres pour l'histoire du formulaire, c'est alternative que j'ai trouver, ('aura que moi un coup de Zend_Form et c'est réglé mais je dois dev sans framework de ce type), et le coup des
<input type="text" name="test" value="<?php echo $this->test ?>" />
pareil ca ils en veulent pas
en tout cas si t'as des trucs a partagé sur la gestion de template et les formulaires je suis preneur
Marsh Posté le 18-11-2009 à 20:16:08
flo850 a écrit : donc en fait, tu as pris un système qui a des contraintes pire qu'un vrai système de template ( genre smarty ) mais pas les avantages |
ca te choque toi aussi cette manip la ?
Marsh Posté le 18-11-2009 à 20:39:18
stealth35 a écrit : Limité par quoi? |
Ok, donc tu dis juste n'importe-quoi parce-que t'essaies de suivre un pattern que t'as même pas compris.
Toutes les classes que j'ai écrites plus tôt feraient partie de la couche vue dans le pattern MVC.
stealth35 a écrit : pour l'histoire du formulaire, c'est alternative que j'ai trouver, ('aura que moi un coup de Zend_Form et c'est réglé mais je dois dev sans framework de ce type), et le coup des <input type="text" name="test" value="<?php echo $this->test ?>" /> pareil ca ils en veulent pas |
qui ça, "ils"?
Marsh Posté le 18-11-2009 à 20:41:30
stealth35 a écrit : |
ça te surprend?
Tu utilises un parseur DOM pour ajouter du contenu dans un formulaire que tu génères toi-même au même moment, et ça te parait parfaitement normal?
Marsh Posté le 18-11-2009 à 20:50:36
je suis pas en freelance, j'ai des obligations. (malheuseusement)
Citation : Ok, donc tu dis juste n'importe-quoi parce-que t'essaies de suivre un pattern que t'as même pas compris. |
je suis pas d'accord, dans la partie Vue, doit y avoir aucun traitement et doit juste affiche le traitement, or toi la ducoup dans le layout tu fait le traitement pour que t'appelle la fonction
(on aurai du ouvrir un autre topic du coup)
Marsh Posté le 18-11-2009 à 20:52:58
skeye a écrit : |
pas au meme moment puisque qu'il est generer avant.
Marsh Posté le 18-11-2009 à 20:54:23
la vue ne peux pas récupérer des données, ni faire de traitement sur ces même données ( mais elle peut demander aux classes du modèles de faire le taf si besoin est )
la vue peut donc tout à fait faire les traitements nécessaires à son bon fonctionnement.
Marsh Posté le 18-11-2009 à 21:30:53
stealth35 a écrit : |
c'est bien ce que je dis, tu n'as pas compris. mvc...le but du jeu c'est de séparer les 3 couches, pas d'interdire des traitements de fonctionnement internes dans chaque couche, au contraire.
stealth35 a écrit : |
dans le traitement de la même requête, si tu préfères...
Marsh Posté le 18-11-2009 à 21:44:48
J'crois y'a du malentendu là
Si j'ai bien pigé, notre ami veut un <form> dans une template genre format HTML, avec possiblement du PHP, ouvrir cette template avec DOM, et y placer les valeurs dans les inputs J'attend confirmation
Marsh Posté le 18-11-2009 à 22:10:56
FlorentG a écrit : J'crois y'a du malentendu là Si j'ai bien pigé, notre ami veut un <form> dans une template genre format HTML, avec possiblement du PHP, ouvrir cette template avec DOM, et y placer les valeurs dans les inputs J'attend confirmation |
oui c'est ca, (meme si c'est pas le fond du topic, de fil en aiguille on est parti la dessus avec skeye), j'essaye a la base de lui montrer l'interet d'utiliser le buffer,
la c'etait l'exemple que tu dis, donc un template html avec du php de dedan et a manipuler apres avec DomDocument
(dans les grandes ligne)
Code :
|
tout ca est dans une class Form, ce qui me permet dans mon controller de faire par ex:
Code :
|
Marsh Posté le 18-11-2009 à 22:33:30
J'ai fait exactement ça dans mon machin
C'est le truc le plus simple pour faire des p'tits formulaires sans se taper de PHP ou quoique-ce-soit
Déjà hors de question de se taper des trucs styles :
Code :
|
[surtout qu'avec les intégrateurs, les htmlspecialchars disparaîssent facilement]
Pareil avec des fonctions qui génère les tags, bah faut apprendre l'API Et toutes les API de générations de tags suxent à mort. Là au moins tu torches ton formulaire vite-fait, et... et... y'a plus rien à faire !
J'ai aussi un modèle qui prend en paramètre la template du form pour générer des règles de validations. On peut un peut customiser avec des classes pour signaler des champs requis ou d'un certain type (genre class="email required" ). Bon c'est surtout pour des formulaires très simples, genre formulaire de contact.
J'ai 2-3 personnes qui ont utilisé ce système, et qui ont été bien contentes de n'avoir à faire que le formulaire et mettre quelques classes.
Ça ne dispense pas toutefois d'avoir la possibilité de faire quelque chose de plus complexe à côté. On doit pouvoir faire ses propres règles de validation (pour les validations nécessitant par exemple un appel à la base), mais aussi pouvoir faire des formulaire plus customs. Ce que permet le MVC, pouvoir switcher les composants sans changer le contrôleur par exemple.
Marsh Posté le 18-11-2009 à 22:50:53
j'ai fais pareil aussi pour le coup des class (email required), et de plus DomDocument échappe les carateres
j'ai un autre paramete aussi c'est l'extention des names, vu que je bosse avec doctrine (ouai celui j'ai le droit...ouf)
par exemple pour les emplois d'un utilisateur
j'aurai
Code : |
ducoup je fait
Code :
|
ce qui donnera
<input type="text" name="userEmplois[0]['date']" value="blabla" />
ducoup en POST si je valide mon premier emploi j'ai
Code :
|
un petit coup de merge avec doctrine et vendu
Marsh Posté le 19-11-2009 à 10:08:10
FlorentG a écrit : hors de question de se taper des trucs styles :
|
Ouais m'enfin si t'en es à mettre les htmlspecialchars dans le template au lieu de demander à un objet de la couche vue de te fournir une représentation utilisable dans une page web de ta variable t'as déjà tout faux depuis un moment, hein.
Marsh Posté le 16-07-2009 à 21:45:24
Bonjour à tous,
Petite question toute bète mais qui me pose problème.
Voici mon code actuel :
Je souhaiterais que l'include soit contenue dans la variable et que quand j'écho la variable, ça lance l'include du fichier.
Le problème c'est que dès que je déclare l'include, ça l'active tout de suite.
Si je mets des guillemets, quand je l'écho, ça écho comme du texte.
Bref, si quelqu'un peut m'aider, ce serait super !
Pour expliquer rapidement l'utilisation : un fichier config qui switch en fonction de l'id que je donne, pour chaque id, soit j'ai une variable de contenu, soit une variable d'include, et j'echo cette variable dans mon template.