Comment créer un helper sous prestashop

Si vous développez des modules pour prestashop et que vos modules génèrent et utilisent des onglets vous avez sans doute dû être étonné de voir qu’aucun helper n’existe pour créer des checkbox.
C’est à mon avis un oubli de la team Ps, mais on va y remédier. Au passage vous allez en plus apprendre comment créer un helper ce qui vous permettra à l’avenir de créer des formulaires avancés pour vos modules.

Avant toute chose je vous invite à bien lire la documentation officielle de Prestashop sur la création de module.
/*** EDIT ***/
Suite à l’intervention de smorillon (merci à lui), j’ai corrigé mon code qui, même s’il fonctionnait, ne respectait pas les bonnes pratiques de développement.

On va commencer par le fichier « AdminOpartproductvideoController.php » c’est celui qui gère l’affichage du contenu de mon onglet.
Dans la fonction « renderForm » vous devez avoir ce type de code:


public function renderForm()
{
if (!($obj = $this->loadObject(true)))
return;

$this->fields_form = array(
'legend' => array(
'title' => $this->l('Video'),
'image' => '../img/admin/cog.gif',
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Title:'),
'name' => 'title',
'size' => 50,
'desc' => $this->l('The title is used only in admin')
),
array(
'type' => 'text',
'label' => $this->l('Width:'),
'name' => 'width',
'size' => 10
),
array(
'type' => 'text',
'label' => $this->l('Height:'),
'name' => 'height',
'size' => 10
),
array(
'type' => 'text',
'lang' => true,
'autoload_rte' => true,
'label' => $this->l('Link:'),
'name' => 'link',
'size' => 150,
'desc' => $this->l('Copy the video url here. You can use youtube, dailymotion and wimeo video')
),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'button'
)
);
return parent::renderForm();
}

Pour que l’helper soit appelé par cette fonction il faut ajouter le code suivant:


'checkbox' => array(
'label'=>'show on all page',
'name'=>'displayAll',
'id'=>'id',
'desc' => $this->l('demo desc')
),

ce qui vous donne:


public function renderForm()
{
if (!($obj = $this->loadObject(true)))
return;

$this->fields_form = array(
'legend' => array(
'title' => $this->l('Video'),
'image' => '../img/admin/cog.gif',
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Title:'),
'name' => 'title',
'size' => 50,
'desc' => $this->l('The title is used only in admin')
),
array(
'type' => 'text',
'label' => $this->l('Width:'),
'name' => 'width',
'size' => 10
),
array(
'type' => 'text',
'label' => $this->l('Height:'),
'name' => 'height',
'size' => 10
),
array(
'type' => 'text',
'lang' => true,
'autoload_rte' => true,
'label' => $this->l('Link:'),
'name' => 'link',
'size' => 150,
'desc' => $this->l('Copy the video url here. You can use youtube, dailymotion and wimeo video')
),
array(
'type' => 'checkbox',
'label' => $this->l('show on all page:'),
'name' => 'displayAll',
'id'=>'id',
'desc' => $this->l('demo desc')
)
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'button'
)
);
return parent::renderForm();
}

Ensuite il faut créer le fichier form.tpl en respectant bien l’architecture indiquée plus haut.
C’est à dire « views/templates/admin/nomdevotremodule/helpers/form/form.tpl ».

Placez-y le code suivant:


{extends file="helpers/form/form.tpl"}
{block name="input"}
{if $input.type=='checkbox'}
<input type="checkbox" name="{$input.name}" id="{$input.id}" value="" class="">
{else}
{$smarty.block.parent}
{/if}
{/block}

voila, désormais vous verrez une belle checkbox.

/*** EDIT 2 ***/
Toujours grâce à Smorillon voici comment utiliser l’helper original (qui finalement existe) de prestashop:


array(
'type' => 'checkbox',
'name' => 'displayAll',
'values' => array(
'query' => array(
array(
'id' => 'on',
'name' => $this->l('show on all page'),
'val' => '1'
),
),
'id' => 'id',
'name' => 'name'
)
),

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *