Jump to content

Problème d'affichage du titre "Filtrer par Date:..." dans Commandes


Recommended Posts

Bonjour,

 

Depuis la mise à jour en 1.6.1.5, dans le back-office, dans "Commandes" puis dans le filtrage quand on choisi les commandes du jour, on configure la date, et là le titre de la page m'affiche :

 

Filtrer par Date : a:2:{i:0;s:10:"2016-05-12";i:1;s:10:"2016-05-12";}

 

Quelqu'un a t'il le même problème ou une solution ?

 

J'ai 2 sites sous prestashop 1.6.1.5 sur des serveurs différents, même problème.

 

Je pense que tous les sites sur la 1.6.1.5 on le même problème ! et vous ?

 

Merci d'avance !

  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...

Bonjour,

 

Depuis la mise à jour en 1.6.1.5, dans le back-office, dans "Commandes" puis dans le filtrage quand on choisi les commandes du jour, on configure la date, et là le titre de la page m'affiche :

 

Filtrer par Date : a:2:{i:0;s:10:"2016-05-12";i:1;s:10:"2016-05-12";}

 

Quelqu'un a t'il le même problème ou une solution ?

 

J'ai 2 sites sous prestashop 1.6.1.5 sur des serveurs différents, même problème.

 

Je pense que tous les sites sur la 1.6.1.5 on le même problème ! et vous ?

 

Merci d'avance !

 

 

Bonjour c'est peut etre un peut tard mais bon ^^ je donne toujours on ne sais jamais ;)

Tout d'abord j'ai fait deux version pour ce bug:

  • La première le corrige simplement 
  • La seconde le corrige + convertit la date au format français (le format est Américain par défault)
Vous devez accéder au fichier AdminController.php situé dans classes/controller/AdminController.php

 

Je vous conseille fortement de faire un override avec se fichier.

Pour se faire vous devez prendre une copie du fichier précédent, et le placer dans override/classes/controller/

Pour activer l'override vous devez supprimer le fichier class_index.php dans cache/class_index.php (ne vous en faite pas il se regénère au chargement d'une page prestashop; faite un backup si vous le souhaitez.)

 

Revenons donc à notre AdminController.php

 

Pour la première version le code à ajouter est à la ligne 660:

              $filter_value = ((bool)$val) ? $this->l('yes') : $this->l('no');

//code à ajouter à partir d'içi
//fix problème d'affichage du filtre par date dans l'onglet commande
} elseif (isset($t['type']) && $t['type'] == 'datetime') {
   $date = Tools::unSerialize($val);
   if (isset($date[0])) {
      $filter_value = $date[0];
      if (isset($date[1]) && !empty($date[1])) {
         //assemblage des deux dates
         $filter_value .= ' - '.$date[1];
      }
   }
} //attention à cette accolade qui doit être posée sur le elseif { suivant 
et pour la seconde, pareil à ajouter dès la ligne 660

 

 

 

              $filter_value = ((bool)$val) ? $this->l('yes') : $this->l('no');

//code à ajouter à partir d'içi
//fix problème d'affichage du filtre par date dans l'onglet commande
} elseif (isset($t['type']) && $t['type'] == 'datetime') {
   $date = Tools::unSerialize($val);
   if (isset($date[0])) {
      //transformation de la chaine de caractère en format date
      $s_filtredate1 = strtotime($date[0]);
      //convertion du format de date Americaine en format Français
      $filtredate1 = date('d/m/Y',$s_filtredate1);
      $filter_value = $filtredate1;
          if (isset($date[1]) && !empty($date[1])) {
             $s_filtredate2 = strtotime($date[1]);
             $filtredate2 = date('d/m/Y',$s_filtredate2);
             //assemblage des deux dates
             $filter_value .= ' - '.$filtredate2;
           }
      }
 } //attention à cette accolade qui doit être posée sur le elseif { suivant 
 

Voila donc pour ce fix.

ils fonctionnent très bien sur la version 1.6.1.5 et je pense qu'ils seront  durable d’Ici à se que les équipes de dev fix ce problème.

