Jump to content

Comment surcharger deux fois la classe qui modélise les produits?.


Recommended Posts

Bonjour j'ai  surchargé la classe qui modélise les produits. En l’occurrence la classe ProductCore.
Tout se passe dans le dossier ./override/classes/. Créez-y le fichier Product.php et insérez le code suivant :

<?php

 
 
{class Product extends ProductCore
 
    public $rrp;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
        self::$definition['fields']['rrp'] = array('type' => self::TYPE_FLOAT, 'validate' => 'isCleanHtml');
        parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 
}
 ?> 
 
Tout fonctionne trés bien .Par contre j'ai besoin de nouveau à surchargé cette classe avec le même fichier :Product.php et y coller :
<?php
 class Product extends ProductCore
{
    public $pointsforts;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
      Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isString');
      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 
}
?>  
 
Donc j'ai essayé cela :
 
 
<?php
 
class Product extends ProductCore
{
 
    public $rrp;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
        self::$definition['fields']['rrp'] = array('type' => self::TYPE_FLOAT, 'validate' => 'isCleanHtml');
        parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 
}
 class Product extends ProductCore
{
    public $pointsforts;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
      Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isString');
      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 
}
?>  
 
Résultat une page blanche . Quelqu'un à t'il une idée pour utilisé le même fichier pour surcharger deux fois la classe ?
Merci
Link to comment
Share on other sites

Salut,

 

Tu sais comment ca marche une classe ?

 

 class Product extends ProductCore //définition de ta classe ici
{
//contenu
}
 
La tu l'a défini 2 fois...
 
En vrai ca donne :
 
 class Product extends ProductCore
{
    public $pointsforts;
    public $rrp;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
     Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isString');
    Product::$definition['fields']['rrp'] = array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isString');
      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
}
 
Enjoy :)
Link to comment
Share on other sites

 

Salut,

 

Tu sais comment ca marche une classe ?

 

 class Product extends ProductCore //définition de ta classe ici
{
//contenu
}
 
La tu l'a défini 2 fois...
 
En vrai ca donne :
 
 class Product extends ProductCore
{
    public $pointsforts;
    public $rrp;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
     Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isString');

    Product::$definition['fields']['rrp'] = array('type' => self::TYPE_HTML, 'lang' => false, 'validate' => 'isString');

      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);

    }
}
 
Enjoy :)

 

Merci pour ton aide cela fonctionne à merveille. Et je suis tout nouveau en programmation.

 

Je voudrais aussi rajouté ceci:

 

<?php
 
class Product extends ProductCore
{
 
 
/**
* Get prices drop
*
* @param integer $id_lang Language id
* @param integer $pageNumber Start from (optional)
* @param integer $nbProducts Number of products to return (optional)
* @param boolean $count Only in order to get total number (optional)
* @return array Prices drop
*/
public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
{
parent::__construct($id_product, $id_lang, $id_shop);
if (!$context)
$context = Context::getContext();
 
if ($full && $this->id)
{
$this->isFullyLoaded = $full;
$this->tax_name = 'deprecated'; // The applicable tax may be BOTH the product one AND the state one (moreover this variable is some deadcode)
$this->manufacturer_name = Manufacturer::getNameById((int)$this->id_manufacturer);
$this->supplier_name = Supplier::getNameById((int)$this->id_supplier);
$this->defcat_name = Product::defCat((int)$this->id_category_default); // Ajout pour afficher le nom de la catégorie par defaut du produit
$address = null;
if (is_object($context->cart) && $context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')} != null)
$address = $context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')};
 
$this->tax_rate = $this->getTaxesRate(new Address($address));
 
$this->new = $this->isNew();
 
// keep base price
$this->base_price = $this->price;
 
$this->price = Product::getPriceStatic((int)$this->id, false, null, 6, null, false, true, 1, false, null, null, null, $this->specificPrice);
$this->unit_price = ($this->unit_price_ratio != 0  ? $this->price / $this->unit_price_ratio : 0);
if ($this->id)
$this->tags = Tag::getProductTags((int)$this->id);
 
$this->loadStockData();
}
 
if ($this->id_category_default)
$this->category = Category::getLinkRewrite((int)$this->id_category_default, (int)$id_lang);
}
public function defCat($id_category_default)
{
$category = new Category($id_category_default);
$defcat_name = $category->getName();
return $defcat_name;
}
}
 
 
?> 
Peut tu m'aider .Merci beaucoup
Link to comment
Share on other sites

Et ? je vois pas quel est le problème ?

 

Tu modifie la fonction __construc comme selon mon exemple. Tu rajoute au dessus (en attribut) les 2 paramètres (comme selon mon exemple) :)

