-
Bonjour rawsrc, $page = new PhpEcho('layout/main.php');
$page['title'] = 'Contact';
$page['description']= 'Formulaire de contact, étape 3';
$page['language'] = $language;
$body = new PhpEcho('block/form.4.php');
$body['header'] = new PhpEcho('block/header.php');
$body['language'] = $language;
$body['menu'] = new PhpEcho('block/menu.php');
//$body['errors'] = '';
$type = (int) $_SESSION['post'][1]['type'];
$form = 20 + $type;
$session = $_SESSION['post'][$form];
switch($type)
{
case 1:
$block['subForm'] = new PhpEcho('block/subForm.41.php');
break;
case 2:
$block['subForm'] = new PhpEcho('block/subForm.42.php');
break;
}
switch($form)
{
case 21:
break;
case 22:
switch($session['gender'])
{
case 'F':
$gender = "Madame";
break;
case 'M':
$gender = "Monsieur";
break;
}
foreach($session as $key=>$string)
{
$block[$key] = $session[$key];
}
break;
}
$block['fullname'] = $gender . ' ' . $session['firstname'].' '.$session['familyname'];
$body['content'] = $block;
$page['body'] = $body;
echo $page; Fichier conteneur 'block/form.4.php': <body>
<?= $this['header'] ?>
<h2>Contact : étape 4</h2>
<div class="mainSection">
<?= $this['menu'] ?>
<article id="right">
<?= $this['content']; ?>
</article>
</div>
</body> Bloc enfant 'block/subForm.42.php': <h3>Détails de votre message</h3>
<p>Vous êtes une organisation (entreprise, association, syndicat, etc.).</p>
<fieldset><legend>Vous</legend>
<label>Nom : <strong><?= $this['fullname'] ?></strong></label><br>
<label>Fonction : <strong><?= $this['role'] ?></strong></label><br>
<label>Tél. direct : <strong><?= $this['directDial'] ?></strong></label><br>
<label>Courriel : <strong><?= $this['email'] ?></strong></label><br>
</fieldset> Avec ce code, j'obtiens une erreur Array to string conversion in block\form.4.php on line 7 |
Beta Was this translation helpful? Give feedback.
Replies: 22 comments 7 replies
-
Salut moimp C'est tout à fait normal l'erreur que tu obtiens, regarde ce que tu fais avec Essaie avec ceci : $page = new PhpEcho('layout/main.php');
$page['title'] = 'Contact';
$page['description'] = 'Formulaire de contact, étape 3';
$page['language'] = $language;
$body = new PhpEcho('block/form.4.php');
$body['header'] = new PhpEcho('block/header.php');
$body['language'] = $language;
$body['menu'] = new PhpEcho('block/menu.php');
$type = (int) $_SESSION['post'][1]['type'];
$form = 20 + $type;
$session = $_SESSION['post'][$form];
$num_form = match ($type) {
2 => 42,
default => 41, // j'ai joué aux devinettes
};
$sub_form = new PhpEcho("block/subForm.{$num_form}.php");
if ($form === 22) {
$gender = match ($session['gender']) {
'F' => 'Madame',
default => 'Monsieur', // parait logique
};
foreach ($session as $k => $v) {
$sub_form[$k] = $v;
}
$sub_form['fullname'] = $gender . ' ' . $session['firstname'].' '.$session['familyname'];
} else {
$sub_form['fullname'] = '';
}
$body['content'] = $sub_form;
$page['body'] = $body;
echo $page; rawsrc PS : Pense à indiquer ta version de PHP et de PhpEcho 😉 |
Beta Was this translation helpful? Give feedback.
-
Salut moimp j'ai oublié de te conseiller pour les blocks répétitifs et/ou inclus d'utiliser dans ton rendu les méthodes prévues pour ces traitements comme rawsrc |
Beta Was this translation helpful? Give feedback.
-
Salut, $block['style'] = 'background-color:#b0cf77';
/*
$block['imgSrc'] = 'images/logoSirep.png';
$block['goal'] = 'Pour les entreprises';
$block['title'] = 'La prospection commerciale';
$block['text'] = <<<'html'
<ul>
<li>Assurez le suivi commercial de vos clients et prospects</li>
<li>Gérez les rappels de vos clients</li>
<li>Notez les résumés de vos contacts</li>
<li>Fonctions spécifiques B to B (d'entreprise à entreprises)</li>
</ul>
html;
$li[] = "Assurez le suivi commercial de vos clients et prospects";
$li[] = "Gérez les rappels de vos clients";
$li[] = "Notez les résumés de vos entretiens";
$li[] = "Fonctions spécifiques B to B (d'entreprise à entreprises)";
*/
$block['text'] = new PhpEcho('block/appSirep.php'); Non, je n'ai rien lâché du tout. J'ai contourné le problème (politique de l'autruche) pour avancer dans mon projet. |
Beta Was this translation helpful? Give feedback.
-
salut moimp, je me suis permis de ranger un peu tes fils de discussion sinon on ne va pas y arriver tes vues sont séparées du reste, on est bien d'accord ? donc pour ton souci de liste, tu dois faire simple :
dans ton fichier de vue, tu dois avoir un truc comme ça : <ul>
<?php foreach ($this['list'] as $v { ?>
<li><?= $v ?></li>
<?php } ?>
</ul> et dans la définition de valeurs, tu dois avoir un truc de ce style : $li = [
"Assurez le suivi commercial de vos clients et prospects",
"Gérez les rappels de vos clients",
"Notez les résumés de vos entretiens",
"Fonctions spécifiques B to B (d'entreprise à entreprises)",
];
$block['list'] = $li; |
Beta Was this translation helpful? Give feedback.
-
Pour les autres points, je vais faire une mise à jour de |
Beta Was this translation helpful? Give feedback.
-
Merci pour tout. Je pense que j'ai bien progressé. |
Beta Was this translation helpful? Give feedback.
-
Voici une question concernant ton paragraphe Child blocks / AUTO WIRING VARS: $home = new PhpEcho('layout/main.php');
$home['language'] = $language;
$body = new PhpEcho('block/home.php');
$body['language'] = $language;
$services = [];
$block = new PhpEcho('block/appli.php');
$block['language'] = $language;
$services[] = $block;
$body['homeFrame'] = new PhpEcho('block/homeFrame.php', ['services' => $services]);
$home['body'] = $body;
echo $home; Je constate que je suis obligé de répéter plusieurs fois la paire clef/valeur de définition de la langue dans chaque bloc et qu'il ne suffit pas de la définir à la racine pour l'utiliser avec $this. Mais ai-je bien compris tes explications? |
Beta Was this translation helpful? Give feedback.
-
Erratum sur la fin de mon message précédent: |
Beta Was this translation helpful? Give feedback.
-
salut moimp il me semble que tu fais une de ces salades entre $body = new PhpEcho('block/home.php', [
'homeFrame' => new PhpEcho('block/homeFrame.php', ['services' => new PhpEcho('block/appli.php')])
});
echo new PhpEcho('layout/main.php'; [
'language' => $language,
'body' => $body
}); Pourquoi t'es obligé de redéfinir tes blocs ainsi ? Normalement, ils devraient être définis de manière statique dans les fichiers de vue (HTML). |
Beta Was this translation helpful? Give feedback.
-
Les éléments que je t'ai donné sont un extrait du code que tu m'as donné ici. A noter toutefois que ce code a été encore étendu. J'ai plusieurs blocs imbriqués (inclus) les uns dans les autres.
$home est le parent de $body qui est lui même le parent de $block qui contient lui-même plusieurs blocs dans $services[]. |
Beta Was this translation helpful? Give feedback.
-
salut moimp Tu ne devrais pas gérer le langage ainsi. Pour le peu d'éléments que j'ai, je devine que t'as dû dupliquer le code de tes vues pour chaque langage. C'est une erreur. Tu devrais plutôt utiliser un système de traduction à base de tableaux par exemple (c'est le plus simple) et coder un petit helper dans PhpEcho qui ira chercher la traduction au rendu. Par exemple, tu définis le langage souhaité comme un paramètre global de PhpEcho et ensuite ton helper va pouvoir identifier dans quel tableau aller piocher les mots clés. Quand tu codes, tu dois absolument chercher à bannir toute duplication de code, c'est carrément vital. Dès que tu copie/colle avec une légère modification de code, tu dois t'arrêter et réfléchir à la problématique. rawsrc |
Beta Was this translation helpful? Give feedback.
-
Je n'arrive pas à placer ni à utiliser ma variable '$language' dans un contexte global.
Dans la vue, j'ai ceci: EDIT: J'ai supprimé la deuxième partie de la question que j'ai résolue. |
Beta Was this translation helpful? Give feedback.
-
salut moimp il faudrait que tu codes un helper pour tes traductions du style $i18n = function(string $keyword): string {
$lang = PhpEcho::getGlobalParam('language');
// là tu codes la partie en charge d'extraire la traduction en fonction de la langue et du mot clé du dictionnaire
$translated = '...';
return $translated;
};
PhpEcho::addHelper('i18n', $i18n); Ensuite dans une vue tu n'as plus qu'à faire C'est aussi simple que ça 👍 rawsrc |
Beta Was this translation helpful? Give feedback.
-
bah, je te dirai que sa simplicité objet est sa force et du coup j'ai du mal à me mettre à la place des débutants en PHP et en POO. J'ai essayé de faire un effort dans la version 6.1.1 question manuel mais comme généralement je préfère lire le code source à la documentation pour comprendre ce que fait le programme, j'ai tendance à généraliser un peu surtout quand l'outil tient en une seule classe. C'est pourquoi je réponds bien volontiers aux questions posées via GitHub ou à celles (plus nombreuses) posées directement par mail. |
Beta Was this translation helpful? Give feedback.
-
Erreur incompréhensible dans contexte:
Pourtant $card est bien défini !!! |
Beta Was this translation helpful? Give feedback.
-
Salut,
oui $card est bien défini mais pas $textes->*card*->h2 d'où l'erreur
Martin
Le jeu. 19 oct. 2023 à 10:53, moimp3 ***@***.***> a écrit :
… Erreur incompréhensible dans contexte:
Le code suivant renvoie une erreur inexpliquée: "Undefined property:
stdClass::$card on line 6"
$card = new PhpEcho('layout/main.php');
$card['title'] = $textes->card_title;
$card['description'] = $textes->card_description;
$card['language'] = $language;
var_dump($card); // vars retourne les trois valeurs précédentes
$card['h2'] = $textes->card->h2; // provoque l'erreur ci-dessus
Pourtant $card est bien défini !!!
—
Reply to this email directly, view it on GitHub
<#24 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAJSSYNVUG736ATU65E5G5LYADS7LAVCNFSM6AAAAAA3WUU6JKVHI2DSMVQWIX3LMV43SRDJONRXK43TNFXW4Q3PNVWWK3TUHM3TGMRUGMZTA>
.
You are receiving this because you modified the open/close state.Message
ID: ***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Bonjour rawsrc, <?php declare(strict_types=1);
// EDIT USER
use rawsrc\PhpEcho\PhpEcho;
// check current user as security
if( empty($_SESSION['user']['webmaster']) )
{
header('Location: index.php');
exit;
}
$Users = getUsers();
$lstUser = new OptListSelect('user');
$lstUser->addOption( new OptListOption() );
$lstUser->addOption( new OptListOption('0', "<nouveau>") );
if($Users)
{
foreach($Users as $user)
{
$lstUser->addOption( new OptListOption( (string) $user['id'], "{$user['login']}. ({$user['fullname']})") );
}
}
$user = new PhpEcho('layout/main.php');
$user['title'] = $textes->head_title;
$user['description']= $textes->head_description;
$user['language'] = 'fr';
$body = new PhpEcho('block/editUser.php');
$body['errors'] = errorHandler();
$body['language'] = 'fr';
$body['lstUser'] = $lstUser;
// for next three lines, pages are required in index.php and parameters are defined in relevant pages
$body['header'] = $header;
$body['footer'] = $footer;
$body['menu'] = $menu;
$user['body'] = $body;
echo $user; |
Beta Was this translation helpful? Give feedback.
-
salut moimp, je ne vois pas dans ton code PhpEcho::setTemplateDirRoot('répertoire_racine_pour_toutes_les_vues'); c'est normal ? |
Beta Was this translation helpful? Give feedback.
-
Bonjour rawsrc, session_start();
require_once 'config.php';
require_once 'define.php';
require_once PATH_MODEL;
spl_autoload_register(function (string $className)
{
foreach ( glob(DIR_CLASS.DIRECTORY_SEPARATOR.'*', GLOB_ONLYDIR) as $dir )
{
if( file_exists($dir.DIRECTORY_SEPARATOR.$className.".php") )
require_once $dir.DIRECTORY_SEPARATOR.$className.".php";
}
});
require_once DIR_ROOT.'vendor'.DIRECTORY_SEPARATOR.'autoload.php';
require_once PATH_FUNCTIONS;
use rawsrc\PhpEcho\PhpEcho;
// ... Recherche de la langue et du fichier de textes
PhpEcho::setTemplateDirRoot(DIR_ROOT.'view'); Voilà pourquoi je ne comprends pas. |
Beta Was this translation helpful? Give feedback.
-
Bonjour rawsrc, |
Beta Was this translation helpful? Give feedback.
-
salut, si ça fonctionne pour tu dois investiguer ton code. |
Beta Was this translation helpful? Give feedback.
-
euh ton autloader est vachement bancal |
Beta Was this translation helpful? Give feedback.
Salut moimp
C'est tout à fait normal l'erreur que tu obtiens, regarde ce que tu fais avec
$block
:En 1 : tu codes
$block['subForm'] = new PhpEcho(...);
donc$block
n'est pas une instance dePhpEcho
, c'est$block['subForm']
qui l'est (première erreur),$block
est un tableau en l'occurrence...En 2 : tu codes
$block['fullname'] = $gender . ' ' . $session['firstname'].' '.$session['familyname'];
, ce qui exclut d'emblée la possibilité d'avoir un tableau dePhpEcho
. Un tableau d'instances dePhpEcho
est géré par le moteur et au rendu il est transformée en chaîne de caractères. Dès que tu mélanges dans un tableau des valeurs de type différents, le rendu du tableau dans la page doit être fait à…