[Résolu] Oembed en 4.2 souci... (et Masonry aussi)

Je suis en train de passer un site de 3.2 a 4.2 et je trouve plusieurs difficulté,
La dernière en date est que j’utilise pour une rubrique Oembed pour faire apparaitre des vidéos dans la médiabox.

Oembed est bien compatible en 4.2, mais cela ne marche plus… cela ne marche pas non plus dans l’admin…

Voici le liens en 3.2 où cela marche : http://www.jfcomment.com/-Archives-filmees-
et voici en 4.2 où cela ne marche plus : http://latelier.jfcomment.com/-Archives-filmees-

J’utilise aussi Masonry que j’ai forcé en 4.2, cela marche mais j’ai cette info qui apparait :
Warning: A non-numeric value encountered in /home/jfcommen/latelier/plugins/auto/jquery_masonry/jquerymasonry_pipelines.php on line 17

Merci pour votre aide !

à tester
chargez migrate <script src="https://code.jquery.com/jquery-migrate-3.4.1.js"></script>
juste avant la fermeture de la balise head pour qu’il soit le dernier à charger

J’ai eu le même problème, ça vient d’un champ vide dans la configuration, soit marge, soit largeur.

Pour info, afficher les erreurs et avertissements PHP en public n’est pas génial niveau sécu, il faudrait les désactiver pour ton hébergement.

il faudrait signaler le warning dans un ticket dédié.

Merci jenamarie,

ça se situe ici je ne connais que le css et html, impossible pour moi de modifier ça, commet faut-il faire ?:

