Jump to content

[RISOLTO][PS 1.7.6] Cambiare il redirect della pagina registrazione


lemoeb

Recommended Posts

Devo modificare il reindirizzamento dopo la registrazione di un cliente.
Nel modulo che sto scrivendo, intercetto correttamente ActionCustomerAccountAdd Hook ed eseguo le operazioni necessarie al mio modulo.

Tuttavia, vorrei vedere il mio file .tpl e non il file prestashop predefinito.

Ho provato a usare Tools :: redirect ma non ho ottenuto nulla.

Suggerimenti su come farlo?

Grazie in anticipo

Il mio codice:

 

public function hookActionCustomerAccountAdd($param) {

Tools::redirect('views/templates/front/confirm.tpl');

}

P.S.

Dopo aver effettuato la registrazione (poiché disabilito l'attivazione automatica del client) torno alla schermata di registrazione stessa (come nella figura), vorrei evitarlo e fare in modo che un cliente veda un mio messaggio specifico.

presta-sc.png

 

Grazie in anticipo

Edited by lemoeb (see edit history)
Link to comment
Share on other sites

Ciao,

invece del redirect, puoi provare a mettere nella tua funzione una cosa di questo tipo:
return $this->fetch($this->templateFile, $this->getCacheId('tuo_template'));

dove $this->templateFile è da dichiarare nella funzione __construct() del tuo modulo in questo modo:
$this->templateFile = 'module:tuo_modulo/tuo_template.tpl';

Buona giornata,
Federica

Link to comment
Share on other sites

Ciao Federica,
ho provato la soluzione che mi hai indicato ma non risolvo il problema.
Il mio tpl è il seguente :

 

{extends file='page.tpl'}
{block name='page_content_top'}
    <div class="panel">
        <H1>Attesa conferma</H1>
        lorem ipsum dolor
    </div>
{/block}

seguendo quanto mi hai detto ho inserito il seguente codice nel __constrct del modulo :

 

$this->templateFile = 'module:cremailconfirm/views/templates/front/confirm.tpl';

 

e nella mia funzione :

 public function hookActionCustomerAccountAdd($param)
    {
 $sql="UPDATE `". _DB_PREFIX_ ."customer` SET active=0";
        Db::getInstance()->execute($sql);


        return $this->fetch($this->templateFile, $this->getCacheId('confirm.tpl'));

    }

dopo aver fatto tutto questo ricevo il seguente errore :


(1/1) ContextErrorException

Notice: Undefined index: layout
in 97d2ad90ef4e2f8689ecd37516a19e4456273929_2.file.page.tpl.php line 33
at content_5d8bb8a7558c26_81370497(object(SmartyDevTemplate))in smarty_template_resource_base.php line 123
at Smarty_Template_Resource_Base->getRenderedTemplateCode(object(SmartyDevTemplate))in smarty_template_compiled.php line 114
at Smarty_Template_Compiled->render(object(SmartyDevTemplate))in smarty_internal_template.php line 216
at Smarty_Internal_Template->render()in smarty_internal_template.php line 385
at Smarty_Internal_Template->_subTemplateRender('page.tpl', 'confirm.tpl|1|1|10', null, 0, 3600, array(), 2, false, null, null)in smarty_internal_runtime_inheritance.php line 125
at Smarty_Internal_Runtime_Inheritance->endChild(object(SmartyDevTemplate), 'page.tpl')in 1becd3be2235e42d4d4ddda2abcf592fb9a58533_2.module.cremailconfirmviewstempla.php line 34
at content_5d8bb8a753c712_76239631(object(SmartyDevTemplate))in smarty_template_resource_base.php line 123
at Smarty_Template_Resource_Base->getRenderedTemplateCode(object(SmartyDevTemplate))in smarty_template_compiled.php line 114
at Smarty_Template_Compiled->render(object(SmartyDevTemplate))in smarty_internal_template.php line 216
at Smarty_Internal_Template->render(false, 0)in smarty_internal_templatebase.php line 232
at Smarty_Internal_TemplateBase->_execute(object(SmartyDevTemplate), null, null, null, 0)in smarty_internal_templatebase.php line 116
at Smarty_Internal_TemplateBase->fetch(null, null, null, null, false, true, false)in SmartyDevTemplate.php line 40
at SmartyDevTemplateCore->fetch()in Module.php line 2447
at ModuleCore->fetch('module:cremailconfirm/views/templates/front/confirm.tpl', 'confirm.tpl|1|1|10')in cremailconfirm.php line 287
at Cremailconfirm->hookActionCustomerAccountAdd(array('newCustomer' => object(Customer), 'cookie' => object(Cookie), 'cart' => object(Cart), 'altern' => 5))in Hook.php line 970
at HookCore::coreCallHook(object(Cremailconfirm), 'hookactionCustomerAccountAdd', array('newCustomer' => object(Customer), 'cookie' => object(Cookie), 'cart' => object(Cart), 'altern' => 5))in Hook.php line 355
at HookCore::callHookOn(object(Cremailconfirm), 'actionCustomerAccountAdd', array('newCustomer' => object(Customer), 'cookie' => object(Cookie), 'cart' => object(Cart), 'altern' => 5))in Hook.php line 907
at HookCore::exec('actionCustomerAccountAdd', array('newCustomer' => object(Customer), 'cookie' => object(Cookie), 'cart' => object(Cart), 'altern' => 5))in CustomerPersister.php line 202
at CustomerPersisterCore->create(object(Customer), 'pippo1234')in CustomerPersister.php line 59
at CustomerPersisterCore->save(object(Customer), 'pippo1234', null, true)in CustomerForm.php line 196
at CustomerFormCore->submit()in AuthController.php line 60
at AuthControllerCore->initContent()in Controller.php line 291
at ControllerCore->run()in Dispatcher.php line 515
at DispatcherCore->dispatch()in index.php line 28

Suggerimenti a riguardo?

Grazie

Link to comment
Share on other sites

Ciao,

suggerimento 1:

15 hours ago, lemoeb said:

$this->getCacheId('confirm.tpl'));

