Telefono: +39 392 33 73 731

Prestashop: aggiungere 2 colonne con note in lista ordini

 

Per aggiungere le colonne Note e Messaggio va modificato il file overrides/controllers/admin/AdminOrdersController.php

 

<?php
class AdminOrdersController extends AdminOrdersControllerCore
{
    public function __construct() {
        parent::__construct();

        // collegamento alla tabella ps_customer_thread
        $this->_join .= 'LEFT JOIN ps_customer_thread ct ON ct.id_order=a.id_order';

        // questo mostra la nota nell'indirizzo di spedizione
        $this->_select .= ', address.other AS `note`';
        
        // utilizza invece questo per mostrare la nota interna dell'ordine
        // $this->_select .= ', c.note AS `note`';

        // questo mostra l'ultimo messaggio (max. 1), nella tabellas customer_thread collegata prima. Cambiando ASC o DESC decidi se mostrare il primo o ultimo messaggio.
        $this->_select .= ', (SELECT message FROM ps_customer_message cm WHERE cm.id_customer_thread=ct.id_customer_thread AND ct.status="open" ORDER BY cm.date_upd DESC LIMIT 1) AS `message`';

        // aggiunta della colonna note (fields_list) - prima nominata note
        $this->fields_list['note'] = array(
        'title' => $this->l('Note'),
        'havingFilter' => true,
        );

        // aggiunta della colonna messaggio - nominata message
        $this->fields_list['message'] = array(
        'title' => $this->l('Message'),
        'havingFilter' => true,
        );

        // rimozione della colonna riferimento per fare spazio (ho ID ordine = ID progressivo di Prestashop)
        unset($this->fields_list['reference']);
    }
    
}
Domenica 03 Marzo 2019
(1 commenti)
PHP

Commento di Antonio

Venerdì 15 Maggio 2020

Ciao, ti premetto che sono un neofita, ma sto creando il mio sito di e-commerce con prestashop ora ho la versione 1.7.3.3
le cose procedono abbastanza bene alcune cose riesco a modificarle da solo per le mie esigenze. ho installato un modulo che mi permette di inserire dei campi personalizzati nel Checkout, ora la mia domanda è, vorrei che questi due campi appaiano nella lista ordini nel back office, ho copiato il file AdminOrdersController.php nella cartella overrives e modificandolo sono riuscito ad eliminare due colonne che non mi servivano, ma pur leggendo alcune guide non riesco ad inserire questi due campi nella lista ordini. Mi puoi aiutare. Grazie

Risposta di Marco

Ciao, quello che faccio nel post qui sopra è manipolare la query al database, ed estrapolare dei campi in più da aggiungere nell'array "fields_list", che andranno poi nelle colonne. Quindi devi avere come riferimento la query originale nel file di core, qui sopra non la vedi, ma vedi il riferimento "a.id_order", l'alias "a" è definito nella query principale.

La cosa può funzionare perché sto usando le tabelle di Prestashop che conosciamo, se leggi i commenti vedi che uso "$this->_join" per aggiungere un collegamento alla tabella degli ordini ps_customer_thread che abbia ID ordine uguale all'ordine della query principale (cioè "a.id_order").
A questa tabella do alias "ct" che uso qualche riga più sotto in "$this->_select", per fare una subquery alla tabella ps_customer_message che ricavi l'ultimo messaggio attivo che come cliente abbia lo stesso ID trovato nella tabella dei thread (che avevamo collegato con l'ordine).
Fin qui abbiamo ridefinito la query al database ed estratto il valore che ci serve. Infine, per mostrare il campo nella colonna bisogna aggiungere un elemento in array "$this->fields_list" che come chiave ha lo stesso alias usato nel select poco prima, e come valore ha un array (title è una stringa di testo, e havingFilter è per rendere la colonna filtrabile). 

In pratica tu devi fare qualcosa di simile. Ovviamente non so che modulo hai installato, e se questo abbia aggiunto tabelle al database (presumo di si). Quindi dovresti fare un join, e un select, simili a come ho spiegato, ma con il nome tabella e dei campi corretti, devi osservare il tuo database. Immagino che la nuova tabella usi sempre ID ordine per relazionarla con la tabella di Prestashop. Se non riesci a farlo da solo ti consiglio di girare la tua richiesta allo sviluppatore del modulo.

Aggiungi un commento

Nome
E-mail (non verrà pubblicata)
Sito Web
Commento