Code PHP dans un scenario

Bonjour à tous

Je démarre en php et j’essaye d’adapter un scénario pour ajouter une date dans un agenda avec du code php dans un scénario

Si j’écris dans le code:
$cmd=cmd::byString(’#[xxxxxx][Agenda][Ajouter une date]#’);
$cmd->execCmd($options=array(‹ title ›=>‹ xxxxxxxxx Vacances ›, ‹ message ›=> ‹ 2020-02-26:2020-03-04 ›), $cache=0);
l’agenda est mis à jour

Si j’écris dans le code:
$cmd=cmd::byString(’#[xxxxxx][Agenda][Ajouter une date]#’);
$CommandeArray="‹ title ›=>‹ xxxxxxxxx Vacances ›, ‹ message ›=> ‹ 2020-02-26:2020-03-04 ›";
$cmd->execCmd($options=array($CommandeArray), $cache=0);
L’agenda n’est pas mis à jour

Quelqu’un peut-il me corriger ou me dire où trouvez l’info?
Mes premières recherches (Jeedom et Google) n’ont rien donné. Certainement car elles sont mal dirigées.
Mais je manque d’expérience dans ce domaine.

Comment récupère-t-on le code d’erreur de la dernière ligne pour essayer de debuger
une commande du type $Result= $cmd->execCmd($options=array($CommandeArray), $cache=0);
suivi de ==> log::add($DebugLog,« Info »,« Après execcmd = $Result »);
Affiche ==> Après execcmd =

Merci de votre aide

Bonjour,
Je suis sur tel donc j’espère que tu vas comprendre car le formatage va être difficile.

Mais donc dans le 2eme cas fait

$cmdarray = array(...)

Et ensuite

$cmd->exec($cmdarray)

Autrement dit déclarer ta variable avec le tableau

Merci beaucoup !

Ca marche avec la syntaxe suivante :
$CommandeArray = array (‹ title ›=>‹ XXXXXXX Vacances ›, ‹ message ›=> ‹ 2020-02-26:2020-03-04 ›);
$cmd->execCmd($options=$CommandeArray, $cache=0);

Mais si j’écris
$String = « ‹ title ›=>’ ».$CommandeEvenement."’, ‹ message ›=> ‹ ".$CommandeDate." ›";
// avec $Commande Evenement = XXXXXXX Vacances et $Commande Date = 2020-02-26:2020-03-04
$CommandeArray = array ($String);
$cmd->execCmd($options=$CommandeArray, $cache=0);

Cela ne marche pas (= pas de modification de l’agenda)
Je débute en php :::)))

Merci de votre aide

Et donc?

cela ne veut juste rien dire, ce n’est pas correcte.

Pourquoi ne pas appliquer ce qui fonctionne? Ecrit cela en une ligne comme dit dans mon post précédent.

la proposition que tu as faite, à savoir ($CommandeArray = array (‘title’=>‘XXXXXXX Vacances’, ‘message’=> ‘2020-02-26:2020-03-04’); marche très bien. C’est ce que je dis dans la première phrase.

Le problème que je veux résoudre est le suivant :
Scénario avec des tag qui ajoute ou retire des dates dans des agendas différents.

Donc le chaine ‘title’=>‘XXXXXXX Vacances’, ‘message’=> ‘2020-02-26:2020-03-04’ doit être paramétrable avec le XXXXXX qui est le nom de l’agenda et la date qui est modifiable.

D’où les deux variables intermédiaires $CommandeEvenement qui contient le nom de l’agenda à modifier et $CommandeDate qui contient la date ou la plage de date à ajouter
Ces variables sont récupérées en amont et je crée une chaine différente que je mets dans $String que je passe en Array à la commande.

Si ce n’est pas le bon moyen pour atteindre le but, je reste à l’écoute de solution plus efficace.
D’avance merci

et en complément

$CommandeArray = array (“‘title’=>’”.$CommandeEvenement."’, ‘message’=> ‘".$CommandeDate."’");
ne permet pas non plus d’ajouter un agenda.

Tu peux tourner cela dans tous les sens mais tu dois utiliser la syntaxe ci-dessus.
Donc passe toute tes variables à ton scénario (via des tags): title, message, … et construit l’array dans le code.

c’est bien ce que je fais

  1. en entrée du scénario, je mets les tags dans des variables pour les passer au code php
    (puisque les tags ne sont pas disponibles dans un bloc de type code, cf document Jeedom)

  2. je récupère ces variables dans le bloc code php

// Récupération de l'Agenda à modifier
	$CommandeName = $scenario->getData(vCommandeName);
// Récupération de l'action à réaliser
	$CommandeAction = $scenario->getData(vCommandeAction);
// Récupération de l'évenement à modifier
	$CommandeEvenement = $scenario->getData(vCommandeEvenement);
	$CommandeEvenement = $CommandeName." ".$CommandeEvenement;
// Récupération de la date à modifier
	$CommandeDate = $scenario->getData(vCommandeDate); 
  1. Puis je construit mon champ array, sous la forme
$Commande = "#[".$CommandeName."][Agenda][".$CommandeAction." une date]#";
	$String = "'title'=>'".$CommandeEvenement."', 'message'=> '".$CommandeDate."'";
	$CommandeArray = array ($String);
  1. que j’envoie
$cmd = cmd::byString($Commande);
$cmd->execCmd($options=$CommandeArray, $cache=0);

Donc il me semble que j’utilise bien la syntaxe que tu proposes.
Le problème semble venir pour moi du passage d’une variable (ici = $String) en argument de l’instruction array.
et c’est là où je bloque
Merci