[Bug & Fix] Classe split_page_results, Le constructeur ne supporte pas les requêtes complexes |
Bienvenue invité ( Connexion | Inscription )
[Bug & Fix] Classe split_page_results, Le constructeur ne supporte pas les requêtes complexes |
17 Jun 2013, 17:23
Message
#1
|
|
Ceinture marron OSC Groupe : Membres Messages : 1665 Inscrit : 3-June 09 Membre no 25501 |
fichier : admin\includes\classes\split_page_results.php.
modifications uniquement valables avec osCommerce 2.4 Le nœud du problème : Dans la page products_attributes, j'avais besoin de ramener un jeu de résultats complexe pour le module 'options'. Initialement, le tableau de données est obtenu grâce à cette requête [lien] : Code $options = "select * from " . TABLE_PRODUCTS_OPTIONS . " where language_id = '" . (int) $_SESSION['languages_id'] . "' order by products_options_id"; requête qui également sert pour la pagination. Pour mon besoin, j'avais besoin de croiser deux tables afin de savoir quelles options n'avaient pas de valeurs d'options : Code $options = "select distinct(povtpo.products_options_id) as crossid, po.* from " . TABLE_PRODUCTS_OPTIONS . " po left outer join " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " povtpo on povtpo.products_options_id = po.products_options_id where po.language_id = '" . (int) $_SESSION['languages_id'] . "' order by po.products_options_id"; sauf que la pagination ne marche plus ! car dans le constructeur, cette requête [lien] est découpée par les différentes fonctions qui la précède. en l'occurrence, mon fameux distinct(povtpo.products_options_id) as crossid qui fait toute la différence ! Alors comment faire ? hé bien modifier le nombre d'argument passés dans le constructeur (et par référence) en cas de requête complexe. ce qui donne : Code function splitPageResults(&$current_page_number, $max_rows_per_page, &$sql_query, &$query_num_rows, &$query_real_count = null) { .../... if (osc_not_null($query_real_count) ) { $reviews_count_query = osc_db_query($query_real_count); $query_num_rows = osc_db_num_rows($reviews_count_query); } else { $reviews_count_query = osc_db_query("select count(*) as total " . substr($sql_query, $pos_from, ($pos_to - $pos_from))); $reviews_count = osc_db_fetch_array($reviews_count_query); $query_num_rows = $reviews_count['total']; } .../... côté applicatif : Code $options = "select distinct(povtpo.products_options_id) as crossid, po.* from " . TABLE_PRODUCTS_OPTIONS . " po left outer join " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " povtpo on povtpo.products_options_id = po.products_options_id where po.language_id = '" . (int) $_SESSION['languages_id'] . "' order by po.products_options_id"; $options_real_count = "select * from " . TABLE_PRODUCTS_OPTIONS . " where language_id = '" . (int) $_SESSION['languages_id'] . "' order by products_options_id"; $options_split = new splitPageResults($option_page, $row_number, $options, $options_query_numrows, $options_real_count); côté interface : options-produits-ajout-de-masse par foxp2projects, sur Flickr le filtrage opéré par la requête me permet d'activer ou pas
* qui a des valeurs d'options liées ! |
|
17 Jun 2013, 20:41
Message
#2
|
|
Ceinture noire OSC Groupe : TechDev Messages : 2757 Inscrit : 9-September 08 Lieu : Douai Membre no 22915 |
Nous vaudras-tu un jour une version avec des attributs aisément gérables ?
L'équipe US a-t-elle connaissance de tes travaux ? Je n'en suis pas là: Juste deux mots, puisque tu évoques cette classe. Je viens de me heurter à un petit problème, facile à corriger en remplaçant strpos() par stripos() dans Code $pos_from = strpos($sql_query, ' from', 0); et similaires.J'ai perdu du temps, et ne doit pas être le seul, après avoir recopié/collé une requête depuis phpMysql qui met FROM, SELECT etc... Cela me semble plus simple que d'édicter une règle supplémentaire A toutes fins utiles. Jean |
|
17 Jun 2013, 22:39
Message
#3
|
|
Ceinture marron OSC Groupe : Membres Messages : 1665 Inscrit : 3-June 09 Membre no 25501 |
Nous vaudras-tu un jour une version avec des attributs aisément gérables ? pour l'instant, je vous montre que le côté basique sur l'interface admin, sans la gestion avancée que j'ai déjà programmé (que l'on voit partiellment dans les screenshots de ce sujet, mais que je n'ai pas encore commenté). ensuite, je vous montrerai côté catalogue (c'est déjà codé) et là, c'est une tuerie. L'équipe US a-t-elle connaissance de tes travaux ? L'expérience utilisateur / interface n'a jamais été, en 13 années, une réelle préoccupation de l'équipe de développement. Et l'ajout de jqueryUI n'a en rien amélioré l'ergonomie du back-office qui reste un des plus ratés qui m’ait été donné de voir. L'interface que je programme est une vision toute personnelle, mais ayant au centre de mes préoccupations la personne la plus importante : le webmarchant. |
|
Version bas débit | Nous sommes le : 28th March 2024 - 20:32 |
Ce site est déclaré auprès de la commision Nationale de l'Informatique et des Libertés (déclaration n°: 1043896) |