Jump to content

Cacher du texte dans les descriptions produits


Recommended Posts

Bonjour,

 

Je m'arrache un peu les cheveux depuis hier en essayant de cacher du texte dans l'éditeur de description des produits du BO pour les personnes qui ne sont pas inscrites uniquement.

 

C'est à dire que le texte deviendrait visible lorsque les personnes s’identifient.

 

J'ai réussi à trouver un code qui fonctionne en PHP :

 

{if $logged} texte {/if}

 

ça marche très bien lorsque je l'insère dans product.tpl par exemple, mais du coup le même texte est affiché sur toutes les fiches produits, alors que ce que je souhaite c'est un texte différent pour chaque produit (c'est pour cela que je souhaite passer par l'éditeur dans le BO).

 

Le problème c'est que ce code ne marche pas en HTML (en tout cas dans la partie description produit).

 

Dans l'idéal il faudrait que je puisse insérer ce code :

 

<?PHP

 

 

{if $logged} texte {/if}

?>

 

Mais je n'y arrive pas et là je sèche. Si un développeur ou quelqu'un peut m'aider ce serait avec grand plaisir :)

 

Merci

Link to comment
Share on other sites

Dans ton BO, quand tu tapes ton texte à cacher, tu l'encapsule dans une div avec une classe precise genre "hidden-for-visitors".

 

Dans ta global.css tu crée un règle:

.hidden-for-visitors { display: none }

enfin à la fin du template product.tpl tu mets un bout de js

{if $logged}
<script type="text/javascript">
 {literal}
$(document).ready(function()
{
   $('.hidden-for-visitors').removeClass('hidden-for-visitors');
});
 {/literal}
</script>
{/if}

 

Soyons clair, c'est du faux caché puisque le contenu est visible dans le source de la page.

Faire mieux? simplXML + XPath

 

PS: Il y a peut-être des typos dans le code je l'ai tapé directement ici et non testé

Link to comment
Share on other sites

Merci tout d'abord pour cette réponse rapide.

 

En revanche ça ne marche toujours pas. Après je ne m'y connais pas trop non plus en programmation donc j'ai peut être pas fait les choses comme il faut.

 

Tout d'abord j'ai remplacé "hidden-for-visitors" par "hidden_for_visitors" car j'ai remarqué que les codes étaient plutôt de cette forme là, mais j'ai aussi essayé la première solution mais elle n'a pas marché non plus.

 

Je suis donc allé dans la description de mon produit dans le BO, puis j'ai cliqué sur le bouton "HTML" (éditeur de code HTML). Ici j'ai rentré ce code :

 

<div class="hidden_for_visitors">test</div>

 

Puis dans global.css de mon template j'ai inséré .hidden_for_visitors { display: none } , mais je sais pas trop ou le mettre alors je l'ai mis dans /* Useful */ comme cela :

 

 

/* Useful */
.align_center { text-align: center }
.align_right { text-align: right }
.middle { vertical-align: middle }
.align_justify { text-align: justify }
.uppercase { text-transform: uppercase }
.hidden, .collapsed, .block_hidden_only_for_screen { display: none }
.wrap { white-space: normal }
.bold { font-weight: bold }
.strike { text-decoration: line-through }
.italic { font-style: italic }
.top { vertical-align: top }
.span_link { cursor: pointer }
.span_link:hover { text-decoration: underline }
.clear { clear: both }
.hidden_for_visitors { display: none }

 

Peut être je ne l'ai pas mis au bon endroit ?

 

Et enfin j'ai inséré le bout de js à la fin de mon product.tpl :

 

 

{if $packItems|@count > 0}
<div>
<h2>{l s='Pack content'}</h2>
{include file="$tpl_dir./product-list.tpl" products=$packItems}
</div>
{/if}

{if $logged}
<script type="text/javascript">
 {literal}
       $(document).ready(function()
       {
          $('.hidden_for_visitors').removeClass('hidden_for_visitors');
       });
 {/literal}
</script>
{/if}
{/if}

 

Ou est l'erreur ?

Link to comment
Share on other sites

Pour les 2 {/if} à la fin je ne sais pas, j'en avais déjà 2 avant d'insérer le code alors je les ai laissé.

 

Sinon j'ai bien décalé un {/if} avant le {if $logged} et vidé le cache smarty mais j'ai toujours le mot "test" qui s'affiche sur ma page produit même quand je ne suis pas loggé :wacko:

 

J'ai mis les 2 fichiers en documents joints peut être que ce sera plus simple pour voir directement.

presta.zip

Link to comment
Share on other sites

URL de ton site

Pourquoi utilises-tu une version "ancienne" de Prestashop 1.4.0?

Le changements tu les as fait dans TON theme?

 

Merci de préciser les répertoires

Et ton cache smarty... verifie tools/smarty_v2/compile si jamais tu es en mode smarty V2

Link to comment
Share on other sites

Je travaille dessus en local car je souhaite changer complètement ma version actuelle (en ligne) qui n'utilise pas le même système et qui ne me convient pas du tout.

 

En revanche je suis sur prestashop 1.4.5.1 sur ma version locale, je vais essayer de passer sur la 1.4.6.2 pour voir si ça change quelque chose et en essayant avec le template de base.

 

J'utilise un template qui n'a pas été mis à jour depuis la 1.4.0 c'est peut être pour ça.

 

Sinon les changements je les ai bien fait dans mon thème www/prestashop/themes/x-3d/product.tpl et www/prestashop/themes/x-3d/css/global.css

 

