Jump to content

Permettre l'ajout de code HTML dans les caractéristiques et valeurs


Recommended Posts

Bonjour,

 

Pour la création de ma boutique PrestaShop, je veux ajouter du code HTML dans les valeurs des caractéristiques (par exemple <ul>, <li>, <strong>).

 

Le problèeme que je rencontre, c'est que les caractères "< > ; = { }" sont interdit dans les valeurs des caractéristiques produits.

 

Savez-vous ou se trouve le fichier.php ou autre me permettant de modifier cette restriction ?

 

Merci de votre aide

Link to comment
Share on other sites

Bonjour,

 

Il faut que vous surchargiez la classe FeatureValue et la règle de validation du champ "value"

/**
     * @see ObjectModel::$definition
     */
    public static $definition = array(
        'table' => 'feature_value',
        'primary' => 'id_feature_value',
        'multilang' => true,
        'fields' => array(
            'id_feature' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
            'custom' =>     array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),

            // Lang fields
            'value' =>         array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 255),
        ),
    );

Dans la définition, on peut voir que la valeur de la caractéristique est validée par la fonction "isGenericName", vous pouvez par example le remplacer par "isCleanHtml" ou tout autre fonction de la classe "Validate" ( si nécessaire même un créer une particulière)

 

Link to comment
Share on other sites

  • 6 months later...

Bonjour,

Ce topic m'intéresse car j'ai besoin d'ajouter un texte long en html (avec titres, différents paragraphes...) pour les valeurs d'une de mes caractéristiques.

J'ai donc suivi la méthode d'Hervé : cela fonctionne car sur la page d'ajout de valeurs du back office, je ne suis plus limitée dans le nombre de caractères et il reconnait mes balises html.

Mais ce n'est pas un réel éditeur html, donc une fois la valeur enregistrée, elle est retranscrite en texte simple et je ne peux rien mettre en forme.

Quelqu'un a t-il une solution pour cela? Est-ce possible d'intégrer dans le backoffice un éditeur html, comme pour le descriptif produit?

D'avance, merci!

 

Link to comment
Share on other sites

  • 1 year later...

Bonjour,

 

J'en suis au même point, Après chaque enregistrement, les caractère HTML disparaisse même avec un controle isCleanHtml.

J'ai même etnté avec isAnything (aucun controle).

 

J'ai l'impression au'il faut modifier autre chose ... Une idée ?

 

Merci

Link to comment
Share on other sites

  • 2 months later...

Je déterre tout ça, car de mon côté j'ai trouvé la solution.

Il faut overrider la classe Product.php également.

AU niveau de la méthode addFeaturesCustomToDB.

remplacez

public function addFeaturesCustomToDB($id_value, $lang, $cust)
	{
		$row = array('id_feature_value' => (int)$id_value, 'id_lang' => (int)$lang, 'value' => pSQL($cust));
		return Db::getInstance()->insert('feature_value_lang', $row);
	}

PAR

public function addFeaturesCustomToDB($id_value, $lang, $cust)
	{
		$row = array('id_feature_value' => (int)$id_value, 'id_lang' => (int)$lang, 'value' => $cust);
		return Db::getInstance()->insert('feature_value_lang', $row);
	}

en gros il faut dégager le pSQL()

il faut aussi override la classe featureValue comme vu dans le précédent post.

Enjoy ;)

Link to comment
Share on other sites

Bonjour,

 

Merci pour ton tuto, qui explique bien comment faire.
Par contre de mon point de vue ta méthodologie peut être améliorée.
Tu copies/colles les classes de base dans ton dossier override/classes/ du coup c'est difficile d'isoler ce que tu as changé.

Dans l'exemple de la surcharge produit je ferais plutôt comme ça :

<?php
/**
 * Surcharge de la classe Product
 */
class Product extends ProductCore
{
/**
 * Surcharge de la méthode pour permettre l'ajout de caractértiques HTML 
 */
public function addFeaturesCustomToDB($id_value, $lang, $cust)
	{
		$row = array('id_feature_value' => (int)$id_value, 'id_lang' => (int)$lang, 'value' => $cust);
		return Db::getInstance()->insert('feature_value_lang', $row);
	}

}

Seul le code qui a changé est présent, ce qui permet de l'identifier très facilement :-)

Link to comment
Share on other sites

Oui il est vrai que c'est plus simple, 

mais est ce que Prestashop va quand même prendre en compte les autre methodes de l'autre classe dans le dossier classes/ ?
 

Car j'ai déjà essayé d'overrider juste la méthode, sans succès...

Cordialement

Link to comment
Share on other sites

mais est ce que Prestashop va quand même prendre en compte les autre methodes de l'autre classe dans le dossier classes/ ?

Car j'ai déjà essayé d'overrider juste la méthode, sans succès...

Oui c'est le principe de l'héritage de classes :)

Tu redéfinis uniquement les méthodes à modifier, les autres sont appelées dans la classe parente.

Link to comment
Share on other sites

  • 2 years later...

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