Jump to content

[Résolu] Override methode renderForm de la classe AdminCategoriesControllerCore


Recommended Posts

Bonjour,

 

J'ai tenté de surcharger la méthode renderForm de la classe AdminCategoriesControllerCore, mais le fait qu'elle retourne en résultat "parent::renderForm();" annule toutes mes modifications car cela veut dire qu'on reexecute la méthode qu'on voulait justement surcharger... Donc quoique je fasse dans ma nouvelle methode renderForm de ma classe AdminCategoriesController cela ne sera pas pris en compte :(

 

Quelqu'un a déjà eu ce souci ? Merci pour votre aide,

 

Styls

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

Bonjour !

 

C'est un cas spécifique, si tu peut ne pas utilisé la surcharge ettu doit donc setter tous tes paramètres dans la méthode renderForm() du fichier surchargé.

 

Voici un exemple qui j'espère te mettra sur une piste :

 


/**
 * AdminController::renderForm() override
 * @see AdminController::renderForm()
 */
public function initFormFeatureValue()
{
 $this->setTypeValue();
 $this->fields_form[0]['form'] = array(
  'legend' => array(
'title' => $this->l('Feature value'),
'image' => '../img/t/AdminFeatures.gif'
  ),
  'input' => array(
array(
 'type' => 'text',
 'label' => $this->l('Value:'),
 'name' => 'value',
 'lang' => true,
 'size' => 33,
 'hint' => $this->l('Invalid characters:').' <>;=#{}',
 'required' => true
),
array(
 'type' => 'select',
 'label' => $this->l('Feature:'),
 'name' => 'id_feature',
 'options' => array(
  'query' => Feature::getFeatures($this->context->language->id),
  'id' => 'id_feature',
  'name' => 'name'
 ),
 'required' => true
)
  ),
  'submit' => array(
'title' => $this->l('   Save   '),
'class' => 'button'
  )
 );
 // Create Object FeatureValue
 $feature_value = new FeatureValue(Tools::getValue('id_feature_value'));
 $this->tpl_vars = array(
  'feature_value' => $feature_value,
 );
 $this->getlanguages();
 $helper = new HelperForm();
 $helper->currentIndex = self::$currentIndex;
 $helper->token = $this->token;
 $helper->table = $this->table;
 $helper->identifier = $this->identifier;
 $helper->override_folder = 'feature_value/';
 $helper->id = $feature_value->id;
 $helper->toolbar_scroll = false;
 $helper->tpl_vars = $this->tpl_vars;
 $helper->languages = $this->_languages;
 $helper->default_form_language = $this->default_form_language;
 $helper->allow_employee_form_lang = $this->allow_employee_form_lang;
 $helper->fields_value = $this->getFieldsValue($feature_value);
 $helper->toolbar_btn = $this->toolbar_btn;
 $helper->title = $this->l('Add a new feature value');
 $this->content .= $helper->generateForm($this->fields_form);
}

 

Ce code est tirée du fichier : controller/admin/AdminFeatureController.php

 

Cordialement,

Loic.

Link to comment
Share on other sites

  • 2 weeks later...

Désole pour le déterrage, mais je suis confronté au même problème mais sans comprendre la solution.

 

Je souhaite ajourd un champ pour définir l'ancre pour le menu de chaque catégorie.

J'ai tenté d'ajouter :

   array(
 'type' => 'text',
 'label' => $this->l('Ancre du menu:'),
 'name' => 'ancre_menu',
 'lang' => true,
 'hint' => $this->l('Forbidden characters:').' <>;=#{}'
   ), 

Dans le renderForm()

controllers/admin/AdminCategoriesController.php

ici c'est OK

 

mais si je l'ajoute en ovverride:

ovverride/controllers/admin/AdminCategoriesController.php

Ca ne fonctionne pas:

 

Je suis tombé sur ce post qui correspond à mon problème mais je comprend pas la solution donné?

Quelqu'un pourrait il détailler?

Link to comment
Share on other sites

  • 3 years later...

Bonjour,

 

Il faut copier la méthode renderForm() de la classe controllers/admin/AdminCategoriesController.php

 

Ensuite ajouter la méthode copiée dans la classe ovverride/controllers/admin/AdminCategoriesController.php avec les modifications désirées.

 

La dernière ligne de cette méthode appelle la méthode parente (celle que l'on a copié à la base) et du coup écrase les modifications :

return parent::renderForm();

​Il faut à la place appeler la méthode renderForm de la class AdminController :

return AdminController::renderForm();
  • Like 1
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...