alain56 Posted July 29, 2011 Share Posted July 29, 2011 (PS v1.3.1) Bonjour, je voudrais rajouter un onglet dans le BO, dans la partie "Commandes". J'ai donc créé un onglet dans Outil >> Onglet. J'ai bien mis "Commandes" dans le champ parent. Et mon nouveau "sous-onglet" apparait bien dans la liste des "sous-onglets" sous l'onglet "Commandes". Par contre, quand je clique dessus, il me met "onglet inexistant". Donc je me doute qu'il faut maintenant créer des fichiers Php ( et .tpl ?) correspondant à ce nouveau "sous-onglet". Mais je ne sais pas à quel niveau J'aimerais dans ce sous-onglet créer quelque chose du même style que ce qu'il y a dans le sous-onglet "Adresses" ( dans l'onglet "Clients"). J'ai vu qu'il y a un fichier address.php à la racine du site, et un autre address.php dans le dossier Classes. Dois-je créer 2 fichiers .Php correspondant au nouveau sous-onglet ? Et quels autres fichiers dois-je créer (ou modifier) ? Et quels noms doivent porter ces ficheirs .php ? (car pour les adresses clients le nom de l'onglet est "adresses" mais c'est adress.php, et pas adresses.php...) En espérant être (relativement) clair sur ce que je cherche Merci Link to comment Share on other sites More sharing options...
alain56 Posted July 30, 2011 Author Share Posted July 30, 2011 (PS v1.3.1) (Ok, je viens de trouver un post détaillant les fichiers .php à créer, à savoir 1 fichier AdminXXX/tabs/Adminxxxxx.php et 1 fichier classes/xxxxx.php) Maintenant, j'aimerai que mon nouveau sous-onglet ( que j'ai appelé Expedition) soit dans la même lignée que le sous-onglet "adresses" dans l'onglet "Clients". J'ai donc créé ce sous-onglet Expedition dans Outils>>Onglets Ensuite, j'ai dupliqué les fichiers AdminXXX/tabs/AdminAdresses.php ainsi que classes/Address.php, que j'ai renommé en AdminXXX/tabs/AdminExpeditions.php ainsi que classes/Expedition.php Et j'ai fait les modifs suivantes dans chacun de ces fichiers : => fichier AdminXXX/tabs/AdminExpeditions.php L16 : class AdminAddresses extends AdminTab L26 : $this->className = 'Address'; devient L16 : class AdminExpeditions extends AdminTab L26 : $this->className = 'Expedition'; (P.S : pour la ligne 26, si je laisse 'Address' au lieu de 'Expedition', cela marche aussi, donc je ne sais pas si c'est une bonne chose de modifier ça aussi ??? ) => fichier classes/Expedition.php L15 : class Address extends ObjectModel devient L15 : class Expedition extends ObjectModel Donc, une fois ces changements faits, cela marche : je récupère bien toutes les adresses clients dans ce nouveau sous-onglet "Expedition". Par contre, ce que je veux précisément, ce ne sont pas les adresses clients, mais les adresses de livraison des commandes dont le statut est à "paiement accepté" et "Retour marchandise" ( chez moi : id_order_state = '2' et '14') Et c'est là que ça coince ! Il faut pour cela que je modifie la requête Ligne 175 du fichier AdminXXX/tabs/AdminAdresses.php (cad AdminExpeditions.php chez moi) : /* Query in order to get results with all fields */ $this->_list = Db::getInstance()->ExecuteS(' SELECT a.*'.($this->lang ? ', b.*' : '').(isset($this->_select) ? ', '.$this->_select.' ' : '').' ...... LIMIT '.intval($start).','.intval($limit)); ...mais je ne vois pas comment modifier cette requête pour obtenir ce que je veux. Le problème est que dans la table ps_adresse, il n'existe pas de clé étrangère permettant d'obtenir le statut (logique, je sais). Il faut donc passer par la table ps_orders, et c'est là que ça se complique Il faut récupérer les statuts les plus récents, pour les comparer aux statuts désirés (cad "paiement accepté" et "retour marchandise") mais je ne vois comment faire ça en SQL...J'ai bien essayé de partir de la requête utilisé pour afficher les commandes, qui se trouve dans la fonction "__construct()" du fichier AdminXXX/tabs/AdminOrders.php : public function __construct() { global $cookie, $currentIndex; $this->table = 'order'; $this->className = 'Order'; $this->view = true; $this->colorOnBackground = true; $this->_select = ' a.id_order AS id_pdf, CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) AS `customer`, osl.`name` AS `osname`, os.`color`, IF((SELECT COUNT(so.id_order) FROM `'._DB_PREFIX_.'orders` so WHERE so.id_customer = a.id_customer AND so.valid = 1) > 1, 0, 1) as new, (SELECT COUNT(od.`id_order`) FROM `'._DB_PREFIX_.'order_detail` od WHERE od.`id_order` = a.`id_order` GROUP BY `id_order`) AS product_number'; $this->_join = 'LEFT JOIN `'._DB_PREFIX_.'customer` c ON (c.`id_customer` = a.`id_customer`) LEFT JOIN `'._DB_PREFIX_.'order_history` oh ON (oh.`id_order` = a.`id_order`) LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (os.`id_order_state` = oh.`id_order_state`) LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = '.intval($cookie->id_lang).')'; $this->_where = 'AND oh.`id_order_history` = (SELECT MAX(`id_order_history`) FROM `'._DB_PREFIX_.'order_history` moh WHERE moh.`id_order` = a.`id_order` GROUP BY moh.`id_order`)'; $statesArray = array(); $states = OrderState::getOrderStates(intval($cookie->id_lang)); foreach ($states AS $state) $statesArray[$state['id_order_state']] = $state['name']; $this->fieldsDisplay = array( 'id_order' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25), 'new' => array('title' => $this->l('New'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'filter_key' => 'new', 'tmpTableFilter' => true, 'icon' => array(0 => 'blank.gif', 1 => 'news-new.gif'), 'orderby' => false), 'customer' => array('title' => $this->l('Customer'), 'widthColumn' => 160, 'width' => 140, 'filter_key' => 'customer', 'tmpTableFilter' => true), 'total_paid' => array('title' => $this->l('Total'), 'width' => 70, 'align' => 'right', 'prefix' => '<b>', 'suffix' => '</b>', 'price' => true, 'currency' => true), 'payment' => array('title' => $this->l('Payment'), 'width' => 100), 'osname' => array('title' => $this->l('Status'), 'widthColumn' => 250, 'type' => 'select', 'select' => $statesArray, 'filter_key' => 'os!id_order_state', 'filter_type' => 'int', 'width' => 200), 'date_add' => array('title' => $this->l('Date'), 'width' => 90, 'align' => 'right', 'type' => 'datetime', 'filter_key' => 'a!date_add'), 'id_pdf' => array('title' => $this->l('PDF'), 'callback' => 'printPDFIcons', 'orderby' => false, 'search' => false)); parent::__construct(); } mais je ne comprends pas "vraiment" le fonctionnement de cette requête. Et même en mettant un : echo $this->_select; pour afficher la requête en SQL, cela m'affiche une requête non-viable...Elle n'et pas acceptée dans PhpMyAdmin Donc, si une âme charitable, et surtout spécialiste du SQL et de la base de données Prestashop , pouvait me donner un "petit" coup de main sur ce coup là, ce serait vraiment sympa ! Merci Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now