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 :
- 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.
- 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 ?