Merci j'ai trouvé.Par contre depuis que j'ai créé ce fichier product.php j'ai un problème quand je vais dans le back office et que je veux changer les quantités du produit.

Avant quand je changé la quantité j'avais une tooplit vert marqué : "données enregistrée"

 

Maintenant j'ai un tooplit de couleur rouge.

 

Peut tu m'aidé stp.Merci

Link to comment
Share on other sites

Regarde celui là il récapitule ta discusion :)

http://www.geraudlacheny.fr/ajouter-champ-personnalise-produit-prestashop/

 

 

Tu veux faire quoi au final ? Tu as réussi à ajouté ton champ tu voulais quoi d'autre ?

Notice à la ligne 226 du fichier C:\wamp\www\se\cache\smarty\compile\f6\e4\60\f6e4603d8cb8374ea6cd0fde2aa2458846de8d1e.file.prices.tpl.php

[8] Undefined index: id_lang

 

Notice à la ligne 226 du fichier C:\wamp\www\se\cache\smarty\compile\f6\e4\60\f6e4603d8cb8374ea6cd0fde2aa2458846de8d1e.file.prices.tpl.php

[8] Trying to get property of non-object

 

J ai ces deux erreurs mais l je ne comprends pas

Link to comment
Share on other sites

Dans ton price.tpl tu as la variable id_lang line 226 qui est inconnu.

<div class="form-group" {if !$ps_use_ecotax} style="display:none;"{/if}>
<label class="control-label col-lg-3" for="ecotax">
{include file="controllers/products/multishop/checkbox.tpl" field="ecotax" type="default"}
<span class="label-tooltip" data-toggle="tooltip"
title="{l s='The ecotax is a local set of taxes intended to "promote ecologically sustainable activities via economic incentives". It is already included in retail price: the higher this ecotax is, the lower your margin will be.'}">
{l s='Ecotax (tax incl.)'}
 
A partir de la ligne 226 j'ai cela.Une idée?
Link to comment
Share on other sites

Non !

 

Mais tu n'as toujours pas répondu à ma question.

 

Je la repose une 3ème fois au cas ou : Tu veux faire quoi au final ? Tu as réussi à ajouté ton champ tu voulais quoi d'autre ?

Bonsoir j'installe ce tuto ; http://www.prestasho...6/#entry1744190:

 

 

Et je n'ai plus que cette erreur:

 

Notice à la ligne 226 du fichier C:\wamp\www\se\cache\smarty\compile\f6\e4\60\f6e4603d8cb8374ea6cd0fde2aa2458846de8d1e.file.prices.tpl.php

[8] Undefined index: id_lang

 

Notice à la ligne 226 du fichier C:\wamp\www\se\cache\smarty\compile\f6\e4\60\f6e4603d8cb8374ea6cd0fde2aa2458846de8d1e.file.prices.tpl.php

[8] Trying to get property of non-object 

 

 

Alors je suis allé chercher le fichier : compile\f6\e4\60\f6e4603d8cb8374ea6cd0fde2aa2458846de8d1e

 

Et j'ai cela:

 

 

<!-- Prix par Paquet -->

 
<div class="form-group">
<label class="control-label col-lg-2" for="pointsforts_<?php echo $_smarty_tpl->tpl_vars['id_lang']->value;?>
">
  <?php echo $_smarty_tpl->getSubTemplate ("controllers/products/multishop/checkbox.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array('field'=>"pointsforts",'type'=>"tinymce",'multilang'=>"true"), 0);?>
 
  <span class="label-tooltip" data-toggle="tooltip"
title="<?php echo smartyTranslate(array('s'=>'Appears in the body of the product page.'),$_smarty_tpl);?>
">
<?php echo smartyTranslate(array('s'=>'Par quantité de:'),$_smarty_tpl);?>
 
</span>
</label>
<div class="col-lg-9">
  <input maxlength="5" id="pointsforts" name="pointsforts" type="text" value="<?php echo $_smarty_tpl->tpl_vars['product']->value->pointsforts;?>
" />
</div>
  </div> 
 
Alors je ne vois pas l'erreur.Une idée Merci?
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...