Jump to content

Création de module non pris en compte par Prestashop


thelphite

Recommended Posts

Slt,

 

je débute et en ce moment j'essai de créer mon premier module.

 

après avoir suivi les tutos de Prestashop, j'ai créé ce code :

 

------------------------------------------------------------------------------------------------------

/**Script qui affiche un texte en page d'accueil**/

 

<?php

if ( !defined( '_PS_VERSION_' ) )

exit;

 

class BlockPaymentInfo extends Module

{

public $text;

public $titre;

 

function __construct()

{

$this->name = 'BlockPaymentInfo';

$this->tab = 'front_office_features';

$this->version = 1.0;

$this->author = 'Gilbert Franz';

$this->need_instance = 0;

 

parent::__construct();

 

$this->displayName = $this->l( 'BlockPaymentInfo' );

$this->description = $this->l( 'Few words about how to paye products.' );

 

$this->text = 'Il était une fois ds la bergerie, 3 louves...';

$this->titre = 'Payment necessaries';

}

 

public function install()

{

if (parent::install() == false OR !$this->registerHook('footer') OR !$this->registerHook('home'))

return false;

return true;

}

 

public function uninstall()

{

if (!parent::uninstall())

Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'BlockPaymentInfo`');

parent::uninstall();

}

 

public function hookFooter($params)

{

global $smarty;

 

$smarty->assign(array(

'text' => $this->text,

'titre' => $this->titre;

));

 

return $this->display(__FILE__, $this->name.'.tpl');

}

 

public function hookHome($params)

{

global $smarty;

 

$smarty->assign(array(

'text' => $this->text,

'titre' => $this->titre;

));

 

return $this->display(__FILE__, $this->name.'.tpl');

}

 

}

 

-------------------------------------------------------------------------------------------

 

avec son .tpl :

 

 

<!-- Block blockpaymentinfo -->

<div id="blockpaymentinfo" class="block">

<h4>{l s='titre' mod='blockpaymentinfo'}</h4>

<div class="block_content">

<ul>

<li><a href="{$base_dir}modules/blockpaymentinfo/blockPaymentInfo.php" title="Click this link">{l s='text' mod='blockpaymentinfo'}</a></li>

</ul>

</div>

</div>

<!-- /Block blockpaymentinfo -->

 

-----------------------------------------------------------------------------------------

 

 

Mais après avoir copier/coller le dossier de mon module dans l'arborescence de mon site, rien ne se passe.

 

Je suis totalement perdu là.

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

Qu'entendez-vous par "rien ne se passe" ?

 

Une fois uploadé, le module devrait apparaitre dans le Back Office de PrestaShop (onglet Modules), et vous devez l'installer.

C'est seulement ensuite qu'il devient visible en Front...

 

Si rien n'apparaît dans l'onglet Module, je vous conseil d'activer l'affichage des erreurs dans le fichier config/config.php.

Link to comment
Share on other sites

J'ai ce message d'erreur :

 

 

Parse error: syntax error, unexpected '?' in /home/amscaaf/translate/classes/Module.php(587) : eval()'d code on line 1.

 

 

suivi de :

 

 

The following module(s) couldn't be loaded:

  1. blockpaymentinfo (parse error in /modules/blockpaymentinfo/blockpaymentinfo.php)
  2. blockpaymentinfo (class missing in /modules/blockpaymentinfo/blockpaymentinfo.php)

 

 

Cependant, voici la ligne mise en cause qui ne contient pas de "?" :

 

if (eval('if (false){'.$file.'}') !== false). ligne 587.

 

 

 

Et voici la condition où elle figure pour aller plus vite :

 

if (!class_exists($module, false))

{

$filepath = _PS_MODULE_DIR_.$module.'/'.$module.'.php';

$file = trim(file_get_contents(_PS_MODULE_DIR_.$module.'/'.$module.'.php'));

if (substr($file, 0, 5) == '<?php')

$file = substr($file, 5);

if (substr($file, -2) == '?>')

$file = substr($file, 0, -2);

// if (false) is a trick to not load the class with "eval".

// this way require_once will works correctly

if (eval('if (false){'.$file.'}') !== false)

require_once( _PS_MODULE_DIR_.$module.'/'.$module.'.php' );

else

$errors[] = sprintf(Tools::displayError('%1$s (parse error in %2$s)'), $module, substr($filepath, strlen(_PS_ROOT_DIR_)));

}

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

Houla non surtout pas ^^.

Dans ton fichier blockpaymentinfo.php, mais juste le temps de repérer d'où vient l'erreur.

 

Tu commentes certaines fonctions, et dès que l'erreur ne s'affiche plus ça veut dire qu'elle se trouve dans ce que tu viens de commenter... en bref faut resserrer l'étau autour de l'erreur...

Link to comment
Share on other sites

J'ai tout mis en commentaires sauf cette partie :

 

<?php

if (!defined('_PS_VERSION_'))

exit;

 

class BlockPaymentInfo extends Module