for($i=0;$i<=$conf_jquerymasonry["nombre"];$i++){ if(isset($conf_jquerymasonry["container".$i]) and $conf_jquerymasonry["container".$i]) { $largeur = $conf_jquerymasonry["largeur".$i] + 2*$conf_jquerymasonry["marge".$i] + 10; // 10px pour les bordures eventuelles if($conf_jquerymasonry["multicolonne".$i] != "on") { $styles .= "\n".$conf_jquerymasonry["container".$i]." ".$conf_jquerymasonry["items".$i]."{width:".$conf_jquerymasonry["largeur".$i]."px;margin:".$conf_jquerymasonry["marge".$i]."px;float:left;}\n" ; }

Non, pour le coup cela ne marche pas, mais j’ai le même souci dans l’admin… rien ne s’affiche dans mediabox, j’ai une page blanche.

Hello , je déterre ce poste, que j’avais mis de coté avec le site, il est maintenant en SPIP 4.3.5, et j’ai un gros souci avec Masonry.

J’ai téléchargé la version pour SPIP 4.3, et quand je l’active il explose mon site et j’ai ce message d’erreur :
Erreur d’exécution squelettes/inclure/head.html | File […]/plugins/auto/jquery_masonry-2.1.0/jquerymasonry_pipelines.php Line 17 : Unsupported operand types: string * int

Erreur d’exécution squelettes/inclure/slide.html | File […]/plugins/auto/jquery_masonry-2.1.0/jquerymasonry_pipelines.php Line 17 : Unsupported operand types: string * int

Si je supprime le head.html de squelettes, il me dit la même chose avec squelettes-dist.

voici une capture de ma page toute cassée.

Si je supprime tout mon fichier squelettes.html, j’ai le même souci. Ce qui me fait dire que c’est un bug du pluging ?

J’ai aussi activé Masonry sur mon site perso, sur un autre serveur, et ça me fait la meme chose…

Bonjour, suite à mon problème avec ce bug, et n’ayant pas du tout les compétences pour comprendre ça, et n’ayant pour le moment pas de réponses, j’ai demandé à … ChatGTP, il m’a donné une solution qui fonctionne, ne sachant pas si c’est correct, et je me dis qu’a la prochaine mise à jour du pluging ça peut sauter, et qu’il faut signaler ce bug, je vous donne sa réponse :

L'erreur que vous rencontrez, "Unsupported operand types: string * int", se produit généralement lorsque vous tentez d'appliquer une opération mathématique (comme la multiplication) entre des types de données incompatibles, ici une chaîne de caractères (string) et un entier (int).

L’erreur suggère que l’une des variables impliquées dans l’opération n’est pas du type attendu. Le problème pourrait être que conf_jquerymasonry["largeur".$i] ou conf_jquerymasonry["marge".$i] ne sont pas des entiers, mais des chaînes de caractères (strings). Lorsque vous essayez de multiplier un string par un entier (comme $conf_jquerymasonry["marge".$i] * 2), PHP ne sait pas comment gérer cette opération.

Solution :

  1. Assurez-vous que les variables sont des entiers : avant de faire l’opération, vous pouvez vous assurer que largeur et marge sont des entiers en les convertissant explicitement en nombres.

Modifiez la ligne en ajoutant une conversion explicite avec (int) pour vous assurer que les valeurs sont des entiers :

`$largeur = (int)$conf_jquerymasonry["largeur".$i] + 2*(int)$conf_jquerymasonry["marge".$i] + 10;`

Cela forcera PHP à traiter les valeurs comme des entiers, même si elles sont définies sous forme de chaînes de caractères.

  1. Vérification des autres variables : Il serait également judicieux de vérifier les autres variables similaires (conf_jquerymasonry["largeur".$i], conf_jquerymasonry["marge".$i]) pour s’assurer qu’elles contiennent bien des valeurs numériques. Vous pouvez aussi ajouter des vérifications conditionnelles si nécessaire, comme :
if (is_numeric($conf_jquerymasonry["largeur".$i]) && is_numeric($conf_jquerymasonry["marge".$i])) {
    $largeur = (int)$conf_jquerymasonry["largeur".$i] + 2*(int)$conf_jquerymasonry["marge".$i] + 10;
} else {
    // Gérer le cas où les variables ne sont pas numériques
    $largeur = 0;  // ou une autre valeur par défaut
}

Mon fichier modifié :

<?php
if (!defined("_ECRIRE_INC_VERSION")) return;

function jquerymasonry_insert_head($flux){
    // compat : jusqu'à SPIP 3.0 compris utiliser jquerymasonry v 2.1.0, après: la derniere maj (3.3.2)
    include_spip('plugins/installer'); // spip_version_compare dans SPIP 3.x
    include_spip('inc/plugin'); // spip_version_compare dans SPIP 2.x
    $js_acharger = spip_version_compare('[2.1;3.0]', spip_version()) ? 'jquery.masonry.js' : 'jquery.masonry_2.1.0.js';
    
    $executer = "";
    $styles = "";
    include_spip('inc/config');
    $conf_jquerymasonry = lire_config('jquerymasonry');

    for ($i = 0; $i <= $conf_jquerymasonry["nombre"]; $i++) {
        if (isset($conf_jquerymasonry["container" . $i]) and $conf_jquerymasonry["container" . $i]) {
            
            // Vérifiez que 'largeur' et 'marge' sont des valeurs numériques avant de faire des calculs
            $largeur = is_numeric($conf_jquerymasonry["largeur" . $i]) ? (int)$conf_jquerymasonry["largeur" . $i] : 0;
            $marge = is_numeric($conf_jquerymasonry["marge" . $i]) ? (int)$conf_jquerymasonry["marge" . $i] : 0;

            // Calcul de la largeur totale avec marge et bordure
            $largeur = $largeur + 2 * $marge + 10;  // 10px pour les bordures eventuelles
            
            // Si 'multicolonne' n'est pas activé, ajoutez les styles CSS
            if ($conf_jquerymasonry["multicolonne" . $i] != "on") {
                $styles .= "\n" . $conf_jquerymasonry["container" . $i] . " " . $conf_jquerymasonry["items" . $i] . "{width:" . $largeur . "px;margin:" . $marge . "px;float:left;}\n";
            }

            // Contournement glitch lancement trop tôt (voir: https://masonry.desandro.com/layout.html#imagesloaded)
            $executer .= "$(\"" . $conf_jquerymasonry["container" . $i] . "\").imagesLoaded( function() {";
            $executer .= "    $(\"" . $conf_jquerymasonry["container" . $i] . "\").masonry({";
            $executer .= "        itemSelector:'" . $conf_jquerymasonry["items" . $i] . "',";
            if ($conf_jquerymasonry["multicolonne" . $i] == "on") {
                $executer .= "columnWidth:" . $largeur . ",";
            }
            $executer .= "        isRTL:" . (lang_dir() == "rtl" ? "true" : "false") . ",";
            $executer .= "        isAnimated:" . ($conf_jquerymasonry["animation" . $i] == "on" ? "true" : "false");
            $executer .= "    });";
            $executer .= "});";
        }
    }

    // Si des éléments sont définis
    if ($conf_jquerymasonry["nombre"] > 0) {
        $flux .= "\n" . '<script src="' . url_absolue(find_in_path('javascript/' . $js_acharger)) . '" type="text/javascript"></script>';
        $flux .= "\n" . '<script src="' . url_absolue(find_in_path('javascript/imagesloaded.pkgd.min.js')) . '" type="text/javascript"></script>';
        if (isset($conf_jquerymasonry["multicolonne" . $i]) and $conf_jquerymasonry["multicolonne" . $i] != "on") {
            $flux .= "\n" . '<style type="text/css">' . $styles . '</style>';
        }
        $flux .= "\n" . '
<script type="text/javascript">/* <![CDATA[ */
    jQuery(document).ready(function(){
        function jquerymasonry_init(){
            ' . $executer . '
        }
        jquerymasonry_init();
        if (typeof onAjaxLoad == "function") onAjaxLoad(jquerymasonry_init);
    });
/* ]]> */</script>
';
    }
    return $flux;
}
?>

Qu’en pensez-vous ?

Oui c’est typiquement ce genre de problématique. Cela étant il faudrait se poser la question de pouquoi est-ce que tu peut avoir des valeurs non numériques en entrée. Est-ce parce que la valeur par défaut n’est pas configuré? est-ce parce qu’une personne a rempli en configuration une valeur non numérioque.

C’est e genre de questions qu’il faut se poser avant de valider la réponse.

Et ensuite si on trouve la bonne réponse, et bien tu peux ouvrier un « merge-request » pour que cela soit intégré dans les future version du plugins.

Merci pour ta réponse Maïeul, bien que pour moi, c’est un langage qui m’est inconnue et je laisse les programmateur Spipeur trouver la solution…

La seul chose que je sais, c’est qu’il suffit de l’activer pour faire sauter mes sites.
Sans modifier le formulaire du pluging.

Et je ne comprends pas bien comment faire remonter les bugs, il y a une page quelques part qui explique tout ça ? Généralement ça passe par ici, si l’auteur du plugiong tombe sur le sujet, bien que le sujet du post et maintenant vraiment centré sur le pluging Masonry.

Alors il y a aussi des progammeuses spipeuses. Ensuite probablement que les personnes qui ont créé le plugin ont été un peu occupé ces derniers temps.

Mais bon globalement pour rapporter des bugs deux solutions

  1. Soit dans le forum de l’article sur contrib (pas le mieux)
  2. Soit plus directement sur la page « tickets » sur git.spip.net
    a. Depuis l’article contrib cliquer sur « tickets »
    b. Se connecter sur git.spip.net (si un compta actif existe deja) et ou bien créer un compte
    c. Créer un nouveau ticket.

Ah et s’il suffit de l’activer pour que cela fasse sauter les sites, effectivement c’est très probablement un problème de valeur par défaut de la config non défini.

Merci Maïeul, je fait ça dès que j’ai un peu de temps.
Je ne sais pas si on peut mettre ça comme résolu (c’est pas vraiment le cas) ? Si oui, il faudrait le faire.

Ah mais il y a deja un ticket à ce sujet depuis un bout de temps.

La version 3.0.0 du plugin jquery mansory corrige cela

1 « J'aime »

Merci ! Je l’ai installé à l’instant en faisant la mise à jour et ça marche correctement.

Je n’ai pas accé pour le mettre en résolu,

Et bonne fêtes !