Jump to content

[Débuggé] Ajout menu dans le BO via module - Problème structure ou icon non affichée


Recommended Posts

Bonjour à tous,

 

J'ai un petit problème à vous soumettre, car je n'ai pas trouvé de solution dans le forum, dans le doc ou sur le web pour le moment.

 

Je viens de créer un module, pour lequel j'ai besoin d'ajouter un menu avec sous-menu dans le BO.

Comme pour les autres menu principaux de PrestaShop, le menu que j'ajoute doit disposer d'une icône sur sa gauche.

 

En version 1.6 pas de problème, l'implémentation ce fait par css.

 

En version 1.5 l'implémentation se fait par l'ajout d'un fichier .gif et c'est là que j'ai le petit soucis suivant :

 

- Si je place le .gif  à la racine de mon module l'icône est bien affichée, mais je me retrouve avec un message d'erreur de structure lorsque que je le soumet au validateur.

 

- Si je place le . gif dans un répertoire /img ou /img/t de mon module, je n'ai plus de message d'erreur de structure lorsque que je le soumet au validateur, mais l'icon ne s'affiche plus,

 

Ou dois-je placer ce .gif dans mon module pour que mon icon soit affichée et que mon module soit validé sans erreur ?

 

Merci d'avance pour votre aide.

Edited by Crokeco (see edit history)
Link to comment
Share on other sites

Oui, mais non.

 

Pour la création du menu, je n'ai nullement besoin de fichier css (sauf en v1.6) ou tpl. En fait, c'est Prestashop qui va chercher lui même les icônes dans le bon répertoire. 

 

En consultant la console du navigateur on remarque qu'il va chercher les icônes de ces menus natifs dans le répertoire img/t à la racine du site et dans le cas de module dans modules/nom_du_module. J'en conclus qu'il y a une incohérence ou bug par rapport à la structure exigée pour la création du module qui neccessite la création de menu dans le BO.

 

A moins que l'on puisse spécifier le chemin via une méthode de la casse tab.php, mais laquelle ?

 

Merci pour votre réponse.

Link to comment
Share on other sites

De savoir là où je suis, n'a pas d'importance, car il s'agit du menu du back office je peux donc me trouver n'importe où dans l'admin.

 

Ce que je sais, c'est que Prestashop génère l'url des icônes du menu qui est affiché grâce au fichier header.tpl qui se trouve dans admin/themes/default/template/ . Je pense qu'en trouvant le contrôler qui assign la variable smarty, me permettra de comprend l'origine du soucis.

Link to comment
Share on other sites

Merci, mais l'override du template ne règlera pas le problème.

 

Au final, il n'y a pas de réponse (solution) à ma première question, car après une analyse un peu plus poussée, il s'agit :

 

- Soit d'un bug de PrestaShop en version 1.5

- Soit d'un bug du validateur de module lorsqu'il check  la structure du module.

 

 

A mon sens, le bug vient plus de la version 1.5 de PrestaShop.

 

Je m'explique, l'assignation des variables smarty pour le fichier header.tpl (qui génère l'affichage du menu en BO) est assurée par la méthode initHeader() du contrôleur AdminController.php. C'est dans ce dernier que le chemin vers le fichier de l'icône est généré. Lorsqu'il s'agit d'un élément du menu construit depuis un module, le contrôleur génère le chemin sur la base du répertoire des modules, du nom du module, mais sans ajouter le répertoire /img qu'exige le validateur de module. Comme le montre l'extrait de code ci-dessous (vers ligne 1360) :

if (trim($tab['module']) != '')
{
	$path_img = _PS_MODULE_DIR_.$tab['module'].'/'.$tab['class_name'].'.png';
	// Relative link will always work, whatever the base uri set in the admin
	$img = '../modules/'.$tab['module'].'/'.$tab['class_name'].'.png';
}

Dans lequel, il conviendrai d'ajouter img/ dans la variable $img :

if (trim($tab['module']) != '')
{
	$path_img = _PS_MODULE_DIR_.$tab['module'].'/'.$tab['class_name'].'.png';
	// Relative link will always work, whatever the base uri set in the admin
	$img = '../modules/'.$tab['module'].'/img/'.$tab['class_name'].'.png';
}

En résumé la solution ou plutôt le choix d'une "rustine" peut se faire :

 

- Soit par un override de la méthode initHeader() du contrôleur AdminController.php, mais au risque de déplacer la problématique sur d'autre module qui aurait contournés ce bug d'une autre manière.

- Soit d'intégrer une petit bout de code en javascript pour modifier le chemin après le chargement des pages du BO.

- Soit de laisser l'image à la racine du répertoire du module et ignorer le message d'erreur du validateur de module.

 

Je pense que je vais opter pour le choix 3...

 

Du coup, je réfléchi à comment je vais modifier le titre de mon Topic [Résolu] ou [Débuggé]...

 

Merci d'avoir essayé de trouver une solution à mon petit soucis.

Edited by Crokeco (see edit history)
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...