Jump to content

Ajouter onglet BO


Recommended Posts

Salut tous le monde :)

 

Je galère pour ajouter tout simplement un onglet et du contenu dans celui ci dans le BO de prestashop.

 

Voici le début de la fonction install() de mon module qui m'ajoute bien un onglet dans ma partie admin.

	public function install()
	{
	
	
	$parent_tab = new Tab();
	// Need a foreach for the language
	$parent_tab->name[$this->context->language->id] = $this->l('Evenements');
	$parent_tab->class_name = 'AdminMyModule';
	//Id 0 car il s'agit d'un onglet parent
	$parent_tab->id_parent = 0; // Home tab
	$parent_tab->module = $this->name;
	$parent_tab->add();


$tab->module = $this->name;
	  if (Shop::isFeatureActive())
		Shop::setContext(Shop::CONTEXT_ALL);

Quand je clic dessus j'ai un message comme quoi je n'ai pas de controleur.

J'ai donc mis ce code :

 

\controllers\admin   AdminMyModule.php

<?php
class AdminMyModuleController extends ModuleAdminController
{
	 public function __construct()
	{ 
		parent::__construct();
		
		$this->context->smarty->assign(
			array(
				'my_module_message' => $this->l('This is a simple text message')
			)
		);
		 
		return $this->display(__FILE__, 'AdminMyModule.tpl');
	}
}

?>

\views\templates\admin     AdminMyModule.tpl

HEYY!

<h2>HOOHOOO</h2>

Mais là, il je n'ai qu'une page toute blanche !!

Et si j'enlève la ligne return $this->display(__FILE__, 'AdminMyModule.tpl'); j'ai juste un onglet vide.

 

 

Une idée ??

 

Un grand merci d'avance !! :)

Link to comment
Share on other sites

Salut tous le monde :)

 

Je galère pour ajouter tout simplement un onglet et du contenu dans celui ci dans le BO de prestashop.

 

