Jump to content

Problème D'override Non Pris En Compte.


Recommended Posts

Bonjour,

 

Je n'arrive pas à trouver ma solution sur le forum pour mon problème d'override.

 

Je souhaite modifier la référence de mes commandes en leur donnant des numéros plutôt que des lettres. 

 

Pour ca je fait un override du fichier /www/classes/order/Order.php dans mon fichier /www/override/classes/order/Order.php

Je supprime bien le fichier /www/cache/class_index.php pour que l'override soit pris en compte.

Mais rien à faire, impossible de faire fonctionner l'override. Quand je regarde le fichier class_index.php nouvellement générer, il me dit qu'il n'y a pas d'override de disponible pour la fonction que j'appel. 

 

Voici la fonction normal : 

class OrderCore extends ObjectModel
{
    ...
    public static function generateReference()
    {
        return strtoupper(Tools::passwdGen(9, 'NO_NUMERIC'));
    }
    ...
}
 
Voici mon override : 
 
class Order extends OrderCore
{
     public static function generateReference()
    {
        $last_id = Db::getInstance()->getValue('SELECT MAX(id_order)FROM '._DB_PREFIX_.'orders');
        return str_pad((int)$last_id + 1, 9, '000000000', STR_PAD_LEFT);
    }
}

 

Et la ligne correspondant au OrderCore dans class_index.php : 

 
'OrderCore' => 
  array (
    'path' => 'classes/order/Order.php',
    'type' => 'class',
    'override' => false,
  ),
 
Et celle de Order dans le même fichier : 
 
 'Order' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),

 

J'ai même essayer de changer la nouvelle classe que je crée 'Order' en 'OrderABC' et rien n'apparait dans class_index.php.

 

Ma fonction dans l'override fonction très bien, car actuellement j'ai remplacé le code du fichier source par ce code, mais je ne suis pas fan de cette méthode et souhaite que mon override fonctionne. 

 

Je suis sous prestashop 1.6.0.14.

 

Merci et bonne journée,

Romain.

Link to comment
Share on other sites

A tout hasard, vérifiez que les overrides sont bien activées dans la page Performances.

 

Oui, ça arrive plus souvent qu'on le croit :)

Et vérifier que le /cache/class_index.php est bien à jour (le virer pour le regénérer en cas de doute)

Link to comment
Share on other sites

J'ai bien vérifier que l'override n'est pas désactivé dans le menu performance et j'ai également procédé à la suppression du fichier class_index.php à plusieurs reprise dans mes testes, mais rien à faire. Il se regénère bien à chaque fois mais ne prend pas en compte l'override.

post-1127618-0-41080100-1458307133_thumb.png

Link to comment
Share on other sites

Voici tout le class_index.php concernant l'Order 

 

  'Order' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderCarrier' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderCarrierCore' => 
  array (
    'path' => 'classes/order/OrderCarrier.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderCartRule' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderCartRuleCore' => 
  array (
    'path' => 'classes/order/OrderCartRule.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderConfirmationController' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderConfirmationControllerCore' => 
  array (
    'path' => 'controllers/front/OrderConfirmationController.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderController' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderControllerCore' => 
  array (
    'path' => 'controllers/front/OrderController.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderCore' => 
  array (
    'path' => 'classes/order/Order.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderDetail' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderDetailController' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderDetailControllerCore' => 
  array (
    'path' => 'controllers/front/OrderDetailController.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderDetailCore' => 
  array (
    'path' => 'classes/order/OrderDetail.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderDiscount' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderDiscountCore' => 
  array (
    'path' => 'classes/order/OrderDiscount.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderFollowController' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderFollowControllerCore' => 
  array (
    'path' => 'controllers/front/OrderFollowController.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderHistory' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderHistoryCore' => 
  array (
    'path' => 'classes/order/OrderHistory.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderInvoice' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderInvoiceCore' => 
  array (
    'path' => 'classes/order/OrderInvoice.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderMessage' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderMessageCore' => 
  array (
    'path' => 'classes/order/OrderMessage.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderOpcController' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderOpcControllerCore' => 
  array (
    'path' => 'controllers/front/OrderOpcController.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderPayment' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderPaymentCore' => 
  array (
    'path' => 'classes/order/OrderPayment.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderReturn' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderReturnController' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderReturnControllerCore' => 
  array (
    'path' => 'controllers/front/OrderReturnController.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderReturnCore' => 
  array (
    'path' => 'classes/order/OrderReturn.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderReturnState' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderReturnStateCore' => 
  array (
    'path' => 'classes/order/OrderReturnState.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderSlip' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderSlipController' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderSlipControllerCore' => 
  array (
    'path' => 'controllers/front/OrderSlipController.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderSlipCore' => 
  array (
    'path' => 'classes/order/OrderSlip.php',
    'type' => 'class',
    'override' => false,
  ),
  'OrderState' => 
  array (
    'path' => '',
    'type' => 'class',
    'override' => false,
  ),
  'OrderStateCore' => 
  array (
    'path' => 'classes/order/OrderState.php',
    'type' => 'class',
    'override' => false,
  ),
Link to comment
Share on other sites

Moi quand je surcharge Order (dans /override/classes/order/Order.php), j'ai ça pour "orderCore" dans le class_index :

 

  'OrderCore' => 
  array (
    'path' => 'override/classes/order/Order.php',
    'type' => 'class',
    'override' => false,
  ),

Alors que chez toi, ça fait référence à la classe du coeur !

Link to comment
Share on other sites

 

absolument, voici le code intégral de mon exemple :

<?php

class Order extends OrderCore
{

    public function __construct($id = null, $id_lang = null)
    {
		print "order overridé";
    }
}

 

En observant ton code je me suis rendu compte qu'il manquait quelque chose dans mon fichier, et je me sens honteux de l'avoir oublier ... 

Il n'y avait pas de <?php en haut de mon fichier. Je viens de l'ajouter et tout fonctionne normalement. 

 

Merci pour l'aide.

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