{

public $text,$titre;

 

function __construct()

{

$this->name = 'blockpaymentinfo';

$this->tab = 'test';

$this->version = 1.0;

$this->author = 'Gilbert Franz';

$this->need_instance = 0;

 

parent::__construct();

 

$this->displayName = $this->l( 'Block Payment Info' );

$this->description = $this->l( 'Few words about how to paye products.' );

 

$this->text = 'test du jour';

$this->titre = 'le titre du test';

 

}

Link to comment
Share on other sites

oui :

 

<!-- Block blockpaymentinfo -->

<div id="blockpaymentinfo" class="block">

<h4>{l s='titre' mod='blockpaymentinfo'}</h4>

<div class="block_content">

<ul>

<li><a href="{$base_dir}modules/blockpaymentinfo/blockpaymentinfo.php" title="Click this link">{l s='text' mod='blockpaymentinfo'}</a></li>

</ul>

</div>

</div>

<!-- /Block blockpaymentinfo -->

Link to comment
Share on other sites

Pourquoi tu n'inscris pas tes variables dans la table configuration de ce style=

Configuration::updateValue('TEXT', 'Il était une fois ds la bergerie, 3 louves..');
Configuration::updateValue('TITRE','payment necessaries');

 

 

Tu déclares ta fonction install de la façon suivante:

if (!parent::install() OR !$this->registerHook('footer') OR !$this->registerHook('home') OR !Configuration::updateValue('TEXT', 'Il était une fois ds la bergerie, 3 louves..') OR !Configuration::updateValue('TITRE','payment necessaries'))
return false;
return true;

 

Ensuite, pour assigner il suffit d'appeler les variables de la façon siovante:

$smarty->assign(array('text'=>Configuration::get('TEXT'),'titre'=>Configuration::get('TITRE')));

 

Pour utiliser des variables, quelles qu'elles soient, il faut toujours utiliser au moins ce type de variable, parce que construire des variables sur $this->... pas trop pour moi.

 

En outre, dans ta fonction unistall, tu supprimes une table que tu n'as pas crée à l'installation ?

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

Voici le code, simplifié :

 

<!--?php

if (!defined('_PS_VERSION_'))

exit;

 

class BlockPaymentInfo extends Module

{

function __construct()

{

$this--->name = 'blockpaymentinfo';

$this->tab = 'front_office_features';

$this->version = 1.0;

$this->author = 'Gilbert';

$this->need_instance = 0;

 

parent::__construct();

 

$this->displayName = $this->l('Block Payment Info');

$this->description = $this->l('Few words about how to paye products.');

}

 

public function install()

{

return (parent::install() AND $this->registerHook('footer'))

}

 

public function hookFooter($params)

{

global $smarty;

 

$smarty->assign(array(

'text'=> 'TEXT',

'titre'=> 'TITRE'));

 

return $this->display(__FILE__, 'blockpaymentinfo.tpl');

}

 

public function hookFooter($params)

{

return $this->hookleftColumn($params);

}

}

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

Bjr,

 

j'ai apporté les corrections, idem :

 

<?php

if (!defined('_PS_VERSION_'))

exit;

 

class BlockPaymentInfo extends Module

{

function __construct()

{

$this->name = 'blockpaymentinfo';

$this->tab = 'front_office_features';

$this->version = 1.0;

$this->author = 'Gilbert';

$this->need_instance = 0;

 

parent::__construct();

 

$this->displayName = $this->l('Block Payment Info');

$this->description = $this->l('Few words about how to paye products.');

}

 

public function install()

{

return (parent::install() AND $this->registerHook('footer'));

}

 

public function hookFooter($params)

{

global $smarty;

 

$smarty->assign(array(

'text'=> 'TEXT',

'titre'=> 'TITRE'));

 

return $this->display(__FILE__, 'blockpaymentinfo.tpl');

}

 

public function hookFooter($params)

{

return $this->hookleftColumn($params);

}

}

 

?>

Link to comment
Share on other sites

on va faire le point, dans le dossier modules, vous avez un dossier blockpaymentinfo (sans majuscules), dans ce dossier vous avez plusieurs fichiers dont blockpaymentinfo.php (idem, tout en minuscule).

Quand vous allez dans le back office de votre boutique dans l'onglet module, votre module apparait ou non ? vous pouvez l'installer ou non ? vous avez un message d'erreur ou autre ?

Link to comment
Share on other sites

Bonjour coeos.pro,

 

le nom du dossier, les fichiers .php et .tpl sont en minuscules... mais mon module n'apparait pas ds le back-office car j'ai ce message d'erreur :

 

 

Parse error: syntax error, unexpected '?' in /home/amscaaf/translate/classes/Module.php(587) : eval()'d code on line 1

 

The following module(s) couldn't be loaded:

  1. blockpaymentinfo (parse error in /modules/blockpaymentinfo/blockpaymentinfo.php)
  2. blockpaymentinfo (class missing in /modules/blockpaymentinfo/blockpaymentinfo.php)

:(

 

C'est surtout le "class missing" qui me trouble, mai bon.

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

J'ai depuis suivi les conseils d'autre développeurs et j'ai ce code maintenant : (le problème est malgré tout tjs là)

 

<?php

if (!defined('_PS_VERSION_'))

exit;

 

class BlockPaymentInfo extends Module

{

function __construct()

{

$this->name = 'blockpaymentinfo';

$this->tab = 'front_office_features';

$this->version = 1.0;

$this->author = 'Gilbert franz';

$this->need_instance = 0;

 

parent::__construct();

 

$this->displayName = $this->l('Block Payment Info');

$this->description = $this->l('Few words about how to paye products.');

}

 

public function install()

{

return (parent::install() AND $this->registerHook('footer'));

}

 

public function hookFooter($params)

{

global $smarty;

 

$smarty->assign(array(

'text'=> 'TEXT',

'titre'=> 'TITRE'));

 

return $this->display(__FILE__, 'blockpaymentinfo.tpl');

}

 

public function hookFooter($params)

{

return $this->hookleftColumn($params);

}

}

?>

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