Jump to content

ModuleAdminController sans ObjectModel


Recommended Posts

Bonjour à tous,

j'ai développé un module Prestashop qui me permet de configurer moi-même des paramètres assez divers dans ma boutique (slogans, titres, paragraphes etc...). J'ai réussi à créer un tab dans le menu du back-office qui affiche un controller admin.

Problème : je n'ai absolument pas besoin d'un ObjectModel mais Prestashop semble refuser de me laisser soumettre des formulaires dans mon controlleur, voici comment j'affiche mon formulaire :

<?php

class AdminMasocieteController extends ModuleAdminController
{
  
// Données fictives ... mais toujours la même erreur
static $definition = array(
	'table' => 'fake_table',
	'primary' => 'id_fake',
	'multilang' => TRUE,
	'fields' => array(
	)
);

/**
* @see ModuleAdminController::__construct()
* @return none
*/

public function __construct()
{
	$this->bootstrap = true;
	$this->meta_title[] = 'Module Masociete';
	$this->toolbar_title[] = 'Module Masociete';
	$this->className = 'Masociete';
	$this->name = 'Masociete';
	$this->defaultLang = (int)Configuration::get('PS_LANG_DEFAULT');
	parent::__construct();
}

/**
* @see ModuleAdminController::initContent()
* @return mixed
*/

public function initContent()
{
	parent::initContent();
	$this->context->smarty->assign(array(
		'content' => $this->content . $this->context->smarty->fetch(_PS_MODULE_DIR_ . 'masociete/views/templates/admin/admin.tpl')
	));
}

/**
* Render forms
* @return array
*/

public function renderForm()
{
	
	$helper = new HelperForm();
	$helper->module = $this->module;
	$helper->identifier = $this->className;
	$helper->token = Tools::getAdminTokenLite('Admin'.$this->name);
	$helper->languages = $this->_languages;
	$helper->currentIndex = $this->context->link->getAdminLink('Admin'.$this->name);
	$helper->default_form_language = $this->defaultLang;
	$helper->allow_employee_form_lang = $this->defaultLang;
	
	$fields[0]['form'] = [
		'input' => [
			[
				'type' => 'text',
				'label' => ' Titre du bloc',
				'name' => 'titre_du_bloc'
			]
		],
		'submit' => [ 'title' => 'Sauvegarder', 'class' => 'btn btn-default pull-right' ]
	];
	
	$helper->fields_value['titre_du_bloc'] = 'Voilà un titre fictif.'
	return $helper->generateForm($fields);
}

(j'ai raccourci pour ne pas vous polluer avec les fonctions inutiles dans l'exposé de mon problème ici)

Le formulaire s'affiche bien, mais quand je le submit je tombe sur une erreur qui semble en rapport avec le $definition qui sert à donner des informations sur le modèle à utiliser. Hors je n'en ai pas et je n'en veux pas, ce qui ne me semble pas impossible à faire étant donné tous les modules Prestashop que je vois et qui utilisent des controller admin pour générer leur page de configuration.

J'ai essayé de donner des informations fictives, en vain.

Comment faire alors ? Suis-je obligé de passer par le bouton "Configuration" de mon module pour arriver à mes fins ? Je l'ai déjà fait dans le cadre d'un autre module mais étant donné que l'on ne peut ni personnaliser le template ni accrocher un tab, je préférerais passer par un controlleur admin.

Merci d'avance pour votre aide !

Sans titre.jpg

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

  • 2 weeks later...

Hello,

Pour gérer l'enregistrement dans un AdminController sans ObjectModel, il faut override les méthodes processAdd / processUpdate (et sans appeler parent::process{Add|Update} dedans sinon la même erreur sera levée) et dans ces méthodes mettre ton code qui enregistre tes valeurs de ton form, par exemple:

Configuration::updateValue('titre_du_bloc', Tools::getValue('titre_du_bloc');

 

 

  • Thanks 1
Link to comment
Share on other sites

6 hours ago, DelecroixQuentin said:

Hello,

Pour gérer l'enregistrement dans un AdminController sans ObjectModel, il faut override les méthodes processAdd / processUpdate (et sans appeler parent::process{Add|Update} dedans sinon la même erreur sera levée) et dans ces méthodes mettre ton code qui enregistre tes valeurs de ton form, par exemple:


Configuration::updateValue('titre_du_bloc', Tools::getValue('titre_du_bloc');

 

 

Niquel ! Merci pour ton aide !

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