Jump to content
mynotore

Récupérer les données d'une table d'un nouveau module pour l'admin

Recommended Posts

Je réalise un module avec la création d'une nouvelle table lors de son installation. Une nouvelle entrée dans le menu de l'admin permet de gérer ces données. Pas de soucis de ce côté là, ni pour lister le contenu de la table via la fonction renderList() de mon controller (modules/monmodule/controlles/admin/AdminMonModuleController.php).
Lorsque j'édite un champ en cliquant sur "Modifier" j'arrive au formulaire de modification mais les champs sont vides. J'utilise renderForm() pour générer le formulaire mais je ne comprends pas comment je peux récupérer les valeurs.
A priori c'est lorsqu'on crée l'objet $obj = $this->loadObject(true).
Sauf qu'il ne semble pas contenir les données que je veux.

Quel est la bonne méthodologie pour arriver à mes fins?

J'utilise Prestashop 1.6.0.11

Share this post


Link to post
Share on other sites

Bonjour,

 

Dans ses cas là le mieux est quand même que tu mettes ce que tu à mis dans renderForm pour qu'on puisse t'aider et voir ou ça cloche

 

voilà quand même un exemple standart :

public function renderForm()
    {
		if (!($obj = $this->loadObject(true)))
			return;
		$this->fields_form = array(
			'legend' => array(
				'title' => $this->l('My title'),				
			),
			'input' => array(
				array(
					'type' => 'text',
					'label' => $this->l('Title :'),
					'name' => 'name',
					'lang' => true,
					'size' => 50
				),
				array(
					'type' => 'hidden',
					'label' => $this->l('Title :'),
					'name' => 'position',
					'size' => 50
				),
				array(
                    'type' => 'hidden',
                    'name' => 'active',
                ),
			),
			'submit' => array(
				'title' => $this->l('Save'),
				'class' => 'button'
			)
		);
	return parent::renderForm();
    }

Share this post


Link to post
Share on other sites


public function renderForm()

{

$this->fields_form = array(

'legend' => array(

'title' => $this->l('Modifier une tranche horaire'),

'image' => '../img/admin/time.gif'

),

'input' => array(

array(

'type' => 'text',

'label' => $this->l("Heure ouverture:"),

'name' => 'hour_begin',

'required' => true,

'hint' => sprintf($this->l('Exemple : 18:00:00')),

),

array(

'type' => 'text',

'label' => $this->l('Heure fermeture:'),

'name' => 'hour_end',

'required' => true,

'hint' => sprintf($this->l('Exemple : 23:30:00')),

)

),

'submit' => array(

'title' => $this->l('Save'),

)

);

 

if (!($obj = $this->loadObject(true)))

return;

 

//le code suivant génère des Undefined property: Mydelivery::$hour_begin

/*

foreach($this->fields_form["input"] as $inputfield){

$this->fields_value[$inputfield["name"]] = $obj->$inputfield["name"];

}

*/

return parent::renderForm();

}

 

Share this post


Link to post
Share on other sites

il me semble que "bonjour", "merci" ou autres formules de politesse ne sont pas interdit sur ce forum ...

 

 

C'est pas facile avec le peu d'information que tu donnes mais il semblerait que le problème vient plus de ton model

As tu bien déclaré tes champs dans ton model ?

Share this post


Link to post
Share on other sites

Bonjour xmatox et merci pour le temps que tu peux prendre pour te pencher sur mon problème ;)

 

J'ai déclaré mon model mais en effet je ne sais pas trop comment prestashop se sert de ce model.

Je l'ai appelé dans AdminMonModuleController.php mais je ne sais pas si c'est ici qu'il faut le faire :
 

/* Loading Models */
require_once(_PS_MODULE_DIR_.'mydelivery/models/BusinessHours.php');

class AdminBusinessHoursController extends ModuleAdminController
{
....

public function renderForm() [
...
}
}

Mon model  (BusinessHours.php) :

class BusinessHours extends ObjectModel
{
	/** @var string Name */
	public $hour_begin;
	public $hour_end;

	/**
	 * @see ObjectModel::$definition
	 */
	public static $definition = array(
		'table' => 'ps_business_hour',
		'primary' => 'id_business_hour',
		'multilang' => false,
		'multishop' => true,
		'fields' => array(			
			'hour_begin'	=> 		array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 64),
			'hour_end'		=> 		array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 64),
		),
	);

}

A noter que ce module n'a pas à gérer le multilingue (puisque ce sont des heures).

Par contre il doit être multiboutique.

 

Merci.

Share this post


Link to post
Share on other sites

Salut,

 

Tu n'as pas besoin de mettre ça

/* Loading Models */
require_once(_PS_MODULE_DIR_.'mydelivery/models/BusinessHours.php');

normalement la liaison entre ton controller et ton model se fait toute seule si tu as bien nommé tes classes et fichiers

sinon il faut utiliser $this->className = 'BusinessHours'; dans ton __construct() de ton controller.

Mais si tu arrives à avoir bien ta liste, c'est que tu n'as pas de problème à ce niveau.

  • Like 1

Share this post


Link to post
Share on other sites

Merci tu m'as bien mis sur la voie. En effet je n'avais pas mis le bon $this->className dans mon __construct(). Les champs sont désormais pré remplis en édition.

 

Mais la liste qui s'affiche dans mon module n'utilise pas le modèle.

Pour afficher la liste j'utilise le code suivant : 

	public function renderList()
	{
		$this->addRowAction('edit');
		$this->addRowAction('delete');

		$this->simple_header = false;

		$this->bulk_actions = array(
			'delete' => array(
				'text' => $this->l('Delete selected'),
				'confirm' => $this->l('Delete selected items?')
				)
			);

		$this->fields_list = array(
			'hour_begin' => array(
				'title' => $this->l('Heure ouverture'),
				'name' => array('title' => $this->l('Heure ouverture')),
				'width' => 'auto'
			),
			'hour_end' => array(
				'title' => $this->l('Heure fermeture'),
				'width' => 'auto',
			),
		);

		$this->_where = 'AND a.id_shop='.(int)$this->context->shop->id;

		$lists = parent::renderList();

		parent::initToolbar();

		return $lists;
	}

Toutefois maintenant je rencontre un autre problème qui est la mise à jour de mes données.

Lorsque je clique sur "Modifier", le formulaire ne passe pas la valeur.

Si le champ dans mon modèle est facultatif j'ai "update sucessfull" mais sans modification de donnée. Une nouvelle entrée est insérée dans ma table avec des valeurs vides. Pourquoi fait-il un insert au lieu d'un update?

 

C'est un comportement qui me semble très bizarre!

 

Peut-être faudrait-il que j'ouvre un nouveau sujet....

Edited by mynotore (see edit history)

Share this post


Link to post
Share on other sites

bonjour j'aimerais recuperer les donnees d'une table présicement une date dans la table cart-rule de prestashop j'amerais savoir comment je peux faire pour recuperer cette date

j'aimerais la passer en paramètre sur un timer sans etre obliger de prendre cette date chaque fois et la mettre dans mon timer c'est fatiguant et pas pratique du tout 

j'attend vos suuggestions merci 

je veux recuperer la date to et le mettre en paratrre dans le timer 

image.thumb.png.7f78aaf05686ffca9f03aa410b5cee16.pngimage.thumb.png.c27aea4f7b14e68254c9d59216efbcb5.png

image.thumb.png.c44a5c5716eb924c7ed08417207a0421.png

Edited by changa
the request was not completed (see edit history)

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More