public function moteurAffichage($callback = '', $colonnesSelect = '', $limit = array(false, 0, 10, false), $ordre = array(false, "id", "DESC"), $algo = array(false,'algo','DESC','ID'), $orderLimitPerso = '', $conditionsPlus = '') { // Ajout d'une conditions spécifique à WordPress if(empty($conditionsPlus)) { $conditions = "WHERE"; } else { $conditions = $conditionsPlus; } // Récupération des colonnes de sélections if(empty($colonnesSelect)) { $selectColumn = "*"; } else if (is_array($colonnesSelect)) { $selectColumn = implode(", ",$colonnesSelect); } else { $selectColumn = $colonnesSelect; } // Limite le nombre d'affichage par page if($limit[0] == true) { self::$limitArg = $limit[1]; self::$limit = $limit[2]; if(!isset($limit[1])) { $limitDeb = 0; } else if($limit[1] == 0) { $limitDeb = $limit[1] * $limit[2]; } else if($limit[3] == false) { $limitDeb = $limit[1]; } else { $limitDeb = ($limit[1] - 1) * $limit[2]; } $this->limitMinMax = " LIMIT $limitDeb, $limit[2]"; } else { $this->limitMinMax = ""; } // Algorithme de pertinence (plus il y a de mots dans le résultat, plus c'est haut) $numberWP = $this->db->get_row("SELECT count(*) FROM $this->tableBDD ".$conditions." $this->condition $orderLimitPerso", ARRAY_N); if($algo[0] == true && $numberWP[0] != 0) { // Ajout une colonne dans la base de données pour recueillir les valeurs de l'algorithme $ifColumnExist = $this->db->get_row("SHOW COLUMNS FROM $this->tableBDD LIKE '".$algo[1]."'", ARRAY_N); $columnExist = $ifColumnExist; if($columnExist[0] != $algo[1]) { $addColumn = $this->db->query("ALTER TABLE $this->tableBDD ADD ".$algo[1]." DECIMAL(10,3)"); } $colonnesStrSQL = implode(', ',$this->colonnesWhere); $requeteType = $this->db->get_results("SELECT $algo[3], $colonnesStrSQL FROM $this->tableBDD ".$conditions." $this->condition $orderLimitPerso", ARRAY_N) or die("Erreur d'algorithme ! ".$this->db->show_errors()); foreach($requeteType as $ligne) { $count = 0; for($p=1; $p < count($this->colonnesWhere)+1; $p++) { foreach($this->algoRequest as $mots) { $count += substr_count(utf8_encode(strtolower($ligne[$p])), strtolower($mots)); } } // Met à jour la colonne de l'algorithme avec les nouvelles valeurs $requeteAdd = $this->db->query("UPDATE $this->tableBDD SET $algo[1] = '$count' ".$conditions." $this->condition AND $algo[3] = '$ligne[0]'"); } } // Affiche au choix la fin de requête personnalisée ou les classements classiques if($algo[0] == true && $ordre[0] != true) { $this->orderBy = " ORDER BY $algo[1] $algo[2]"; } else if($algo[0] == true && $ordre[0] == true) { // Cumule l'algorithme et le classement classique si les deux sont sur "true" $this->orderBy = " ORDER BY $algo[1] $algo[2], $ordre[1] $ordre[2]"; } else { // Ajout des critères d'ordre (si l'option du tableau est sur "true") if($ordre[0] == true) { $this->orderBy = " ORDER BY $ordre[1] $ordre[2]"; } else { $this->orderBy = ""; } } /*-------------------------------------------------------------------*/ /*------------------------ Requête SQL totale -----------------------*/ /*-------------------------------------------------------------------*/ if(empty($orderLimitPerso) && $numberWP[0] != 0) { $this->requeteTotale = $this->db->get_results("SELECT $selectColumn FROM $this->tableBDD ".$conditions." $this->condition $this->orderBy $this->limitMinMax", ARRAY_A) or die("<div>Erreur dans la requête finale, vérifiez bien votre paramétrage complet !</div>"); // Pour calculer le nombre total de résultats justes $this->nbResults = $this->db->get_results("SELECT count(*) FROM $this->tableBDD ".$conditions." $this->condition", ARRAY_N) or die("<div>Erreur dans le comptage des résultats (problème de requête) !</div>"); $compte = $this->db->get_var("SELECT count(*) FROM $this->tableBDD ".$conditions." $this->condition") or die("<div>Erreur dans le comptage des résultats (problème de requête) !</div>"); } else if(!empty($orderLimitPerso) && $numberWP[0] != 0) { if($limit[0] == true && $ordre[0] == true) { $this->requeteTotale = $this->db->get_results("SELECT $selectColumn FROM $this->tableBDD ".$conditions." $this->condition $orderLimitPerso $this->orderBy $this->limitMinMax", ARRAY_A) or die("<div>Erreur dans la requête, vérifiez bien si les mots recherchés ne posent pas problème !</div>"); } else if($limit[0] == true && $ordre[0] == false) { $this->requeteTotale = $this->db->get_results("SELECT $selectColumn FROM $this->tableBDD ".$conditions." $this->condition $orderLimitPerso $this->limitMinMax", ARRAY_A) or die("<div>Erreur dans la requête, vérifiez votre paramétrage !</div>"); } else { $this->requeteTotale = $this->db->get_results("SELECT $selectColumn FROM $this->tableBDD ".$conditions." $this->condition $orderLimitPerso", ARRAY_A) or die("<div>Erreur dans la requête, vérifiez bien votre paramétrage complet !</div>"); } // Pour calculer le nombre total de résultats justes $this->nbResults = $this->db->get_results("SELECT count(*) FROM $this->tableBDD ".$conditions." $this->condition $orderLimitPerso", ARRAY_N); $compte = $this->db->get_var("SELECT count(*) FROM $this->tableBDD ".$conditions." $this->condition $orderLimitPerso"); } $this->nbResults = $this->nbResults[0][0]; // Récupération du nombre de résultats $compteTotal = $compte; self::$nbResultsChiffre = $compteTotal; // Affiche le résultat de la fonction de rappel Callback if(!empty($callback)) { // Enregistre le nombre de résultats totalisés par la requête totale $nbResultats = $this->nbResults; // Appel à la fonction de rappel avec quatre paramètres oblibatoires !!! // 1. une variable au choix pour récupérer l'ensemble de la requête (tableau) // 2. une variable au choix pour le nombre de résultats retournés par la requête totale // 3. une variable au choix pour l'ensemble des mots et expressions de la requête call_user_func_array($callback, array(&$this->requeteTotale, &$nbResultats, &$this->motsExpressions)); } else { echo "<p>Attention ! Aucune fonction de rappel appelée pour afficher les résultats</p>"; } }
public function moteurAffichage($callback = '', $colonnesSelect = '', $limit = array(false, 0, 10, false), $ordre = array(false, "id", "DESC"), $algo = array(false, 'algo', 'DESC', 'id'), $orderLimitPerso = '') { // Récupération des colonnes de sélections if (empty($colonnesSelect)) { $selectColumn = "*"; } else { if (is_array($colonnesSelect)) { $selectColumn = implode(", ", $colonnesSelect); } else { $selectColumn = $colonnesSelect; } } // Limite le nombre d'affichage par page if ($limit[0] == true) { self::$limitArg = $limit[1]; self::$limit = $limit[2]; if (!isset($limit[1])) { $limitDeb = 0; } else { if ($limit[1] == 0) { $limitDeb = $limit[1] * $limit[2]; } else { if ($limit[3] == false) { $limitDeb = $limit[1]; } else { $limitDeb = ($limit[1] - 1) * $limit[2]; } } } $this->limitMinMax = " LIMIT {$limitDeb}, {$limit['2']}"; } else { $this->limitMinMax = ""; } // Algorithme de pertinence (plus il y a de mots dans le résultat, plus c'est haut) if ($algo[0] == true) { // Ajout une colonne dans la base de données pour recueillir les valeurs de l'algorithme $ifColumnExist = $this->db->query("SHOW COLUMNS FROM {$this->tableBDD} LIKE '" . $algo[1] . "'"); $columnExist = mysqli_fetch_row($ifColumnExist); if ($columnExist[0] != $algo[1]) { $addColumn = $this->db->query("ALTER TABLE {$this->tableBDD} ADD " . $algo[1] . " DECIMAL(10,3)"); } $colonnesStrSQL = implode(', ', $this->colonnesWhere); $requeteType = $this->db->query("SELECT {$algo['3']}, {$colonnesStrSQL} FROM {$this->tableBDD} WHERE {$this->condition}") or die("Erreur : " . $this->db->error); while ($ligne = mysqli_fetch_row($requeteType)) { $count = 0; for ($p = 1; $p < count($this->colonnesWhere) + 1; $p++) { foreach ($this->algoRequest as $mots) { $count += substr_count(utf8_encode(strtolower($ligne[$p])), strtolower($mots)); } } // Met à jour la colonne de l'algorithme avec les nouvelles valeurs $requeteAdd = $this->db->query("UPDATE {$this->tableBDD} SET {$algo['1']} = '{$count}' WHERE {$this->condition} AND {$algo['3']} = '{$ligne['0']}'"); } } // Affiche au choix la fin de requête personnalisée ou les classements classiques if ($algo[0] == true && $ordre[0] != true) { $this->orderBy = " ORDER BY {$algo['1']} {$algo['2']}"; } else { if ($algo[0] == true && $ordre[0] == true) { // Cumule l'algorithme et le classement classique si les deux sont sur "true" $this->orderBy = " ORDER BY {$algo['1']} {$algo['2']}, {$ordre['1']} {$ordre['2']}"; } else { // Ajout des critères d'ordre (si l'option du tableau est sur "true") if ($ordre[0] == true) { $this->orderBy = " ORDER BY {$ordre['1']} {$ordre['2']}"; } else { $this->orderBy = ""; } } } /*-------------------------------------------------------------------*/ /*------------------------ Requête SQL totale -----------------------*/ /*-------------------------------------------------------------------*/ if (empty($orderLimitPerso)) { $this->requeteTotale = $this->db->query("SELECT {$selectColumn} FROM {$this->tableBDD} WHERE {$this->condition} {$this->orderBy} {$this->limitMinMax}") or die("<div>Erreur dans la requête finale, vérifiez bien votre paramétrage complet !</div>"); // Pour calculer le nombre total de résultats justes $this->nbResults = $this->db->query("SELECT count(*) FROM {$this->tableBDD} WHERE {$this->condition}") or die("<div>Erreur dans le comptage des résultats (problème de requête) !</div>"); $compte = $this->db->query("SELECT count(*) FROM {$this->tableBDD} WHERE {$this->condition}") or die("<div>Erreur dans le comptage des résultats (problème de requête) !</div>"); } else { if ($limit[0] == true && $ordre[0] == true) { $this->requeteTotale = $this->db->query("SELECT {$selectColumn} FROM {$this->tableBDD} WHERE {$this->condition} {$orderLimitPerso} {$this->orderBy} {$this->limitMinMax}") or die("<div>Erreur dans la requête, vérifiez bien votre paramétrage complet !</div>"); } else { if ($limit[0] == true && $ordre[0] == false) { $this->requeteTotale = $this->db->query("SELECT {$selectColumn} FROM {$this->tableBDD} WHERE {$this->condition} {$orderLimitPerso} {$this->limitMinMax}") or die("<div>Erreur dans la requête, vérifiez bien votre paramétrage complet !</div>"); } else { $this->requeteTotale = $this->db->query("SELECT {$selectColumn} FROM {$this->tableBDD} WHERE {$this->condition} {$orderLimitPerso}") or die("<div>Erreur dans la requête, vérifiez bien votre paramétrage complet !</div>"); } } // Pour calculer le nombre total de résultats justes $this->nbResults = $this->db->query("SELECT count(*) FROM {$this->tableBDD} WHERE {$this->condition} {$orderLimitPerso}"); $compte = $this->db->query("SELECT count(*) FROM {$this->tableBDD} WHERE {$this->condition} {$orderLimitPerso}"); } // Récupération du nombre de résultats $compteTotal = mysqli_fetch_row($compte); self::$nbResultsChiffre = $compteTotal[0]; // Affiche le résultat de la fonction de rappel Callback if (!empty($callback)) { // Enregistre le nombre de résultats totalisés par la requête totale $nbResultats = mysqli_fetch_row($this->nbResults); // Appel à la fonction de rappel avec quatre paramètres oblibatoires !!! // 1. une variable au choix pour récupérer l'ensemble de la requête (tableau) // 2. une variable au choix pour le nombre de résultats retournés par la requête totale // 3. une variable au choix pour l'ensemble des mots et expressions de la requête call_user_func_array($callback, array(&$this->requeteTotale, &$nbResultats[0], &$this->motsExpressions)); } else { echo "<p>Attention ! Aucune fonction de rappel appelée pour afficher les résultats</p>"; } }