IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Classer les résultats d'une liste


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 9
    Par défaut Classer les résultats d'une liste
    Bonjour,
    Je me permets de solliciter votre aide car je souhaiterais pouvoir classer les résultats d'une fonction par nom de produit (fonction qui vient d'un module Prestashop) sans succès. Cette fonction permet de lister les articles d'une commande mais la liste est par ordre d'ajout du client. Or, je voudrais qu'ils soient classés par ordre alphabétique sur le nom du produit pour gagner du temps de préparation.

    Voici la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    protected function setFieldsListe()
        {
            $this->fields_list = array(
                'image' => array(
                    'title' => $this->l('Image'),
                    'image' => 'p',
                    'align' => 'center',
                    'search' => false,
                    'orderby' => false,
                    'filter' => false
                ),
                'product_quantity' => array(
                    'title' => $this->l('Qty to ship'),
                    'align' => 'center',
                    'search' => true
                ),
                'QtyPacked' => array(
                    'title' => $this->l('Qty packed'),
                    'align' => 'center',
                    'callback' => 'getQtyPacked',
                    'search' => false,
                    'orderby' => false
                ),
                'product_reference' => array(
                    'title' => $this->l('Reference'),
                    'align' => 'center',
                    'search' => true
                ),
                'product_ean13' => array(
                    'title' => $this->l('Barcode'),
                    'align' => 'center',
                    'search' => true
                ),
                'location' => array(
                    'title' => $this->l('Location'),
                    'align' => 'center',
                    'callback' => 'getLocation',
                    'search' => true
                ),
                'product_name' => array(
                    'title' => $this->l('Product'),
                    'align' => 'center',
                    'search' => true,
                    'class' => 'productName',
                    'orderby' => true
                ),
                'status' => array(
                    'title' => $this->l('Status'),
                    'align' => 'center',
                    'callback' => 'setStatus',
                    'search' => false,
                    'orderby' => false
                )
            );
    }
    J'ai ajouté un orderby=>true mais cela ne change rien du tout aux résultats.
    Auriez-vous une idée de comment procéder ?
    Merci par avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 313
    Par défaut
    Bonjour, tu peux retrier tes données après les avoir récupérés mais franchement c'est pas le mieux a faire ,
    regarde et/ou met dans la discussion la "fonction" qui récupère les données stp
    Merci

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 9
    Par défaut
    Merci beaucoup pour cette réponse.
    Voici la fonction qui appelle cette liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public function __construct()
        {
            $this->bootstrap = true;
            $this->table = 'order_detail';
            $this->className = 'OrderDetail';
            $this->identifier = 'id_order_detail';
            $this->lang = false;
            $this->list_simple_header = true;
            $this->_default_pagination = 500;
            //$this->explicitSelect = true;
            parent::__construct();
            $this->list_no_link = true;
     
            $this->override_folder = 'order_packing/';
            $this->setFieldsListe();

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 313
    Par défaut
    Je n'ai peut être pas été assez clair, tu dois avoir une requête SQL pour récupérer tes valeurs dans la bdd, si je me trompe pas ça m'étonnerait qu'il y ait un autre solution pour récupérer les données. Ça serait plutôt à ce niveau qu'il faudrait faire quelque chose et potentiellement mettre un order by. Après je ne connais pas bien prestashop donc je ne sais pas comment sont stockées les données récupérées.

    Merci d'avance

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 9
    Par défaut
    J'ai trouvé la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public function renderList()
        {
            $this->_select = 'id_image, id_order_detail as QtyPacked, id_order_detail as status, id_order_detail as location';
    
            $this->_where .= "AND id_order=" . (int) $this->id_order;
            $this->_join = 'LEFT JOIN `' . _DB_PREFIX_ . 'image_shop` image_shop ON (image_shop.`id_product` = a.`product_id` AND image_shop.`cover` = 1 AND image_shop.id_shop = ' . $this->context->shop->id . ') ' ORDER BY $this->product_name;
            
    
            $order = new Order($this->id_order);
           // print_r($order);
            $state = new OrderState($order->current_state);
            $carrier = new Carrier($order->id_carrier);
            $invoice_address = new Address((int) $order->id_address_delivery);
            $customer = new Customer($order->id_customer);
            $datas = BmsOrderPreparationProductHelper::getAllProduct(array(
                $order
            ));
    En ajoutant ORDER BY $this->product_name j'ai une erreur 500.

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 313
    Par défaut
    $this->_join = 'LEFT JOIN `' . _DB_PREFIX_ . 'image_shop` image_shop ON (image_shop.`id_product` = a.`product_id` AND image_shop.`cover` = 1 AND image_shop.id_shop = ' . $this->context->shop->id . ') ' ORDER BY $this->product_name;

    C'est normal tu met order by ... en dehors de ta chaine
    C'est comme si j'écrivais $select_product="Select * from product" order by date;

    La correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->_where .= "AND id_order=" . (int) $this->id_order; . ' ORDER BY '. $this->product_name.';';

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/02/2007, 15h21
  2. Redéfinir les marges d'une liste à puces
    Par om.rava dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 01/12/2005, 14h54
  3. Réponses: 29
    Dernier message: 03/11/2005, 10h37
  4. Comment classer les données d'une TStringList ?
    Par cmickyplus dans le forum Langage
    Réponses: 2
    Dernier message: 25/06/2005, 16h44
  5. cmt selectionner tout les champ d'une liste deroulante
    Par mangamat dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/03/2005, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo