Jump to content

Message d'erreur en mettant javascript dans page CMS


Recommended Posts

Bonjour,

 

Je suis nouvelle utilisatrice de Prestashop et encore débutante.

 

Voici mon souci :

J'ai inséré du javascript dans une page CMS en passant par l'éditeur html et lorque je veux enregistrer la page, ce message d'erreur apparait :

 

[PrestaShopException]

Property CMS->content is not valid
at line 878 in file classes/ObjectModel.php

872. 873. 				$message = $this->validateField($field, $value, $id_lang);874. 				if ($message !== true)875. 				{876. 					if ($die)877. 						throw new PrestaShopException($message);878. 					return $error_return ? $message : false;879. 				}880. 			}881. 		}882. 

 

(lorsque je clique sur 1 argument, ca me note [0 argument])

 

Que signifie cela?

Que dois-je faire pour que cela fonctionne?

 

J'ai chercher sur ce forum, plusieurs personne n'arrivent pas à insérer du javascript dans leur CMS et d'autres y arrivent, mais ca ne fonctionne pas pour moi.

 

J'ai trouvé ce topic qui parle de modifier le fichier cms.tpl :

http://www.prestashop.com/forums/topic/147125-autoriser-le-javascript-dans-une-page-cms/

 

Toutefois, je ne comprends pas tout ce qu'il faut faire exactement.

 

Quelqu'un peut-il m'aiguiller, voir m'assister pour réussir à faire cela, car par la suite j'aurais besoin de le refaire pour d'autres pages CMS.

 

Merci d'avance pour celui ou celle qui voudra bien m'aider.

 

Emilie

Link to comment
Share on other sites

Merci pour votre réponse rapide.

 

J'ai été voir pour modifier :

Changez :
'body_paragraph' => 'isCleanHtml',
par :
'body_paragraph' => 'isString',

 

Mais surprise, c'est déjà comme cela :

'body_paragraph' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString'),

 

Du fait vous pensez que ca n'est pas possible?

Car j'ai vu sur ce forum des personnes qui ont réussi à le faire juste en copiant le code javascript dans l'éditeur html. Mais ca ne fonctionne pas pour moi.

 

Peut être vaut-il mieux que je crée une page sans passer par le CMS, mais dans ce cas, comment l'intégrer dans prestashop?

 

Merci d'avance.

 

Emilie

Link to comment
Share on other sites

Vous avez modifier le 'body_paragraph' => 'isCleanHtml', de quel fichier ? modules/editorial/EditorialClass.php ? Parce que ce fichier concerne le problème de l'utilisateur du topic, pas le votre.

 

Il faudrait trouver ou cela se gère pour le controlleur CMS.

 

Sinon, une autre option est de modifier la fonction isCleanHtml de la classe Validate.php et de commenter les deux lignes :

if (preg_match('/<[\s]*script/ims', $html) || preg_match('/('.$events.')[\s]*=/ims', $html) || preg_match('/.*script\:/ims', $html))
	return false;

De cette facon la fonction ne vérifieras plus la présence de script. Mais c'est pas forcement la meilleurs chose à faire.

Link to comment
Share on other sites

J'ai essayé tout ce que vous m'avez dit, mais ça ne fonctionne toujours pas.

 

Pour ce que Szed a proposé, j'ai modifié d'abord le fichier CMSCategory.php .

J'ai remplacé 'iscleanHtml' par 'isString' dans cette ligne :

'description' =>         array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isString'),

 

Idem pour le fichier ObjectModel.php : if (Tools::strtolower($data['validate']) == 'isString')

 

Je n'ai pas trouvé d'autre fichier lié au controller CMS, où je peux modifier cela.

 

Pour ce qui est de modifier le fichier Validate.php, j'ai bien repéré où c'était, mais je ne suis pas sûr de ce que je dois modifier :

 

