Come copiare il carrello in un altro carrello per cambiare il id_cart?

Obiettivi del blog

Dopo aver letto questo blog, saremo in grado di copiare il carrello in un altro carrello per cambiare l'Id del carrello.

Requisito

Abbiamo bisogno di modificare il file sottostante per risolvere lo stesso. Faremo delle modifiche nel file Core per lo stesso.

Directory principale \ classes \ PaymentModule.php

Procedura

È necessario modificare la funzione di ordine di convalida nel file di classe PaymentModule. Poiché questa funzione viene chiamata una sola volta durante il completamento dell'ordine. Quindi abbiamo aggiunto il codice nella stessa per evitare la creazione di più carrelli.

if (self :: DEBUG_MODE) {PrestaShopLogger :: addLog ('PaymentModule :: validateOrder - Funzione chiamata', 1, null, 'Carrello', (int) $ id_cart, true); } if (! isset ($ this-> context)) {$ this-> context = Context :: getContext (); } $ this-> context-> cart = new Cart ((int) $ id_cart);

Sotto il codice deve essere aggiunto nella funzione di ordine di convalida dopo le righe precedenti.

// modifiche avviate // Per salvare la chiave sicura dell'id del carrello corrente e riassegnare la stessa al nuovo carrello $ old_cart_secure_key = $ this-> context-> cart-> secure_key; // Per salvare l'id cliente dell'id del carrello corrente e riassegnare lo stesso al nuovo carrello $ old_cart_customer_id = (int) $ this-> context-> cart-> id_customer; // Per rimuovere il client dal vecchio carrello $ this-> context-> cart-> id_customer = 0; // Per aggiornare il carrello $ this-> context-> cart-> save (); // Per recuperare i prodotti del carrello corrente $ cart_products = $ this-> context-> cart-> getProducts (); // Creazione di un nuovo oggetto carrello $ this-> context-> cart = new Cart (); $ this-> context-> cart-> id_lang = $ this-> context-> language-> id; $ this-> context-> cart-> id_currency = $ this-> context-> currency-> id; // per aggiungere un nuovo carrello $ this-> context-> cart-> add (); // per aggiornare il nuovo carrello foreach ($ cart_products as $ product) {$ this-> context-> cart-> updateQty ((int) $ product ['quantity'], (int) $ product ['id_product'], (int) $ product ['id_product_attribute']); } if ($ this-> context-> cookie-> id_guest) {$ guest = new Guest ($ this-> context-> cookie-> id_guest); $ this-> context-> cart-> mobile_theme = $ guest-> mobile_theme; } // per mappare il nuovo carrello con il cliente $ this-> context-> cart-> id_customer = $ old_cart_customer_id; // per salvare il nuovo carrello $ this-> context-> cart-> save (); se ($ this-> context-> cart-> id) {$ this-> context-> cookie-> id_cart = (int) $ this-> context-> cart-> id; $ This-> context-> cookie-> write (); } // per aggiornare $ id_cart con quello del nuovo carrello $ id_cart = (int) $ this-> context-> cart-> id; $ this-> context-> cart-> secure_key = $ old_cart_secure_key; // cambia

Dopo aver seguito la procedura di cui sopra, l'elenco del carrello acquisti sarà simile ad esempio avendo un carrello duplicato con gli stessi dettagli del carrello con cui viene effettuato l'ordine.
lo shopping-cart-list

sommario

Dopo aver seguito la procedura di cui sopra, potrai copiare il carrello in un altro carrello per cambiare il codice id_cart.


Ricevi gli ultimi prodotti senza prezzi speciali (Opencart 2.3)

Obiettivi del blog

Dopo aver letto questo blog, potrai recuperare i prodotti dal database Opencart sulla base del parametro che viene passato dall'URL.

Requisito

Dobbiamo visualizzare gli ultimi prodotti sulla base del parametro passato nell'URL. Usando questo parametro dobbiamo decidere se dobbiamo mostrare prodotti speciali o no.

Implementazione del codice

Per implementarlo dobbiamo apportare modifiche al nostro controller e modello. Nel controller abbiamo aggiunto la condizione per passare il parametro e nel modello apporteremo delle modifiche nella query in base al parametro passato. Per gestire la condizione che stiamo usando show_special parametro nel codice. Di seguito è riportato il codice che dobbiamo aggiungere nel controller (Catalogo / regolatore / estensione / modulo / latest.php):

