Jump to content

[Résolu] Inscription newsletter dans une fancybox


Recommended Posts

Bonjour,

 

J'essai de modifier le module blocknewsletter afin d'afficher le formulaire dans une fancybox et gérer l'inscription dedans.

 

J'ai modifié le blocknewsletter.tpl

 

<!-- Block Newsletter module-->
<span id="inline" href="#newsletter_block_left">{l s='Newsletter' mod='blocknewsletter'}</span>
<script type="text/javascript">$('span#inline').fancybox();</script>
<div style="display:none">
<div id="newsletter_block_left" class="block">
 <h4>{l s='Newsletter subscription' mod='blocknewsletter'}</h4>
 <div class="block_content">
 {if isset($msg) && $msg}
  <p class="{if $nw_error}warning_inline{else}success_inline{/if}">{$msg}</p>
 {/if}
  <form id="newsletter_form" action="#" method="post">
   <p id="login_error">{l s='Please complete all the fields' mod='blocknewsletter'}</p>
   <p id="login_error_mail">{l s='The e-mail is not valid' mod='blocknewsletter'}</p>
   <p><label for="nom">{l s='your last name' mod='blocknewsletter'}</label><input type="text" id="nom" name="nom" size="18" value="" /></p>
   <p><label for="prenom">{l s='your first name' mod='blocknewsletter'}</label><input type="text" id="prenom" name="prenom" size="18" value="" /></p>
   <p><label for="postcode">{l s='your post code' mod='blocknewsletter'}</label><input type="text" id="postcode" name="postcode" size="18" value="" /></p>
   <p><label for="email">{l s='your e-mail' mod='blocknewsletter'}</label><input type="text" name="email" size="18" value="" /></p>
   <p>
 <select name="action">
  <option value="0"{if isset($action) && $action == 0} selected="selected"{/if}>{l s='Subscribe' mod='blocknewsletter'}</option>
  <option value="1"{if isset($action) && $action == 1} selected="selected"{/if}>{l s='Unsubscribe' mod='blocknewsletter'}</option>
 </select>
 <input type="submit" value="{l s='Submit' mod='blocknewsletter'}" class="button_mini" name="submitNewsletter" />
   </p>
  </form>
 </div>
</div>
</div>
<!-- /Block Newsletter module-->

 

Dans le fichier ./js/tool.js, j'ai ajouté

 

$(document).ready(function() {
$("#login_error").hide();
$("#login_error_mail").hide();
$("#newsletter_form").bind("submit", function() {
 if ($("#nom").val().length < 2 || $("#prenom").val().length < 2 || $("#postcode").val().length <= 4) {
  $("#login_error").show();
  $("#login_error_mail").hide();
  $.fancybox.resize();
  return false;
 }
 if(!checkEmail($("#email").val())) {
  $("#login_error").hide();
  $("#login_error_mail").show();
  $.fancybox.resize();
  return false;
 }
 else {
  $.fancybox.showActivity();

  $.ajax({
   type : "POST",
   cache : false,
   url  : "index.php",
   data : $("#newsletter_form").serializeArray(),

   success : function(data) {
 alert("validé");
 $("#login_error").html("<h1>OK</h1>");
 $("#login_error").show();
   },
   error   : function(jqXHR) {
  alert("jqXHR : "+jqXHR.status);
   }
  });
 }
});
});

 

Mais j'ai toujours une erreur avec le jqXHR.status = 0.

 

Quelqu'un aurait un début de piste de solution pour faire avancer le schmilblick ?

Share this post


Link to post
Share on other sites

c'est celui par défaut. Après avoir tout relu, je me suis rendu compte que j'avais un peu fait un peu n'importe quoi...

 

En fait j'appelerais directement mon blocknewsletter.tpl dans mno fichier blockcms.tpl mais du coup le fichier blocknewsletter.php n'est jamais executé.

 

Je pense qu'il faut que j'arrive a appeler le module blocknewsletter dans le module blockcms.

 

Je regarde dans les fichiers PHP mais j'ai du mal à comprendre comment appeller module dans un module...

 

Dans mon fichier blockcms.php, dans la fonction hookFooter() j'ai modifié

 

