Jump to content

Creazione modulo in amministrazione


Madsex

Recommended Posts

Salve, come capirete da titolo vorrei creare un modulo che compaia in amministrazione.

 

In particolare vorrei avere un tab ( e magari anche qualche sotto tab ) che mi mandino alle pagine del modulo.

 

Per il menù ho visto che si possono creare delle voci dal link amministrazione > Menù ma non riesco a capire come collegare il modulo che ho creato ( è attivo e innestato in backofficeheader ) ai link del menù.

 

Ho letto un po' di guide ma non trovo come linkare il menù a uno o più .tpl del mio modulo, chiaramente conservando anche le colonne laterali e superiori tipiche dell'amministrazione di prestashop.

 

Potreste darmi un aiutino?

 

Grazie

Link to comment
Share on other sites

Si sicuramente  è così ma mi mancano dei punti, tipo come richiamare il template customizzato e come passare i dati mi servirebbe almeno un esempio chiaro, ne ho trovato uno online che funziona ma stò cercando di capire come adattarlo alle mie esigenze, perchè questo crea una tabella nel database e nn si capiscono le chiamate ad alcune classi che nn trovo nei file.

 

Se volete darmi una mano:

 

https://github.com/PrestaEdit/Canvas-Module-Prestashop-15

 

Grazie in anticipo !

Link to comment
Share on other sites

Breve esempio (preso dal link che hai postato, il file del modulo):

public function displayForm()
	{
		$this->context->smarty->assign('request_uri', Tools::safeOutput($_SERVER['REQUEST_URI']));
		$this->context->smarty->assign('path', $this->_path);
		$this->context->smarty->assign('EXAMPLE_CONF', pSQL(Tools::getValue('EXAMPLE_CONF', Configuration::get('EXAMPLE_CONF'))));
		$this->context->smarty->assign('submitName', 'submit'.Tools::ucfirst($this->name));
		$this->context->smarty->assign('errors', $this->errors);
		// You can return html, but I prefer this new version: use smarty in admin, 
		return $this->display(__FILE__, 'views/templates/admin/configure.tpl');
	}

$this->context->smarty->assign() ti consente di aggiungere variabili per il template, mentre il metodo display visualizza il file del template

Link to comment
Share on other sites

Grazie per il suggerimento, in effetti io uso smarty e assign già in altri miei moduli, il problema è arrrivare a quel punto, secondo te dove sbaglio qui?

 

 

<?php
if (!defined('_PS_VERSION_'))
exit;

require(dirname(__FILE__) . '/gcbulk_header.class.php');

class gcbulk extends Module {

private $page_name = '';

public function __construct() {
$this->name = 'gcbulk'; // il nome del modulo (lo stesso del file principale)
$this->tab = 'others'; // sezione in cui va inserito
$this->version = 0.1;
$this->author = 'Autore';
$this->need_instance = 0;
/*
* need_instance specifica se un istanza del modulo deve essere caricata
* quando viene visualizzata la lista dei moduli
(di norma può essere lasciato a 0) 
*/

parent::__construct();

$this->displayName = $this->l('Bulk');
$this->description = $this->l('Modulo Bulk');

$this->context->controller->addCSS(($this->_path).'gcbulk.css', 'all');
//$this->context->controller->addJS(($this->_path).'js/gc_bulk_script.js');

}

public function install() {

// Install Tabs
$parent_tab = new Tab();
// Need a foreach for the language
$parent_tab->name[$this->context->language->id] = $this->l('Bulk tab');
$parent_tab->class_name = 'AdminGcbulk';
$parent_tab->id_parent = 0; // Home tab
$parent_tab->module = $this->name;
$parent_tab->add();

return parent::install() && $this->rendering();
}

public function uninstall() {
// Uninstall Tabs
$tab = new Tab((int)Tab::getIdFromClassName('AdminGcbulk'));
$tab->delete();

// Uninstall Module
if (!parent::uninstall())
return false;
return true;
}

public function rendering(){
return $this->display(__FILE__, 'views/templates/admin/gcbulk.tpl');
}
}
?>

 