/ * Verifica della chiave show_special nel parametro get * Questa chiave ($ show_special) verrà utilizzata per recuperare i dati dal database in modo condizionale. * cioè se $ show_special = 1 quindi visualizza i prodotti speciali * $ show_special = 0 quindi visualizza prodotti che non hanno speciali * else * visualizza tutti i prodotti indipendentemente da speciali * / if (isset ($ this-> request-> get [' show_special '])) {// passaggio del valore nella variabile se impostato nell'URL $ show_special = $ this-> request-> get [' show_special ']; } else {// Altrimenti verrà passata la stringa vuota $ show_special = ''; } // Creazione di una variabile da passare al modello $ filter_data = array ('start' => ($ page - 1) * $ limit, 'limit' => $ limit, 'show_special' => $ show_special); // Chiamata alla funzione modello per recuperare i dati dal database in base ai dati passati nell'array filter_data. $ results = $ this-> model_catalog_product-> getProductLatest ($ filter_data);

In questo codice per prima cosa abbiamo controllato che se 'show_special'il parametro è impostato nell'URL o no. Se sì, imposta il valore del parametro in una variabile $ show_special e se no, quindi impostare la variabile come vuota. Quindi abbiamo creato un array ($ default_data) con i valori per conto dei quali dobbiamo recuperare i prodotti dal database. Quindi abbiamo chiamato la funzione del modello getProductLatest () per recuperare gli ultimi prodotti in base alla variabile passata ($ filter_data) nella funzione. Ecco la funzione che dobbiamo aggiungere nel modello (Catalogo / modello / catalogo / prodotto):

funzione pubblica getProductLatest ($ data = array ()) {// Impostazione $ join e $ condition parametri per recuperare i dati di prodotti speciali if ($ data ['show_special'] == '1') {$ join = "LEFT JOIN" . DB_PREFIX. "product_special ps ON (ps.product_id = p.product_id)"; $ condition = "AND ps.customer_group_id = '". (int) $ this-> config-> get ('config_customer_group_id'). "'AND ((ps.date_start =' 0000-00-00 'OR ps.date_start <NOW ()) AND (ps.date_end =' 0000-00-00 'OR ps.date_end> NOW () O ps.date_end = '0001-01-01')) "; } // Impostazione dei parametri $ join e $ condition per il recupero dei dati di prodotti che non sono specil elseif ($ data ['show_special'] == '0') {$ join = "LEFT JOIN". DB_PREFIX. "product_special ps ON (ps.product_id = p.product_id)"; $ condition = "AND ps.product_id È NULL"; } else {// Impostazione dei parametri $ join e $ condition per il recupero dei dati di tutti i prodotti, indipendentemente dallo speciale $ join = ''; $ condizione = ''; } // Query per recuperare i dati dei prodotti dal database. Aggiunto $ join e $ condition parametro nella query per recuperare i dati di conseguenza $ sql = "SELECT DISTINCT p.product_id FROM". DB_PREFIX. "Prodotto p SINISTRA". DB_PREFIX. "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN". DB_PREFIX. "product_to_store p2s ON (p.product_id = p2s.product_id) $ join WHERE p.status = '1' AND p.date_available <= NOW () AND p2s.store_id = '". (int) $ this-> config-> get ('config_store_id'). "$ condizione GROUP BY p.product_id ORDER BY p.product_id DESC"; // Impostazione del limite in query se superato LIMIT dal controller. if (isset ($ data ['start']) || isset ($ data ['limite'])) {if ($ data ['start'] <0) {$ data ['start'] = 0; } if ($ data ['limit'] <1) {$ data ['limit'] = 20; } $ sql. = "LIMIT". (int) $ data ['start']. ",". (int) $ dati [ 'limite']; } $ product_data = array (); // Esegui query $ query = $ this-> db-> query ($ sql); // Loop per impostare i dati recuperati nella variabile da passare nel controller. foreach ($ query-> rows as $ result) {$ product_data [$ result ['product_id']] = $ this-> getProduct ($ result ['product_id']); } // Restituisci i dati dei prodotti al controller. return $ product_data; }

Nel modello abbiamo impostato delle variabili $ unirsi e $ condizione sulla base delle seguenti tre condizioni:

  1. Se show_special è 1: In questo caso abbiamo mostrato solo i prodotti che sono speciali. Come in opencart, i dati di prodotti speciali sono memorizzati nella tabella oc_product_special, quindi abbiamo aggiunto join della tabella oc_product con la tabella oc_product_secial per recuperare solo i dati di prodotti speciali.
  2. Se show_special è 0: In questo caso abbiamo visualizzato prodotti che non sono impostati come speciali. Quindi per trovare prodotti che non sono speciali dobbiamo recuperare i prodotti che sono nella tabella speciale ma nella tabella oc_product_special. Per questo abbiamo aggiunto il join LEFT della tabella oc_product con la tabella oc_product_secial e la condizione aggiunta "ps.product_id IS NULL".
  3. Se show_special è diverso da 0 e 1: In questo caso dobbiamo recuperare tutti i prodotti, siano essi speciali o meno. Quindi per questo abbiamo recuperato direttamente i dati dalla tabella oc_product.

Dopo aver aggiunto tutte e tre le possibili condizioni, abbiamo scritto una query e l'abbiamo eseguita. Quindi abbiamo impostato tutti i dati recuperati $ product_data array e restituire lo stesso al controller.

Nota: qui per recuperare gli ultimi prodotti abbiamo appena usato 'Ordina per product_id DESC' nella query. Se si desidera recuperare i dati dei prodotti che sono stati aggiunti negli ultimi giorni, è possibile aggiungere un'altra condizione nella clausola WHERE, ad esempio date_added> 'any date'.

sommario

Dopo aver seguito la procedura precedente, sarà possibile recuperare gli ultimi prodotti speciali sulla base del parametro passato per i prodotti speciali nell'URL.


Come calcolare la spedizione gratuita in base al prezzo totale finale in Prestashop?

Dopo aver letto questo blog saremo in grado di calcolare la spedizione gratuita in base al prezzo totale finale del carrello.

Dichiarazione problema

Attualmente, quando aggiungiamo i prodotti nel carrello e ci spostiamo nella sezione checkout per usufruire dello sconto e della spedizione, vediamo che lo sconto si applica dopo la spedizione. Diciamo,

  • L’importo totale del carrello è di $ 100 che si avvale della spedizione gratuita e viene aggiunto anche uno sconto del 5%.
  • Quindi, dopo che l’importo totale dello sconto del carrello è inferiore a $ 100, ma si applica comunque la spedizione gratuita che non dovrebbe avvenire. La spedizione gratuita deve essere applicata all’importo totale finale del carrello dopo lo sconto.
  • Questo è il processo predefinito di Prestashop. Fare riferimento allo screenshot qui sotto in cui la spedizione deve essere gratuita se il totale dell’ordine è > 50 ma è stata applicata la spedizione gratuita mentre il totale dell’ordine è < 50 dopo lo sconto –

Raccomandato Leggi: Strategie di spedizione gratuita: perché offrire? Come offrire? Quando offrire?

Perché c’è il problema attuale?

Il problema attuale è presente perché l’importo della spedizione viene calcolato sull’importo totale dell’ordine impostato nel carrello prima di applicare lo sconto. Puoi controllare le righe di codice sottostanti in cui viene utilizzato Totale ordine senza importo sconto per calcolare la spedizione –

$costo_spedizione += $carrier->getDeliveryPriceByPrice($the_total_price, $id_zone, (int)$this->id_currency);

Requisito

Abbiamo bisogno di modificare il file sottomenzionato per risolvere lo stesso. Sovrascriveremo le righe corrispondenti del file di classe per evitare qualsiasi modifica nei file Core.

Di seguito è riportato l’elenco dei file di classe che verranno sovrascritti-

1. Directory root\classi\Cart.PHP

Procedura per risolvere il problema-

Segui i passaggi indicati di seguito –

1. Funzione di riscrittura�getPackageShippingCost

2. Dopo la riga indicata di seguito –

// Totale dell'ordine nella valuta predefinita senza commissioni $order_total = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING, $product_list);

3. Aggiungi la seguente affermazione –

$listeDiscounts = $this->getCartRules(); $sconti_totali = 0; if (is_array($listeDiscounts)) { if (isset($listeDiscounts[0]['value_real'])) $total_discounts = $listeDiscounts[0]['value_real']; } $prezzo_da_applicazione_spedizione = floatval($totale_ordine) - floatval($sconti_totali); Lettura consigliata: la migliore estensione gratuita per il gestore delle spedizioni per il negozio OpenCart

4. Sostituisci le righe menzionate di seguito –

Sostituisci questa riga

$check_delivery_price_by_price = Vettore::checkDeliveryPriceByPrice($row['id_carrier'], $total_order, (int)$id_zone, (int)$this->id_currency);

Con una lunga

$check_delivery_price_by_price = Vettore::checkDeliveryPriceByPrice($row['id_carrier'], $prezzo_da_applicare_spedizione, (int)$id_zone, (int)$this->id_currency);

————E—————–

Sostituisci questa riga

$costo_spedizione += $carrier->getDeliveryPriceByPrice($the_total_price, $id_zone, (int)$this->id_currency);

Con una lunga

$costo_spedizione += $vettore->getDeliveryPriceByPrice($prezzo_da_applicazione_spedizione, $id_zone, (int)$questo->id_valuta);

5. Svuota la cache ed esegui.

Fare riferimento allo screenshot qui sotto dopo aver applicato le modifiche al codice –

Dopo aver seguito la procedura di cui sopra, sarai in grado di calcolare la Spedizione sull’importo Totale Finale del Carrello.

Conclusione

Quando si tratta di acquisti online, l’intera struttura dei prezzi gioca un ruolo cruciale per i clienti. Uno dei fattori che potrebbero creare o distruggere le tue conversioni è la disponibilità della spedizione gratuita. Un metodo per determinare le opzioni e i costi di spedizione su un sito di eCommerce è il Componente aggiuntivo gratuito del gestore di spedizione di Knowband. Uno dei requisiti più importanti per aumentare le vendite medie è fornire apertura nella transazione.

I negozi che hanno utilizzato questo modulo di spedizione gratuito hanno aumentato il traffico del sito, le entrate e i tassi di conversione. Con l’aiuto di questo plug-in di spedizione gratuito, gli amministratori del negozio possono definire le linee guida e le condizioni per i costi di spedizione. Ancora meglio, questa funzione può essere aggiunta o rimossa dal sito Web dall’amministratore del negozio.

La soglia oltre la quale viene offerta la spedizione gratuita può essere impostata dai rivenditori online. Di conseguenza, incoraggia persino i clienti a fare acquisti più grandi per qualificarsi per la spedizione gratuita. Per saperne di più sulla funzionalità del modulo di spedizione gratuita, non esitare a contattarci all’indirizzo support@knowband.com