2014-09-05 14 views
7

Ho un obbligo di ricostruire la pagina di checkout, contenente gli ultimi prodotti abbandonati.Ricostruisci la pagina di checkout in opencart per passare l'e-mail registrata come querystring al checkout/carrello

Se si è già effettuato l'accesso al sito consumer di opencart e si preme questo URL - http://www.example.com/index.php?route=checkout/cart, verranno definitivamente elencati tutti i prodotti nel carrello (che devono ancora essere acquistati).

Senza accedendo al sito web del consumatore, se qualcuno colpisce direttamente l'url - http://www.example.com/index.php?route=checkout/cart&[email protected] - sarà elencare tutti i prodotti che sono ancora essere acquistato da [email protected] (noto anche come abandoned products/cart), a condizione [email protected] è un utente registrato di sito OpenCart.

Desidero passare quell'indirizzo di posta elettronica dall'URL come una querystring alla pagina di pagamento/carrello e utilizzarlo per restituire i prodotti abbandonati per l'e-mail del cliente.

Come posso portare quell'e-mail nella pagina di pagamento/carrello e mostrare all'utente i prodotti del carrello abbandonati?

Sono molto di nuovo da opencart, io non ne so molto di funzionalità di base, così ho cercato come raggiungere questo obiettivo, ma atterrato con estensioni (come THIS) che sono pagati, il mio requisito è di averlo a costruire all'interno dell'URL, che ho spiegato sopra.

fornito: Opencart l'installazione è una versione di riserva, nessun altro addon/plugins sono installati.

EDIT

ho provato dopo.

if(isset($this->request->get['email'])) 
{ 
    $email = $this->request->get['email']; 
    $cart_details = $this->db->query("SELECT cart FROM " . DB_PREFIX . "customer c where c.email = '" . $email . "'"); // just for tesing, i will fix this to prevent SQL injection. 
    $this->session->data['cart']= $cart_details->row['cart']; 
} 

Quando faccio eco con "$cart_details->row['cart']", ha ottenuto valore richiesto, ma anche dopo aver impostato tale valore alla session pagina di checkout non è ricostruendo elenco dei prodotti abbandonati.

+0

Perché è contrassegnato da ** opencart ** e anche ** magento **? Penso che dovresti attenersi a una piattaforma solo nella tua domanda per evitare che suoni come * troppo ampio *. In OpenCart non riesco a pensare a nessun ** cart id **, l'unica cosa che ti serve è il ** id cliente ** in quanto il contenuto del carrello (che non era ancora * verificato *) deve essere memorizzato nel database nella tabella 'customer' (come array serializzato). Per favore, nota che è ** I ** e non ** i ** se vuoi parlare in prima persona singolare. – shadyyx

+0

Ho modificato le diciture e rimosso Mangeto Tag, ma dovrei conservare il carrello del cliente (che non è stato estratto) in DB come array serializzato? –

+1

In OpenCart, questo dovrebbe già accadere. In caso contrario, puoi farlo da solo. C'è già una colonna 'carrello' nella tabella' cliente'. – shadyyx

risposta

14

Ho modificato il metodo di verifica checkout/controller/checkout/cart.php e aggiunto un controllo per verificare se l'URL personalizzato contiene "cmail". Quindi convalido l'indirizzo email fornito nell'URL. A questo punto, interrogo il DB per ottenere la colonna "carrello" del cliente (nota che ho usato escape per impedire l'iniezione SQL), che viene quindi decodificata e messa in sessione. Se si colpisce il sito con l'url "localhost/index.php? Route = checkout/cart & [email protected]", si otterrà il carrello ricostruito nella pagina. Ho usato il seguente codice.

if(isset($this->request->get['cmail'])) 
{ 
    $email = $this->request->get['cmail']; 
    if(filter_var($email, FILTER_VALIDATE_EMAIL)) 
    { 
     $cart_details = $this->db->query("SELECT cart,customer_id FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(utf8_strtolower($email)) . "'"); 

     if($cart_details->num_rows > 0) 
     { 
      $cart_data = $cart_details->row['cart']; 
      if ($cart_data && is_string($cart_data)) { 
       $cart = unserialize($cart_data); 

       foreach ($cart as $key => $value) { 
        $this->session->data['cart'][$key] = $value; 
       }   
      } 
     } 
    } 
} 
+0

La domanda è Off Topic e questa risposta non dà più luce sull'argomento anche per gli utenti che cercano la stessa domanda - ma solleva più domande d'altra parte. Elimina l'intera domanda o aggiungi la tua intera soluzione (con il codice che è stato aggiunto, ** non le intere classi/file **) in una sorta di tutorial. – shadyyx

+2

@shadyyx, ho aggiornato la mia domanda così come la risposta postata, per favore rivederla e darmi il feedback necessario e aiutarmi anche a postare una domanda migliore mantenendo questa domanda come esempio! Questo sarà molto d'aiuto per me. –

Problemi correlati