Jump to content

Problème ajout d'un onglet dans le BO


Recommended Posts

Bonjour,

 

Je viens vers vous car je n'arrive pas à créer un nouvel onglet dans le backoffice de prestashop.

J'ai bien suivi la doc, cependant, rien ne s'affiche.

 

A la différence de la démonstration de la doc, je ne souhaite pas lié cet onglet à un module.

 

Voila ce que j'ai fais actuellement :

 

ETAPE 1 : Création de Ticket.php dans /classes/

 

<?php
class Ticket extends ObjectModel
{
echo "test";
}

 

ETAPE 2 : Création de AdminTicket.php dans admin/tabs/

 

<?php
include_once(PS_ADMIN_DIR.'/../classes/AdminTab.php');

class AdminTicket extends AdminTab
{
 public function __construct()
 {
parent::__construct();
 }
 public function displayForm()
 {
echo "test";
 }
}

 

ETAPE 3 : Création de la tab dans le BO

 

mini_26213516my.png

 

Merci d'avance de votre aide.

Link to comment
Share on other sites

Mais je crois que la doc n'est pas tout a fait à jour.

 

Moi j'ai suivi un tuto génial pour cela et cela fonctionne très bien :http://www.prestarocket.com/blog/creer-module-mvc-prestashop-1-5/

La partie back office est très claire.

 

En plus si tu veux tu peux automatiser à l'installation du module la création de l'onglet pour cela suivre :

 

$tab = new Tab();
 $id_parent = Tab::getIdFromClassName('AdminCatalog');

 $tab->name = 'ici le nom';
 $tab->class_name = 'AdminNomClass';
 $tab->id_parent = $id_parent;
 $tab->module = $this->name;
 $tab->add();

 

cela est un exemple pour le retrouver dans la liste catalogue... je me rappelle plus où j'ai trouvé l'exemple

 

pour supprimer ... A la désinstallation

$tab = new Tab((int)Tab::getIdFromClassName('AdminNomClasse'));
 $tab->delete();

Link to comment
Share on other sites

Oui je ne sais pas :s

Je m'arrache les cheveux depuis deux jours.

 

Actuellement, j'ai un onglet supplémentaire et j'ai mon controller : controllers/admin/AdminTicketController.php

 

<?php

class AdminTicketController extends AdminController
{
public function __construct()
{
 parent::__construct();
}
}

 

Si je fais ça, j'ai bien l'affichage de test mais dans une page vide, sans le menu d'administration :

 

public function display()
{
 echo "test";
}

 

La question, doit-on utiliser une fonction displayQuelqueChose() pour pouvoir afficher notre désir dans le contenu ?

Ou alors doit faire en sorte d'appeler un

$this->setTemplate(_PS_THEME_DIR_.'ticket.tpl');

?

Link to comment
Share on other sites

Oui j'ai regarder, mon problème c'est qu'il n'affiche pas ce que je veux dans le contenu.

 

class AdminTicketController extends AdminController
{
public function __construct()
{
 parent::__construct();
}
public function initContent()
{
 echo "Je suis ici";
}
}

 

Voilà ce que ça rend ...

 

404262Capturedcran20130111100748.png

 

Je comprend pas que ça soit si compliqué pour juste ajouter un onglet dans le backoffice et effectuer les traitements voulus ...

Ou alors, qu'il y ai une documentation claire :s Ajouter un onglet dans le BO (sans utiliser de module), ca me parait pas dingue comme demande.

 

En tout cas, si quelqu'un à une info, je suis preneur. Merci d'avance

Link to comment
Share on other sites

Yes, le renderList() fonctionne bien en renvoi de valeur. Cependant je me vois mal afficher tout mon HTML, javascript etc, dans une seule variable private que je return.

 

Sinon, j'ai un peu décortiqué la chose et pour afficher les données d'une table de prestashop il suffit de faire :

 

$this->table = 'contact';
  $this->className = 'Contact';
  $this->lang = true;
 $this->addRowAction('edit');
 $this->addRowAction('delete');
  $this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?')));
 $this->fields_list = array(
  'id_contact' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
  'name' => array('title' => $this->l('Title'), 'width' => 130),
  'email' => array('title' => $this->l('E-mail address'), 'width' => 130),
  'description' => array('title' => $this->l('Description'), 'width' => 150),
 );

 

La fonction renderForm(), permet la modification si $this->addRowAction('edit'); est ajouté.

 

Du coup, j'affiche et modifie bien mes informations en base et c'est ce que je voulais faire.

Mon problème est donc résolu.

 

Cependant ça ne règle pas le souci de pouvoir écrire "ce que l'on veut" en HTML, CSS et pouvoir effectuer des traitement en PHP MYSQL. Enfin si, en renvoyant une valeur au renderList() ...

 

En tout cas GRAND MERCI à toi franckm1000, tu m'as bien aidé !

Link to comment
Share on other sites

Cependant je me vois mal afficher tout mon HTML

 

Et pourquoi pas !

 

Quand je programme un module dans la fonction getContent() j'utilise toujours la syntaxe suivante:

$this->output='...';
//traitement PHP par exemple;
$this->output.='...';
//traitement divers;
$this->output.='...';
return $output;

Edited by franckm1000 (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...