osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> [Bug & Fix] Classe split_page_results, Le constructeur ne supporte pas les requêtes complexes
FoxP2
posté 17 Jun 2013, 17:23
Message #1


Ceinture marron OSC
Icône de groupe

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
  • un bouton permettant d'accéder à un menu déroulant lui même permettant
  • d'ajouter une option* en masse à un ou plusieurs produits. (gain de productivité par rapport à l'ajout 1 par 1 via le module attributs)
* qui a des valeurs d'options liées !
Go to the top of the page
 
chti_poupon
posté 17 Jun 2013, 20:41
Message #2


Ceinture noire OSC
Icône de groupe

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
Go to the top of the page
 
FoxP2
posté 17 Jun 2013, 22:39
Message #3


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1665
Inscrit : 3-June 09
Membre no 25501



Citation (chti_poupon @ 17 Jun 2013, 20:41) *
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.

Citation (chti_poupon @ 17 Jun 2013, 20:41) *
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.
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 28th March 2024 - 17:16
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)