Je n'ai pas rencontré pour l'instant de conflit avec un autre filtre par date, mais si vous en avez ne pas hésitez à me feedback tout cela.

 

Bien Cordialement ^^

 

Rémy Lefebvre

 

*edit*

Vous pouvez et je dirais même devez surcharger votre class AdminControllerCore pour remplacer cette fonction plutôt que de overrider tout le fichier

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

Merci pour cette solution, je crois qu'on est tous devant le même problème en version 1.6.1.5

Qu'entendez vous par "surcharger votre class AdminControllerCore pour remplacer cette fonction plutôt que de overrider tout le fichier "

est ce faire la modification sur le fichier directement sans override ?

 

Merci d'avance pour votre réponse

Link to comment
Share on other sites

Merci pour cette solution, je crois qu'on est tous devant le même problème en version 1.6.1.5

Qu'entendez vous par "surcharger votre class AdminControllerCore pour remplacer cette fonction plutôt que de overrider tout le fichier "

est ce faire la modification sur le fichier directement sans override ?

 

Merci d'avance pour votre réponse

 

Pas de problème pour la solution ;)

En fait ce que je veux dire par surcharger la fonction c'est que dans les faits au lieu de overrider tout le fichier vous aller overrider seulement la fonction dans laquelle est situé le fix ci-dessus.

 

Pour ce faire il vous faudra tout de même passez par la création des fichiers et répertoires dans le dossier override. 

Mais au lieu d'avoir le fichier entier overrider (200ko ça commence à être plutôt lourd surtout lorsque l'on à beaucoup de fichier dans le dossier d'override) vous n'aurai que la fonction voulus.

Il faut donc simplement faire.

<?php

class AdminController extends AdminControllerCore {

// et la vous placez la fonction entière du fix (pas seulement le fix: il faut remonter jusqu'a sa déclaration: public function blablablablba()
// cela évite d'avoir tout le fichier overrider alors que vous n'avez besoin que d'une fonction

// ne pas oublier les accolades 
//ne pas fermer les balises ?php> car génère trop d'erreur sous prestashop (simplement les mettre en début de fichier)

Il faut nommer ce fichier de la même manière. C-à-d AdminController.php et ne pas oublier de supprimer le fichier class_index.php dans le cache prestashop

 

Ainsi vous venez de faire une surcharge de Class ou de méthode (ici AdminControllerCore) cela évite donc de prendre tout un fichier et de le remplacer ce qui pour des projets de taille moyenne et plus, peux entraîner de nombreuses latences. Privilégié toujours la surcharge plutôt que l'override brut 

 

Voila si vous avez encore des questions n'hesitez pas ^^ ;)

 

Bien Cordialement 

 

Remy Lefebvre

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

Bonjour Remy

 

Un tout grand merci pour cette explication détaillée,claire et efficace :)

J'ai suivi tes instructions à la lettre et surclassé uniquement la classe

C'est en effet bcp plus propre comme cela.

 

Encore merci pour ton temps et ton aide.

 

Le sujet peut être marqué comme résolu :)

 

Bien amicalement

 

Patrick

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour Remy

 

Un tout grand merci pour cette explication détaillée,claire et efficace :)

J'ai suivi tes instructions à la lettre et surclassé uniquement la classe

C'est en effet bcp plus propre comme cela.

 

Encore merci pour ton temps et ton aide.

 

Le sujet peut être marqué comme résolu :)

 

Bien amicalement

 

Patrick

 

 Bonjour je reviens vers toi car j'ai pu détécter quelque bug dans ma solution:

         -lorsque l'on filtre par nom une date apparait: 01/01/1970

         -filtrage avec une seule date impossible

 

c'est pourquoi je te propose une nouvelle version de mon code. L'ayant fixer ce matin.

<?php

class AdminController extends AdminControllerCore {