public static function isCleanHtml($html, $allow_iframe = false)
    {
        $events = 'onmousedown|onmousemove|onmmouseup|onmouseover|onmouseout|onload|onunload|onfocus|onblur|onchange';
        $events .= '|onsubmit|ondblclick|onclick|onkeydown|onkeyup|onkeypress|onmouseenter|onmouseleave|onerror|onselect|onreset|onabort|ondragdrop|onresize|onactivate|onafterprint|onmoveend';
        $events .= '|onafterupdate|onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeeditfocus|onbeforepaste|onbeforeprint|onbeforeunload|onbeforeupdate|onmove';
        $events .= '|onbounce|oncellchange|oncontextmenu|oncontrolselect|oncopy|oncut|ondataavailable|ondatasetchanged|ondatasetcomplete|ondeactivate|ondrag|ondragend|ondragenter|onmousewheel';
        $events .= '|ondragleave|ondragover|ondragstart|ondrop|onerrorupdate|onfilterchange|onfinish|onfocusin|onfocusout|onhashchange|onhelp|oninput|onlosecapture|onmessage|onmouseup|onmovestart';
        $events .= '|onoffline|ononline|onpaste|onpropertychange|onreadystatechange|onresizeend|onresizestart|onrowenter|onrowexit|onrowsdelete|onrowsinserted|onscroll|onsearch|onselectionchange';
        $events .= '|onselectstart|onstart|onstop';

        if (preg_match('/<[\s]*script/ims', $html) || preg_match('/('.$events.')[\s]*=/ims', $html) || preg_match('/.*script\:/ims', $html))
            return false;

 

 

Enfin, j'ai essayé aussi ce que propose Gregory Roussac.

J'ai créée le fichier en html avec le script, que j'ai mis sur le serveur.

Ensuite dans le code html de la page CMS, j'ai inséré ce code pour appeler l'iframe, mais j'ai encore ce fameux message d'erreur :

<iframe src="http://catalogue-bijoux-piercing.com/prestashop/themes/default/code-aweber.html" width="250" height="300"></iframe>

 

J'ai bien activé l'autorisation des iframes, mais il est précisé que c'est uniquement sur les fiches produits.

J'ai testé sur une fiche produit pour voir, mais j'ai un message : description non valide!

Peut être y-a-t-il une erreur dans le code iframe!

 

Voilà où j'en suis.

Je veux bien tenter de modifier Validate.php, mais pouvez-vous être plus précis pour sur ce qu'il faut modifier (est-ce bien le isCleanHtml en isString) et au niveau du commentaire des 2 lignes, il s'agit de faire quoi exactement?

Et pouvez-vous me dire pourquoi ce n'est pas la meilleure chose à faire... quels sont les risques?

 

Merci pour votre aide si précieuse.

Link to comment
Share on other sites

Hello,

 

Sur les dernières version ce sont bien les produits et les cms. Donc a priori malheureusement vous n'utilisez pas la dernière version ? CMSCategory et CMS.php ne sont pas les mêmes choses. Modifier la classe Validate est une mauvaise idée.

 

https://github.com/PrestaShop/PrestaShop/blob/1.6/classes/CMS.php#L58

 

Cordialement

Link to comment
Share on other sites

Bonjour,

 

J'utilise la version 1.5.6.1

Je croyais que c'était la dernière version!

Je n'en ai pas trouvé de plus récente à part la v1.6 en test.

 

J'ai décidé de suivre vos conseils et de ne pas modifier la classe Validate.

 

Surtout que vous m'avez donné une idée avec les iframes.

 

A la place d'appeler l'iframe, je vais simplement mettre un bouton (image) avec un lien qui pointe vers la page html où se trouve mon code javascript.

 

Du fait, il n'y a pas le design du site autour de cette page, c'est très dommage, mais c'est mieux que rien.

 

Sinon, vous utilisez quelle version de prestashop?

 

Merci encore pour vos réponses rapides.

 

Emilie

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...