Voici le début de la fonction install() de mon module qui m'ajoute bien un onglet dans ma partie admin.

	public function install()
	{
	
	
	$parent_tab = new Tab();
	// Need a foreach for the language
	$parent_tab->name[$this->context->language->id] = $this->l('Evenements');
	$parent_tab->class_name = 'AdminMyModule';
	//Id 0 car il s'agit d'un onglet parent
	$parent_tab->id_parent = 0; // Home tab
	$parent_tab->module = $this->name;
	$parent_tab->add();


$tab->module = $this->name;
	  if (Shop::isFeatureActive())
		Shop::setContext(Shop::CONTEXT_ALL);

Quand je clic dessus j'ai un message comme quoi je n'ai pas de controleur.

J'ai donc mis ce code :

 

\controllers\admin   AdminMyModule.php

<?php
class AdminMyModuleController extends ModuleAdminController
{
	 public function __construct()
	{ 
		parent::__construct();
		
		$this->context->smarty->assign(
			array(
				'my_module_message' => $this->l('This is a simple text message')
			)
		);
		 
		return $this->display(__FILE__, 'AdminMyModule.tpl');
	}
}

?>

\views\templates\admin     AdminMyModule.tpl

HEYY!

<h2>HOOHOOO</h2>

Mais là, il je n'ai qu'une page toute blanche !!

Et si j'enlève la ligne return $this->display(__FILE__, 'AdminMyModule.tpl'); j'ai juste un onglet vide.

 

 

Une idée ??

 

Un grand merci d'avance !! :)

Vous avez regardé la classe ModuleAdminController ?

	public function createTemplate($tpl_name)
	{
		if (file_exists(_PS_THEME_DIR_.'modules/'.$this->module->name.'/views/templates/admin/'.$tpl_name) && $this->viewAccess())
			return $this->context->smarty->createTemplate(_PS_THEME_DIR_.'modules/'.$this->module->name.'/views/templates/admin/'.$tpl_name, $this->context->smarty);
		elseif (file_exists($this->getTemplatePath().$this->override_folder.$tpl_name) && $this->viewAccess())
			return $this->context->smarty->createTemplate($this->getTemplatePath().$this->override_folder.$tpl_name, $this->context->smarty);
		return parent::createTemplate($tpl_name);
	}

	/**
	 * Get path to back office templates for the module
	 *
	 * @return string
	 */
	public function getTemplatePath()
	{
		return _PS_MODULE_DIR_.$this->module->name.'/views/templates/admin/';
	}

Donc créez votre template dans votre_module/views/templates/admin/ et utlisez  $this->createTemplate('AdminMyModule.tpl')

Link to comment
Share on other sites

Edit:

Si vous voulez juste que l'onglet renvoie vers la page de config de votre module:

class MyModuleController extends AdminController
{
	public function __construct()
	{
		parent::__construct();	
		 	
		$this->lang = false;
		$this->context = Context::getContext();
		Tools::redirectAdmin('index.php?controller=AdminModules&token='.Tools::getAdminTokenLite('AdminModules').'&configure=mymodule&tab_module=content_management&module_name=mymodule');
	}
}
Link to comment
Share on other sites

Merci de votre réponse !!

 

J'ai effectivement pas encore le réflexe d'aller voir la classe mère. Merci de ce conseil !

 

La redirection marche très bien mais ce n'est pas ce que je cherche. Votre premier message est parfait :)

Cependant le fichier TPL n'est toujours pas lié.

J'ai juste mis ce code dans mon controleur :

<?php
class AdminMyModuleController extends ModuleAdminController
{
	public function __construct()
	{ 
		parent::__construct();	
		$this->createTemplate('AdminMyModule.tpl');
	}
}
?>

Et je vous ai mis l'emplacement en capture d'écran de mes 2 fichiers. Normalement ils sont bons.

 

Je ne vois pas pourquoi rien ne s'affiche.

Une idée ?

Encore merci d'avance Eolia !! :)

post-819631-0-53512900-1408617227_thumb.png

post-819631-0-33576400-1408617228_thumb.png

Link to comment
Share on other sites

En fait c'est normal comme cela, car tu dois utiliser renderview et renderform si tu veux voir quelquechose.

Les onglets de l'admin cherchent des templates de l'admin.

Donc soit tu copies ton tpl à la racine de ton thème admin,soit tu utilises les renders.

 

Un code qui marche mais qui n'est pas vraiment dans la logique Presta:

<?php

class AdminMyModuleController extends AdminController
{
	public function initContent()
	{
	
		$this->display = 'view';
		
		return parent::initContent();
		
	}
	public function renderView()
	{		
		$content = $this->displayTpl();		
			
		return parent::renderView().$content;
	}
	
	public function initToolbarTitle()
	{
		$this->toolbar_title = array_unique($this->breadcrumbs);
	}

	
	public function displayTpl()
	{
	
		$tpl = $this->context->smarty->createTemplate(_PS_MODULE_DIR_.'mymodule/views/admin/AdminMyModule.tpl');
		$tpl->assign(array(
				'test' => 'test',
			));

		return $tpl->fetch();
	}
}
?>
Edited by Eolia (see edit history)
  • Like 1
Link to comment
Share on other sites

Au top !! Tu gères !!

Je précise que c'est mymodule/views/templates/admin/AdminMyModule.tpl pour les suivants :)

 

Je profite de ta bonté et de ton savoir-faire pour te demander 2 choses :

1) Est ce que la méthode de création de l'onglet et la meilleurs ? (Facilement adaptable pour les sous-onglets par exemple ?)

2) Sais-tu désinstaller un onglet si on supprime le module. Il y a une méthode ou il faut taper comme une brute dans la BDD ?

 

 

Encore merci pour ta solution et pour tes réponses !! :)

Link to comment
Share on other sites

Bon c'est mon jour de bonté :)

<?php
class Mymodule extends Module
{
	
	public function __construct()
	{
		global $currentIndex;

		$this->name = 'mymodule';
		$this->tab = 'others';

		$this->version = '1.0';
		$this->author = 'Eolia';

		parent::__construct();

		$this->displayName = $this->l('My Module');
		$this->description = $this->l('Test for creating module with admin tabs');
		$this->confirmUninstall = $this->l('Are you sure you will delete this wonderful module ?');
		$this->context = Context::getContext();

	}

