LemilieL Posted January 30, 2014 Share Posted January 30, 2014 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 validat 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. ObjectModelCore->validateFieldsLang - [line 296 - classes/ObjectModel.php] - [0 Argument] ObjectModelCore->getFieldsLang - [line 634 - classes/ObjectModel.php] - [0 Argument] ObjectModelCore->update - [line 75 - classes/CMS.php] - [1 Arguments] CMSCore->update - [line 334 - controllers/admin/AdminCmsController.php] - [0 Argument] AdminCmsControllerCore->postProcess - [line 121 - controllers/admin/AdminCmsContentController.php] - [0 Argument] AdminCmsContentControllerCore->postProcess - [line 158 - classes/controller/Controller.php] - [0 Argument] ControllerCore->run - [line 348 - classes/Dispatcher.php] - [0 Argument] DispatcherCore->dispatch - [line 53 - admin1682/index.php] - [0 Argument] (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 More sharing options...
Szed Posted January 31, 2014 Share Posted January 31, 2014 Par défaut vous ne pouvez pas insérer de script dans une page CMS ou une description. Cela est bloqué par la fonction isCleanHtml() de la classe Validate (de mémoire). Cherchez par la ! Cf ce topic mais il date un peu/ Link to comment Share on other sites More sharing options...
LemilieL Posted January 31, 2014 Author Share Posted January 31, 2014 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 More sharing options...
Szed Posted January 31, 2014 Share Posted January 31, 2014 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 More sharing options...
Gregory Roussac Posted January 31, 2014 Share Posted January 31, 2014 Bonjour, Dans les préférences générales, autorisez les iframe. Mettez votre code javascript dans une page html sur votre serveur et appelez là en iframe dans votre CMS. Cherchez iframe sur le forum, il y a eu de nombreux posts la dessus. Cordialement Link to comment Share on other sites More sharing options...
LemilieL Posted February 1, 2014 Author Share Posted February 1, 2014 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 More sharing options...
Gregory Roussac Posted February 1, 2014 Share Posted February 1, 2014 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 More sharing options...
LemilieL Posted February 2, 2014 Author Share Posted February 2, 2014 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now