public function hookFooter()
{
 global $smarty;

 if (Configuration::get('FOOTER_BLOCK_ACTIVATION'))
 {

  $cms_titles = self::getCMStitlesFooter();

  $smarty->assign(array(
'block' => 0,
'cmslinks' => $cms_titles,
'theme_dir' => _PS_THEME_DIR_,
'display_stores_footer' => Configuration::get('PS_STORES_DISPLAY_FOOTER'),
'display_poweredby' => ((int)Configuration::get('FOOTER_POWEREDBY') === 1 || Configuration::get('FOOTER_POWEREDBY') === false)
  ));
  return $this->display(__FILE__, 'blockcms.tpl');
 }
 return '';
}

 

Par

 

public function hookFooter()
{
 global $smarty;

 if (Configuration::get('FOOTER_BLOCK_ACTIVATION'))
 {

  $cms_titles = self::getCMStitlesFooter();

  $smarty->assign(array(
'block' => 0,
'cmslinks' => $cms_titles,
'HOOK_NEWSLETTER_FOOTER' => Module::hookExec('hookFooterNewsMenu', NULL, 82),
'theme_dir' => _PS_THEME_DIR_,
'display_stores_footer' => Configuration::get('PS_STORES_DISPLAY_FOOTER'),
'display_poweredby' => ((int)Configuration::get('FOOTER_POWEREDBY') === 1 || Configuration::get('FOOTER_POWEREDBY') === false)
  ));
  return $this->display(__FILE__, 'blockcms.tpl');
 }
 return '';
}

 

Dans le fichier blockcms.tpl j'ai ajouté

 

{$HOOK_NEWSLETTER_FOOTER}

 

Dans le fichier blocknewsletter.php j'ai ajouté

 

function hookFooterNewsMenu($params)
{
 return $this->hookLeftColumn($params);
}

 

Mais rien ne s'affiche

 

EDIT : J'ai affiché le debug smarty et j'ai ca :

 

$HOOK_NEWSLETTER_FOOTER S
marty_Variable Object (3)
->value = ""
->nocache = false
->scope = "Smarty root"

Share this post


Link to post
Share on other sites

C'est résolu !

 

Tout bêtement dans cet appel :

 

'HOOK_NEWSLETTER_FOOTER' => Module::hookExec('hookFooterNewsMenu', NULL, 82),

 

j'appelle un mauvais hook.

 

J'ai remplacé cette ligne par

 

'HOOK_NEWSLETTER_FOOTER' => Module::hookExec('FooterNewsMenu');

Share this post


Link to post
Share on other sites

  • 4 months later...

Bonjour,

 

tu pourrais m'aider pour l'utilisation de ton script, je suis plutôt interessé par son utilité. J'ai bien réussi à créer un nouveau hook, modifier le blocknewsletter, les js, et le bloccms mais quand ma page s'affiche je ne peux pas cliquer sur le lien Newsletter (le href ne fonctionne à priori pas)

 

merci par avance

Share this post


Link to post
Share on other sites

En fait, j'ai résolu mon problème. Il fallait modifier le fichier FrontController.php pour activer les fancybox de partout.

 

 

public function setMedia()

{

global $cookie;

Tools::addCSS(_THEME_CSS_DIR_.'global.css', 'all');

Tools::addCSS(_PS_CSS_DIR_.'jquery.fancybox-1.3.4.css');

Tools::addJS(array(_PS_JS_DIR_.'jquery/jquery-1.4.4.min.js', _PS_JS_DIR_.'jquery/jquery.easing.1.3.js', _PS_JS_DIR_.'tools.js', _PS_JS_DIR_.'jquery/jquery.fancybox-1.3.4.js'));

if (Tools::isSubmit('live_edit') AND Tools::getValue('ad') AND (Tools::getValue('liveToken') == sha1(Tools::getValue('ad')._COOKIE_KEY_)))

{

Tools::addJS(array(

_PS_JS_DIR_.'jquery/jquery-ui-1.8.10.custom.min.js',

_PS_JS_DIR_.'hookLiveEdit.js')

);

}

$language = new Language($cookie->id_lang);

if ($language->is_rtl)

Tools::addCSS(_THEME_CSS_DIR_.'rtl.css');

}

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More