dovresti togliere .tpl, ci va solo 'confirm'

suggerimento 2:

15 hours ago, lemoeb said:

Notice: Undefined index: layout

mi sa che c'è qualche problema nel template.
Prova a mettere nel template solo un semplice <div> senza usare nulla di Smarty e senza estendere nessun template e vedere se viene visualizzato correttamente.

Buona giornata,
Federica

Link to comment
Share on other sites

Ciao Federica,
ho fatto come mi hai detto ma non funziona.
L'errore non lo presenta più ma sono ritornato al punto di partenza.

Mi spiego meglio :

Ho fatto tutte le moifiche e rimosso i vari extend nel template che ho fatto io che ora si presenta così :

    <div class="panel">
        <H1>Attesa conferma</H1>
        lorem ipsum dolor
    </div>

Non accade nessun redirect o presentazione di Template, in pratica mi ritorna alla form di registrazione.
Questo credo che dipenda dal fatto che con il mio controller intervengo proprio sulla registrazione.

In questo hook :

public function hookActionCustomerAccountAdd($param)
{
	  $sql="UPDATE `". _DB_PREFIX_ ."customer` SET active=0";
      Db::getInstance()->execute($sql);


      return $this->fetch($this->templateFile, $this->getCacheId('confirm'));
}


Che viene chiamato dopo la registrazione, come puoi vedere imposto lo stato dell'utente a 0.
Il sistema che fa redirect verso (credo la pagina di account del cliente) non trovado lo stato a 1 ripresenta la form di registrazione.

Quello che vorrei io è che la form di registrazione non venga ripresentata, ma al suo posto dovrebbe apparire la pagina che ho scritto io.

In parte con Tools::redirect ho risolto, nel senso che presenta il mio template ma l'utente risulta loggato anche se questo non è vero e se si clicca sul nome utente (in alto a destra) o in qualsiasi altra parte dello shop (vedi il menu) non succede nulla a parte il rimuovere l'utente come loggato ed è quindi necessario effettuare almeno due operazioni prima di poter accedere correttamente allo shop.

Spero di essere stato il più chiaro possibile.

Ti ringrazio anticipatamente per il tuo supporto.

Leandro

Edited by lemoeb (see edit history)
Link to comment
Share on other sites

Ciao,

ok è più chiaro. Io proverei a forzare il logout dell'utente prima del redirect.
Una cosa tipo $this->context->cookie->logout(); (devi guardare prima che info hai in $this->context, potrebbe essere $this->context->customer->logout()) oppure $customer->logout(); se hai un'istanza di $customer nel tuo modulo.

Spero di essere stata d'aiuto,
Federica

Link to comment
Share on other sites

******* GRANDE FEDERICA! *******

Grazie ai tuoi consigli ho raggiunto l'obiettivo.

Alla fine dopo il logout, per poter rispettare il layout della pagina ho sfruttato Tools:redirect ma comunque il primo obiettivo l'ho raggiunto.
Ora proseguo, speriamo di non trovare ulteriori intoppi.

Grazie di nuovo

Leandro
 

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