in pratica non viene per nulla ritornato il template gcbulk.tpl

 

Grazie in anticipo !

Link to comment
Share on other sites

no allora per visualizzare il tasto configura devi creare un metodo initContent()

 

Per questo codice:
$this->context->controller->addCSS(($this->_path).'gcbulk.css', 'all');
//$this->context->controller->addJS(($this->_path).'js/gc_bulk_script.js');

 

devi utilizzare gli hook del backend in modo che li posiziona correttamente. (http://doc.prestashop.com/display/PS16/Managing+Hooks)

Link to comment
Share on other sites

Mha guarda che al momento di avere un tasto di configurazione del modulo nn mi interessa francamente.In pratica al momento vorrei che una volta caricato il modulo mi appaia un tab laterale al menù dell'amministrazione e una volta cliccato su questo tab l'utente atterra in una pagina da me creta con il template gcbulk.tpl .

 

Per ora cerco di fare questo ma non riesco a rendere visibile il tempplate.

 

Suggerimenti ?

 

Grazie in anticipo !

 

PS: cmq il css viene caricato se entro nella mia pagina custom ( non vede il template ma legge il css ).

Link to comment
Share on other sites

Ciao Maghetto, scusa il ritardo ma sono stato un po' impegnato.

 

Grazie per la risposta, in effetti l'esempio che mi hai dato è stato molto utile, ecco cosa ho prodotto:

 

AdminGcbulkController.php

 

 

<?php

class AdminGcbulkController extends ModuleAdminController
{
public function __construct()
{
$this->bootstrap = true;
$this->display = 'list';
$this->meta_title = $this->l('testo');
parent::__construct();
if (!$this->module->active)
Tools::redirectAdmin($this->context->link->getAdminLink('AdminHome'));

parent::__construct();
}

public function renderList()
{
$tpl_path = _PS_MODULE_DIR_ .'gcbulk/views/templates/admin/gcbulk.tpl';

$datas = array(
"ciao" => "bho1",
"ciccia" => "bho2"
);

$data = $this->context->smarty->createTemplate($tpl_path)->assign($datas);
return $data->fetch();
}
}

 

gcbulk.php

 

 

<?php
if (!defined('_PS_VERSION_'))
exit;

require(dirname(__FILE__) . '/gcbulk_header.class.php');

class gcbulk extends Module {

private $page_name = '';

public function __construct() {
$this->name = 'gcbulk'; // il nome del modulo (lo stesso del file principale)
$this->tab = 'others'; // sezione in cui va inserito
$this->version = 0.1;
$this->author = 'Autore';
$this->need_instance = 0;
/*
* need_instance specifica se un istanza del modulo deve essere caricata
* quando viene visualizzata la lista dei moduli
(di norma può essere lasciato a 0) 
*/

parent::__construct();

$this->displayName = $this->l('Bulk');
$this->description = $this->l('Modulo Bulk');

$this->context->controller->addCSS(($this->_path).'css/gcbulk.css', 'all');
$this->context->controller->addJS(($this->_path).'js/gcbulk_script.js','all');

}

public function install() {

// Install Tabs
$parent_tab = new Tab();
// Need a foreach for the language
$parent_tab->name[$this->context->language->id] = $this->l('Bulk tab');
$parent_tab->class_name = 'AdminGcbulk';
$parent_tab->id_parent = 0; // Home tab
$parent_tab->module = $this->name;
$parent_tab->add();

if (!parent::install() );
}

public function uninstall() {
// Uninstall Tabs
$tab = new Tab((int)Tab::getIdFromClassName('AdminGcbulk'));
$tab->delete();

// Uninstall Module
if (!parent::uninstall())
return false;
return true;
}
}
?>

 

In praica al momento l'unica cosa che nn va è la chiamata al file gcbulk_script.js che pur essendo inserito nell'header viene però piazzato prima della chiamata a jquery, rendondo vani gli script che voglio creare. Ho fatto un sacvco di ricerche ma nn riesco a capire come metterlo sotto a tutto a meno di piazzare la chiamata nel template.

 

Mi daresti quest'ultimo aiutino?

 

Grazie

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