	public function install()
	{

	// Install Tabs
		$parent_tab = new Tab();
		$parent_tab->name[$this->context->language->id] = $this->displayName;
		$parent_tab->class_name = 'AdminMainMyModule';
		$parent_tab->id_parent = 0; // Home tab
		$parent_tab->module = $this->name;
		$parent_tab->add();
		
		
		$tab = new Tab();		
		$tab->name[$this->context->language->id] = $this->l('Sub menu');
		$tab->class_name = 'AdminMyModule';
		$tab->id_parent = $parent_tab->id;
		$tab->module = $this->name;
		$tab->add();

	if( !parent::install())
		return false;

	return true;

	}
	
	public function uninstall()
	{
		// Uninstall Tabs
		$id_tabs = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS("SELECT id_tab FROM `"._DB_PREFIX_."tab` WHERE `module` = '".$this->name."'");

		foreach ($id_tabs as $id_tab) {
			$tab = new Tab((int)$id_tab['id_tab']);
			$tab->delete();
		}
		
		// Uninstall Module
		if (!parent::uninstall())
			return false;
			

		return true;
	}
}

Après, l'histoire des onglets c'est un choix, mais il plus simple de se greffer sur une catégorie existante. En effet Presta est fait pour ça et les méthodes sont adaptées aux modules. Si te greffes dans l'admin il faut qu'il y ait une raison...

Rien ne t'empêche ensuite de créer des onglets en jquery au sein de ton module

  • Like 1
Link to comment
Share on other sites

Bon puisque c'est ton jour de bonté je vais en abuser :P

 

J'espère que ca va pas polluer le début du topic mais je me lance :

 

Comment je fais pour rajouter dans mon controller un renderForm associé à mon template ?

Donc d'utiliser mon template AdminMyModule.tpl et de rajouter à un endroit précis un tableau regroupant des données d'une table (un peu comme le tableau des produits mais en plus simple)

 

Il faut redéfinir form.tpl si j'ai bien compris mais cette variable n'existe plus dans mon controller :$this->name...

Bref je suis un peu perdu...

 

Il y a un sujet pas mal sur le forum mais je suis quand même complétement pommé. C'est la première fois que je me lance dans les renderForm() parce que ca ) l'air cool :)

Sur le sujet il conseil de rajouter ça et d'overider mon TPL en plaçant dans views/templates/admin/NOM_DE_LA_TABLE/helpers/form/form.tpl avec NOM_DE_LA_TABLE = $this->table du constructeur de ton ModuleAdminController

$helper->base_folder = 'helpers/form/'; //Indique le chemin vers le dossier contenant ton tpl
$helper->base_tpl = 'form.tpl'; //Indique le nom de ton tpl

Mais il utilise la fonction createTemplate () : $tpl = $this->createTemplate('form_several_images.tpl');

 

 

Bref je suis perdu et je vois pas comment ajouter un renderForm() au .tpl que tu as déjà réussi à lier au controller.

 

 

Encore un grand merci d'avance pour toutes tes solutions !! :)

Link to comment
Share on other sites

Ben si tu utilises les helpers et renders tu n'as plus besoin de ma modif :)

 

Tu écris ta fonction renderview et renderform et tu lui associes ton tpl :)

$helper->base_folder = _PS_MODULE_DIR_ . 'mymodule/views/admin/templates/'; //Indique le chemin vers le dossier contenant ton tpl
$helper->base_tpl = 'AdminMyModule.tpl'; //Indique le nom de ton tpl
Link to comment
Share on other sites

Ben non c'est fait pour ça:

'input' => array(
					
					array(
						'type' 	=> 'text',
						'label' => $this->l('Minimum number of products :'),
						'name' 	=> 'product_length',
						'desc'  => $this->l('Minimal products required for all activated shop'),
						'align' => 'text-center',
						'class' => 'fixed-width-xs',  
						'required' => true
					),

Vous assignez vos classes ou vos styles imbriqués

Link to comment
Share on other sites

Ouai mais un modal sous boostrap ca ressemble à ca :

<!-- Button trigger modal -->
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
        <h4 class="modal-title" id="myModalLabel">Modal title</h4>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

On est foutu là non ? ^^

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