Probleme de array_merge Argument #1 is not an array in ecrire/public/composer.php

Bonjour

j'ai un squelette qui contient la portion de code suivante.
Dans certains cas (que je n'arrive pas à isoler) , ce bout de code génère l'erreur :

Warning: array_merge() [function.array-merge]: Argument #1 is not an array in /home/xxxxxxxxx/www/ecrire/public/composer.php(48) : eval()'d code on line 41

Y a-t-il nécessité d'initialiser la valeur (avec #ARRAY ?).
NB : SPIP 1.9.2c

<BOUCLE_modo_art(AUTEURS){id_article}>
#SET{modos,#GET{modos}|array_merge{#ARRAY{#COMPTEUR_BOUCLE,#ID_AUTEUR}}}
</BOUCLE_modo_art>

<BOUCLE_art_rub(ARTICLES){id_article}>
  <BOUCLE_rub_admin(AUTEURS_RUBRIQUES){id_auteur !IN #GET{modos}}{id_rubrique=#ID_RUBRIQUE}>
    <BOUCLE_aut_admin(AUTEURS){id_auteur}>
   #SET{modos,#GET{modos}|array_merge{#ARRAY{#COMPTEUR_BOUCLE,#_aut_admin:ID_AUTEUR}}}

    </BOUCLE_aut_admin>
  </BOUCLE_rub_admin>
</BOUCLE_art_rub>

-- Chryjs

Y a-t-il nécessité d'initialiser la valeur (avec #ARRAY ?).
NB : SPIP 1.9.2c
  
Je pense que oui. Lors de la première boucle et que modos est vide ça coince.

<BOUCLE_modo_art(AUTEURS){id_article}>
#SET{modos,#GET{modos}|array_merge{#ARRAY{#COMPTEUR_BOUCLE,#ID_AUTEUR}}}
</BOUCLE_modo_art>
  
Ou peut être en inversant les arguments : #SET{modos,#ARRAY{#COMPTEUR_BOUCLE,#ID_AUTEUR}|array_merge{#GET{modos}}}

<BOUCLE_art_rub(ARTICLES){id_article}>
  <BOUCLE_rub_admin(AUTEURS_RUBRIQUES){id_auteur !IN #GET{modos}}{id_rubrique=#ID_RUBRIQUE}>
    <BOUCLE_aut_admin(AUTEURS){id_auteur}>
   #SET{modos,#GET{modos}|array_merge{#ARRAY{#COMPTEUR_BOUCLE,#_aut_admin:ID_AUTEUR}}}

    </BOUCLE_aut_admin>
  
Là je ne comprends pas pourquoi tu utilises #_aut_admin:ID_AUTEUR alors que tu te trouves dans la boucle _aut_admin ?
Un #ID_AUTEUR suffirait non ?

  </BOUCLE_rub_admin>
</BOUCLE_art_rub>

-- Chryjs

Eric

Eric L wrote:

Y a-t-il nécessité d'initialiser la valeur (avec #ARRAY ?).
NB : SPIP 1.9.2c
  
Je pense que oui. Lors de la première boucle et que modos est vide ça coince.

Certes : comment l'initialiser avec un tableau vide ?

<BOUCLE_modo_art(AUTEURS){id_article}>
#SET{modos,#GET{modos}|array_merge{#ARRAY{#COMPTEUR_BOUCLE,#ID_AUTEUR}}}
</BOUCLE_modo_art>

Ou peut être en inversant les arguments :

#SET{modos,#ARRAY{#COMPTEUR_BOUCLE,#ID_AUTEUR}|array_merge{#GET{modos}}}

Là je suis sûr que je vais avoir une erreur si #GET{modos} n'a pas été initialisé comme un #ARRAY{} (ça marche ca ?)

<BOUCLE_art_rub(ARTICLES){id_article}>
  <BOUCLE_rub_admin(AUTEURS_RUBRIQUES){id_auteur !IN #GET{modos}}{id_rubrique=#ID_RUBRIQUE}>
    <BOUCLE_aut_admin(AUTEURS){id_auteur}>
   #SET{modos,#GET{modos}|array_merge{#ARRAY{#COMPTEUR_BOUCLE,#_aut_admin:ID_AUTEUR}}}

    </BOUCLE_aut_admin>
  
Là je ne comprends pas pourquoi tu utilises #_aut_admin:ID_AUTEUR alors que tu te trouves dans la boucle _aut_admin ?
Un #ID_AUTEUR suffirait non ?

Surement :slight_smile: Le code en question a une "longue" histoire et plusieurs intervenants...

  </BOUCLE_rub_admin>
</BOUCLE_art_rub>

Eric

Je vais testouiller le #ARRAY{} mais je crois me souvenir que cela ne fonctionne pas.

-- Chryjs