Jump to content

Disclaimer per pagine/categorie CMS


D.Fenstec

Recommended Posts

Buongiorno a tutti

Sto cercando un metodo per aggiungere un Disclaimer a determinate pagine/categorie CMS.

In poche parole, quando un utente (registrato o meno) visita queste categorie/pagine per la prima volta, deve apparire un popup in mezzo alla pagina, oscurando lo sfondo ad esempio, in cui c'è scritto "Stai entrando in un'area riservata ecc" con due pulsanti "Accetto" e "Non accetto".

Una prima idea era quella di creare un cookie nel caso in cui l'utente accettasse di entrare nell'area riservata (la durata è da decidere, ma penso non ci siano problemi nel modificarla).
Se invece l'utente non accetta viene reindirizzato alla home page.

Se avete altre idee/metodi, ben vengano, io ho pensato ai cookie dato che di solito hanno anche questo scopo.

Ho cercato in giro ma non ho trovato niente di simile, il massimo che ho trovato è stata la modifica di un paio di file, che però riguardavano le categorie dei prodotti, non le pagine cms.

Utilizzo Prestashop 1.6.

Grazie in anticipo

Link to comment
Share on other sites

  • 2 weeks later...

Ok ho trovato una soluzione che potrebbe andare bene, la posto nel caso in cui a qualcuno servisse.

In poche parole le seguenti modifiche permettono di far apparire un pop-up (Fancybox) con del testo a nostra scelta, e due bottoni per accettare o non accettare. Nel caso in cui l'utente accetti viene creato un cookie della durata di 1 giorno (modificabile), in modo che non venga più richiesto di accettare. Se l'utente non accetta viene rimandato alla pagina precedentemente visitata.


Modifica del file /controllers/front/CmsController.php

Cercate la funzione setMedia() (nel mio file è alla riga 84) e aggiungete all'interno della funzione, in fondo (quindi prima di chiudere la parentesi graffa) il seguente codice:

$this->addCSS(_PS_CSS_DIR_.'jquery.fancybox.css', 'screen');
$this->addJqueryPlugin(array('fancybox', 'idTabs', 'scrollTo', 'serialScroll'));

Dovrebbe diventare una cosa simile a questa:

public function setMedia()
{
	parent::setMedia();

	if ($this->assignCase == 1)
		$this->addJS(_THEME_JS_DIR_.'cms.js');

	$this->addCSS(_THEME_CSS_DIR_.'cms.css');

	$this->addCSS(_PS_CSS_DIR_.'jquery.fancybox.css', 'screen');
    	$this->addJqueryPlugin(array('fancybox', 'idTabs', 'scrollTo', 'serialScroll'));
}

In questo modo verrà aggiunto il plugin Fancybox (per il pop-up del disclaimer) alle pagine CMS.

Ora andate a modificare il file header.tpl del vostro tema, solitamente si trova in /themes/default-bootstrap/header.tpl (varia in base al vostro tema).

Subito dopo l'apertura del tag <head> inserite questa stringa:

<script src="{$base_dir}js/jquery/plugins/jquery.cooki-plugin.js"></script>

ATTENZIONE: questa stringa, trovata su internet, conteneva la parola jquery.cookie-plugin.js però mentre controllavo l'esistenza del file ho notato che nel nome jquery.cooki-plugin.js (senza la e di cookie). Controllate voi qual è il nome del vostro file.

Successivamente, sempre all'interno del file header.tpl, aggiungete il seguente codice subito dopo l'apertura del tag <body>

{if $cms->id == 19 || $cms->id == 20 || $cms->id == 21 || $cms_category->id == 3 || $cms_category->id == 7 || $cms_category->id == 9}
	<script language="javascript">
		{literal}
			$(document).ready(
				function()
				{
					var handle = $.cookie("cookieDisclaimer");
					if (handle != "accetto")
					{
						$.fancybox(
							$("#hiddenModalContent").html(),
							{
								'padding':30,
								'closeBtn':false,
								'openEffect':'elastic',
								'closeEffect':'elastic',
								'openEasing':'swing',
								'closeEasing':'swing',
								'helpers': {
									overlay: {
										closeClick: false,
										css: {
											'background' : 'rgba(0, 0, 0, 0.95)'
										}
									}
								}
							}
						);
					}
				}
			);
		{/literal}
	</script>
	<div id="hiddenModalContent" style="display:none">
		<center>
			<h2>
				<strong>Attenzione!</strong> Contenuto riservato
			</h2>
			<p>
				Le pagine all'interno di tutta la categoria
				<br />
				sono riservate.
			</p>
			<br />
			<p>*Nome sito/azienda* non si assume alcuna responsabilità.</p>
			<br />
			<strong>Vuoi aprire questa pagina?</strong>
			<br /><br />
			<input type="button" onClick="$.fancybox.close();createCookie()" value="Sì, Accetto">
			<input type="button" onClick="history.go(-1);" value="No, Non accetto">
		</center>
	</div>
	<script language="javascript">
		// script cookie
		function createCookie()
		{
			$.cookie("cookieDisclaimer", "accetto", { expires: 1 });
		}
	</script>
{/if}

