Пример #1
0
	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>";
     }
 }