Pour le smarty j'avais déjà vidé le smarty et le smarty V2.

 

Tous les codes sont bons sinon et au bon endroit ? on ne peut vraiment pas insérer du PHP dans la partie description HTML des pages produits ?

 

Merci encore

Link to comment
Share on other sites

J'ai réussi !!!

 

J'ai bien inséré les codes comme précédemment, sauf que lors de la rédaction du texte au lieu d'aller dans "html", j'ai tout simplement sélectionné la partie du texte que je voulais cacher et cliquer sur "styles" à coté de"paragraphe" et "hidden_for_visitors" est apparu, alors je l'ai sélectionné et maintenant du coup ça marche !

 

Pour info j'ai alors cliqué sur HTML et le code indiqué est le suivant :

 

<p class="hidden_for_visitors">test</p>

 

et non

 

<div class="hidden_for_visitors">test</div>

 

Voilà d'ou venait l'erreur ! je suis content parce que ça me bloqué vraiment.

 

Merci pour tout doekia, sans ton aide je n'y serait jamais arrivé.

Link to comment
Share on other sites

Je n'ai pas ouvert d'autre topic car je pense que les éléments de réponse doivent se trouver dans celui-ci.

 

Je pense qu'il faut garder le même code mais simplement changer la variable :

 

{if $logged}

 

par celle faisant référence à une personne visiteur, non loggué. Mais je ne la connais pas.

 

Si quelqu'un la connait je pourrai alors essayer mais pour l'instant je suis un peu bloqué à cause de ça.

Link to comment
Share on other sites

J'ai juste un petit doute à la lecture de ce topic, mais je crois comprendre que le but est d'afficher la description , si le client est loggué , et ne pas l'afficher s'il ne l'est pas ?

 

Parce que ça fait beaucoup de code pour pas grand chose (tpl + js + css ...), si c'est le cas ,

 

à moins que je ne me sois fourvoyé , une simple ligne

 

{if $logged}$product->description{/if} 

 

placée en lieu et place ou $product->description est appelé , suffit , non ?

Link to comment
Share on other sites

Oui en effet tu n'as pas bien lu le topic. :D

 

Le demandeur veux que seule une partie de la description soit caché aux non connectés

 

Ta solution est absolument parfait sinon, c'est d'ailleurs sur ce principe que l'on cache les prix généralement

 

Cdlt,

(d)oekia

Link to comment
Share on other sites

;)

heu non les prix il faut les virer pendant le template avec {if $logged}<prix>{else}<nada>{/if} sinon ça ne sert pas a grand chose c'est surement ce que tu voulais dire mais je précise pour ceux qui nous lisent ...

 

PS: Toi aussi ça déconne le forum quand tu édites? Moi ça quitte plus le mode édition depuis hier.

Link to comment
Share on other sites

;)

heu non les prix il faut les virer pendant le template avec {if $logged}<prix>{else}<nada>{/if} sinon ça ne sert pas a grand chose c'est surement ce que tu voulais dire mais je précise pour ceux qui nous lisent ...

 

PS: Toi aussi ça déconne le forum quand tu édites? Moi ça quitte plus le mode édition depuis hier.

 

Oui je parle de la méthode, mais même , j'ai résumé au maximum car c'est souvent insuffisant... souvent on veut masquer les prix à un groupe et pas à un autre , sans se satisfaire du simple fait d'être loggué , dans ce cas il est nécessaire d'avoir un module qui assigne le flag sur lequel on veut se baser .

 

Et bien sur oui le else sert à afficher un message éventuellement genre 'vous devez vous identifier/enregistrer si ....'

Mais je vois pas en quoi il est indispensable en revanche ,

Imaginons que j'utilise le bloc pub bien en évidence sur le site pour alerter le client qu'il doit être loggué pour voir les prix ,

mon tout simple :

 

{if $logged}j'affiche le prix{/if} 

 

a bien le comportement voulu non ;) ?

 

Mais bon là on chipote .... :D

 

Oui j'ai eu ce pb de non sortie du mode edition hier également. Je ne l'ai plus .

Un pb ajax il semble bien , pas de retour après requete ...

Link to comment
Share on other sites

C'est clair qui si <nada> c'est nada autant pas faire de else, mais moi dans nada j'affiche quand même les réductions :D

Quand aux groupes, alors qu'il y a tant de globales (legacy quand tu nous tiens) ceux-ci et 2 3 autres manquent.

Moi je les bourre dans smarty et/ou le cookie depuis le FrontController override.

Link to comment
Share on other sites

  • 2 months later...

Bonjour,

 

Je souhaiterais également pouvoir cacher une partie de texte dans les descriptions produits.

J'ai bien lu le sujet mais je galère un peu. :wacko:

J'ai le problème inverse que celui cité plus haut, mon texte reste tout le temps caché, loggé ou non.

 

Je ne sais pas si j'ai tout bien placé dans le global.css et le product.tpl.

Dans l'édition de la fiche produit, j'ai bien le style hidden for visitors, quand je sélectionne du texte et que j'applique le style, celui-ci disparait.

 

Ce qui est différent, je n'ai pas en HTML

<p class="hidden-for-visitors">TEXTE</p>

mais <p><span class="hidden-for-visitors">TEXTE</span></p>

Même si je change en HTML cela ne marche pas.

 

Je vous laisse mon global.css et product.tpl.

presta.zip

 

Merci :)

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