Nella prima riga, all'interno dell'IF, inseriamo gli ID delle pagine e delle categorie CMS in cui vogliamo che appaia il Disclaimer.

expires: 1 è la durata del cookie (1 giorno)

'padding':30, 'closeBtn':false, 'openEffect':'elastic' ecc sono delle opzioni configurabili per Fancybox (guardare la documentazione per la lista completa).
Avendo trovato questo pezzo di codice per una versione più vecchia di Fancybox, alcune di queste opzioni non funzionano e purtroppo non ho avuto tempo di controllare quali siano corrette e quali no.

Spero sia d'aiuto per altri.

Edited by D.Fenstec (see edit history)
Link to comment
Share on other sites

  • 5 months later...

Salve, molto utile la guida e funziona perfettamente

ho solo una domanda, vorrei che la disclaimer partisse anche quando si apri il sito nella home page.

e fattibile?

 

Grazie

Raffaele

Salve, scusi per il ritardo

 

Al momento non ho il codice disponibile, e nemmeno il sito. Comunque se il tuo scopo è quello di aggiungere il disclaimer anche nella home-page, dovrebbe essere possibile "giocando" con il codice che va inserito nel file header.tpl.

 

Come si può vedere, l'ultimo pezzo di codice che ho inserito (quello "lungo" per intenderci) viene eseguito solo se l'ID della pagina o della categoria è presente all'interno dell'if (la prima riga, che in questo caso comprende le pagine/categorie con ID 19, 20, 21, 3, 7 e 9).

 

Ora non so se anche l'home page ha un ID o qualcosa di simile per identificare la pagina.. se ce l'ha basta aggiungerlo dentro l'if (con una ricerca su google si dovrebbe capire se ce l'ha)

 

In alternativa togliendo l'if (quindi la prima e ultima riga del codice), il disclaimer verrà visualizzato in ogni pagina del sito. Non so se può essere una soluzione per quello che ti serve.

Link to comment
Share on other sites

  • 1 month later...

Riesumo il post in quanto dovrei fare esattamente la stessa cosa (accetta/non accetta o entra/esci),

ma precisamente avrei bisogno che apparisse solo ed esclusivamente quando si accede al secondo negozio configurato (www.miosito.com/negozio2)

Qualcuno può consigliarmi quali modifiche al codice bisogna fare per poter ottenere ciò?

Grazie

Link to comment
Share on other sites

  • 2 weeks later...
  • 11 months later...

Ciao,anche io uso Prestashop 1.6,precisamente 1.6.1.3 però il codice non mi funziona!Ho un template diverso da quello di default e poi ho notato che Dreamweaver mi segnala un errore all'altezza di "{/literal}".

Può essere questo il problema? Inoltre ho controllato il file "jquery.cooki-plugin.js" ed anche il mio è senza "e".Qualcuno può aiutarmi a capire perchè non funziona? Grazie!

Link to comment
Share on other sites

  • 1 month later...

Ciao....mi rivolgo in particolare a NOVELLA85......anche io, passato a prestashop 1.6, non visualizzavo piu il disclaimer. Ho trovato un commento sul sito da cui avevo preso il codice x il disclaimer (http://zod.it/it/blog/prestashop-avviso-disclaimer-per-foto-erotiche.html) ho eseguito le operazioni descritte e il disclaimer e ricomparso, spero possa esservi utile :)

 

"Risposta di Marco Damian

Questo errore Smarty è strano, non so di preciso da cosa dipenda, però so che tra versioni diverse di Smarty ci sono delle incompatibilità, quindi problemi in template pensati per versioni di Prestashop/Smarty differenti (sono cose cmq abbastanza rare).

Propongo un fix, che è più che altro un workaround: apri il file tools/smarty/smarty.class.php
Modifica la seguente variabile da true a false.

public $inheritance_merge_compiled_includes = false;

Poi cancella il file "cache/class_index.php" (perché deve venire rigenerato)."

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