   public function addFiltersToBreadcrumbs() {
      if ($this->filter && is_array($this->fields_list)) {
         $filters = array();

         foreach ($this->fields_list as $field => $t) {
            if (isset($t['filter_key'])) {
               $field = $t['filter_key'];
            }

            if (($val = Tools::getValue($this->table . 'Filter_' . $field)) || $val = $this->context->cookie->{$this->getCookieFilterPrefix() . $this->table . 'Filter_' . $field}) {
               if (!is_array($val)) {
                  $filter_value = '';
                  if (isset($t['type']) && $t['type'] == 'bool') {
                     $filter_value = ((bool) $val) ? $this->l('yes') : $this->l('no');

                     // -------------- fix problème d'affichage du filtre par date dans l'onglet commande
                  } elseif (isset($t['type']) && $t['type'] == 'datetime') {
                     $date = Tools::unSerialize($val);
                     if (!empty($date[0])) {
                        //transformation de la chaine de caractère en format date
                        $s_filtredate1 = strtotime($date[0]);
                        //convertion du format de date Americaine en format Français
                        $filtredate1 = date('d/m/Y', $s_filtredate1);
                        $filter_value = $filtredate1;
                     }
                     if (!empty($date[1])) {
                        $s_filtredate2 = strtotime($date[1]);
                        $filtredate2 = date('d/m/Y', $s_filtredate2);
                        //assemblage des deux dates
                        $filter_value .= ' au ' . $filtredate2;
                     }
                     // -------------- FIN fix problème d'affichage du filtre par date dans l'onglet commande
                  } elseif (is_string($val)) {
                     $filter_value = htmlspecialchars($val, ENT_QUOTES, 'UTF-8');
                  }
                  if (!empty($filter_value)) {
                     $filters[] = sprintf($this->l('%s: %s'), $t['title'], $filter_value);
                  }
               } else {
                  $filter_value = '';
                  foreach ($val as $v) {
                     if (is_string($v) && !empty($v)) {
                        $filter_value .= ' - ' . htmlspecialchars($v, ENT_QUOTES, 'UTF-8');
                     }
                  }
                  $filter_value = ltrim($filter_value, ' -');
                  if (!empty($filter_value)) {
                     $filters[] = sprintf($this->l('%s: %s'), $t['title'], $filter_value);
                  }
               }
            }
         }

         if (count($filters)) {
            return sprintf($this->l('filter by %s'), implode(', ', $filters));
         }
      }
   }

}

Je te donne le fichier entier tu n'aura qu'a remplacer celui-ci.

 

Cordialement 

 

Remy Lefebvre

www.RemyLefebvre.fr

Link to comment
Share on other sites

Un tout grand merci pour ce correctif du correctif :)

 

ça fonctionne nickel

 

Juste un petit détail pour atteindre la perfection :)

 

quand au recherche sur une date par exemple debut le 25/5/2016 il affiche les commandes du 25/5/2016 à ce jour c'est parfait

dans le titre il met filtre par date : 25/5/2016

 

pour être parfait il devrait mettre filtre par date : 25/5/2016 au 14/06/2016 (date du jour)

 

quand au recherche sur une date par exemple fin le 25/5/2016 il affiche les commandes du début au 25/5/2016 c'est parfait

dans le titre il met filtre par date : au 25/5/2016 ce qui est parfait aussi pour moi

 

Encore merci ça va en aider plus d'un 

 

Passes une belle journée

 

Patrick

Link to comment
Share on other sites

En effet, ayant fait le correctif rapidement je ne m'étais pas rendu compte de ça.

 

Je le modifierai pendant une pause si j'ai le temps de mis pencher très sérieusement.

Je te referai un retour à ce moment la.

N’hésite pas si tu à la moindre question et que tu pense que je suis en mesure de t'aider.

 

Très cordialement,

 

Remy,

www.RemyLefebvre.fr

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

Bonjour à tous,

 

Merci beaucoup pour cette solution !! Elle fonctionne parfaitement ! 

 

En espérant que l'équipe puisse mettre ce correctif dans leur prochaine énième mise à jour !

 

Merci encore :)

 

-----

Farah

  • Like 1
Link to comment
Share on other sites

  • 5 weeks later...

