Vote to Improve PrestaShop

PrestaShop Forum: Build a free online shop. Count on the Community!

The best place in the world to ask questions about PrestaShop and get advice from our passionate community!

PrestaShop Forum: Build a free online shop. Count on the Community!

Jump to content

Photo

Cacher du texte dans les descriptions produits


  • Please log in to reply
20 replies to this topic
Commandesgrp

    PrestaShop Apprentice

  • Members
  • PipPip
  • 43 posts

Posted 13 December 2011 - 05:23 PM

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

doekia

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1132 posts

Posted 13 December 2011 - 05:38 PM

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é

Commandesgrp

    PrestaShop Apprentice

  • Members
  • PipPip
  • 43 posts

Posted 13 December 2011 - 07:56 PM

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 ?

doekia

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1132 posts

Posted 13 December 2011 - 08:06 PM

Pourquoi 2 {/if} à la fin? réponse tu as mis le code trop tôt il devait être ajouté à la fin - décale un des {/if} avant le {if $logged}

Purge ton cache smarty smarty/compile

Commandesgrp

    PrestaShop Apprentice

  • Members
  • PipPip
  • 43 posts

Posted 13 December 2011 - 09:11 PM

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.

Attached Files



doekia

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1132 posts

Posted 13 December 2011 - 11:05 PM

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

Commandesgrp

    PrestaShop Apprentice

  • Members
  • PipPip
  • 43 posts

Posted 14 December 2011 - 02:19 PM

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

Commandesgrp

    PrestaShop Apprentice

  • Members
  • PipPip
  • 43 posts

Posted 14 December 2011 - 05:16 PM

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

Commandesgrp

    PrestaShop Apprentice

  • Members
  • PipPip
  • 43 posts

Posted 14 December 2011 - 06:35 PM

Une dernière chose, j'aimerai également faire l'inverse, c'est à dire afficher du texte uniquement pour les visiteurs mais ne pas l'afficher pour les personnes enregistrées.

Quelles sont les variables et les codes que je dois rajouter ?

Commandesgrp

    PrestaShop Apprentice

  • Members
  • PipPip
  • 43 posts

Posted 16 December 2011 - 06:14 PM

Problème toujours non résolu à ce jour, quelqu'un saurait me répondre ?

doekia

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1132 posts

Posted 16 December 2011 - 06:19 PM

@Commandegrp:

Ouvre ton propre topic
Essaye un peu quand même inverser un test ça doit pas être très dur? Si?

Commandesgrp

    PrestaShop Apprentice

  • Members
  • PipPip
  • 43 posts

Posted 16 December 2011 - 07:10 PM

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.

doekia

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1132 posts

Posted 16 December 2011 - 09:16 PM

{if !$logged}
! signifie not

Commandesgrp

    PrestaShop Apprentice

  • Members
  • PipPip
  • 43 posts

Posted 17 December 2011 - 04:42 PM

Effectivement, ça marche à merveille.

Merci encore.

Broceliande

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1656 posts

Posted 20 December 2011 - 02:06 AM

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 ?
Développeur web, php, mysql , javascript, c#, modules prestashop ...
http://www.presta-broceliande.fr
Modules et fonctionnalités sur mesure.

doekia

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1132 posts

Posted 20 December 2011 - 02:38 AM

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

Broceliande

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1656 posts

Posted 20 December 2011 - 11:10 AM

Ah my bad..., bien reçu ... seulement une partie de la description....
Oui en fait c'est exactement sur ce principe que l'on cache les prix.
J'ai lu en diagonale , quelque chose me disait que j'avais raté un truc ;)
Développeur web, php, mysql , javascript, c#, modules prestashop ...
http://www.presta-broceliande.fr
Modules et fonctionnalités sur mesure.

doekia

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1132 posts

Posted 20 December 2011 - 11:43 AM

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

Broceliande

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1656 posts

Posted 20 December 2011 - 12:00 PM

;)
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 ...
Développeur web, php, mysql , javascript, c#, modules prestashop ...
http://www.presta-broceliande.fr
Modules et fonctionnalités sur mesure.

doekia

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1132 posts

Posted 20 December 2011 - 12:40 PM

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.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users