Jump to content

Création d'un sous-onglet


Recommended Posts

(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 :huh:

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

(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 ??? :mellow: )

 

=> 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 :blink:

 

 

 

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

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