Bonjour,

 

J'ai eu le même problème, peux-tu me donner ton fichier en complet de AdminController.php. afin de remplacer le mien.

 

Merci  :rolleyes: .

En effet, ayant fait le correctif rapidement je ne m'étais pas rendu compte de ça.

 

Je le modifierai pendant une pause si j'ai le temps de mis pencher très sérieusement.

Je te referai un retour à ce moment la.

N’hésite pas si tu à la moindre question et que tu pense que je suis en mesure de t'aider.

 

Très cordialement,

 

Remy,

www.RemyLefebvre.fr

Link to comment
Share on other sites

Bonjour,

 

concernant le fix tout est expliqué dans le post #4 et le post #6 

 

En revanche je ne peux pas fournir te fournir le fichier entier en effet ayant fait de nombreux changement sur celui ci ne fonctionnera très certainement pas sur ton environnement. De plus je ne travail plus dans la boite pour qui j'ai corriger le beug je n'ai pas accés à ce fichier. 

 

En revanche comme je le disais tout est expliqué plus haut dans le topic.

Si tu as une question et qu'elle ne se trouve dans le topic n'hésite pas à me demander 

 

Cordialement, 

 

Rémy.

http://www.RemyLefebvre.fr

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

Parfait, je vais suivre la procédure déjà expliquée.

 

Merci infiniment pour ton retour de message.

 

 

Bonjour,

 

concernant le fix tout est expliqué dans le post #4 et le post #6 

 

En revanche je ne peux pas fournir te fournir le fichier entier en effet ayant fait de nombreux changement sur celui ci ne fonctionnera très certainement pas sur ton environnement. De plus je ne travail plus dans la boite pour qui j'ai corriger le beug je n'ai pas accés à ce fichier. 

 

En revanche comme je le disais tout est expliqué plus haut dans le topic.

Si tu as une question et qu'elle ne se trouve dans le topic n'hésite pas à me demander 

 

Cordialement, 

 

Rémy.

http://www.RemyLefebvre.fr

Link to comment
Share on other sites

Hello Fsair,

 

Tu trouveras en pièce jointe le fichier modifié. Personnellement, je n'avais pas encore surchargé ce fichier donc il n'y a que les recommandations de Remy (Thorfy, Merci encore :D ). 

 


 

Comme précisé dans son post, tu dois charger le fichier AdminController .php dans /override/classes/controller.

 

Tiens nous informé du résultat ! 

 

 

 

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

 

Hello Fsair,
 
Tu trouveras en pièce jointe le fichier modifié. Personnellement, je n'avais pas encore surchargé ce fichier donc il n'y a que les recommandations de Remy (Thorfy, Merci encore :D ). 
 
 
Comme précisé dans son post, tu dois charger le fichier AdminController .php dans /override/classes/controller.
 
Tiens nous informé du résultat ! 

 

 

Bonjour à tous,

 

Merci f4r4b3l ainsi que Remy, ça marche.

 

c'est résolu.

Link to comment
Share on other sites

 

Hello Fsair,
 
Tu trouveras en pièce jointe le fichier modifié. Personnellement, je n'avais pas encore surchargé ce fichier donc il n'y a que les recommandations de Remy (Thorfy, Merci encore :D ). 
 
 
Comme précisé dans son post, tu dois charger le fichier AdminController .php dans /override/classes/controller.
 
Tiens nous informé du résultat ! 

 

 

ça fonctionne parfaitement

 

ne pas oublier de supprimer le fichier class_index.php dans le cache prestashop ;)

Link to comment
Share on other sites

  • 1 year later...

Bonjour à tous, je me permets de remonter ce post car je viens d'appliquer le correctif en créant l'override de la fonction addFiltersToBreadcrumbs(). Le fichier class_index a bien été supprimé, le cache PS vidé et même celui du navigateur...mais du coup plus aucune date ne s'affiche. Auparavant, avec le 1er correctif, j'avais une date française à 1970 comme dit par Rémy. Mais là, plus rien. Une idée ?

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