Filtres Modx. Utiliser des conditions if else dans MODx

Aujourd'hui article utile sur les filtres phx et leurs modificateurs MODX Revo avec lequel vous pouvez manipuler la valeur de diverses balises directement à l'intérieur des modèles.

A quoi servent-ils ?

Les modificateurs phx facilitent la vie des développeurs modx. Disons que nous avons un site Web avec un carrousel d'images (ou une bannière) dont nous avons besoin sortie uniquement vers page d'accueil . Pour ce faire, placez-le simplement dans un morceau séparé, puis affichez-le dans le modèle en utilisant cette construction

Où: 1 — identifiant de la page d'accueil,
$carrousel— un morceau avec le code du carrousel (bannière).
Seules les théières pleines sont créées Nouveau modèle, pour le bien de quelques lignes de code carrousel. J'étais comme ça aussi, en général, nous ne désespérons pas et implémentons phx dans le développement.

Examinons la structure ci-dessus plus en détail :

[[*id:is=`1`:then=`[[$carusel]]`]]

*identifiant- affiche l'identifiant page actuelle;

:est=`1`:puis=

- vérifie s'il est égal *identifiant == 1? et s'il est égal, alors le contenu est affiché alors;
$carrousel— affiche le morceau du carusel.

Au lieu de *id, vous pouvez utiliser d'autres champs, par exemple *template - affichera le modèle actuellement utilisé. Ou vous pouvez vérifier si le champ TV est rempli ou non (que ce soit *mots-clés) et s'il est rempli, alors affichez-le. Examinons ce cas plus en détail. Le balisage standard est donné :

Tâche: n'affichez pas cette ligne si les mots clés TV sont vides.
Solution.

[[*mots-clés :!empty=` `]]

Charges

Vous devez faire attention au traitement des modificateurs ; leur utilisation irréfléchie entraînera des charges inutiles. Revenons au carrousel, cette entrée est lu de gauche à droite et MODH exécute toutes les conditions imbriquées, que la condition soit vraie ou non, que le contenu soit affiché sur la page en cours [[$carrousel]], dans tous les cas, son contenu sera traité. À cet égard, il est plus approprié de réécrire l'entrée :

[[$caru[[*id:is=`1`:then=`sel`]]]]

Dans ce cas, le contenu du chunk $carrousel, sera traité si la condition est remplie

*id:est=`1`

parce que effectué

[[*id:is=`1`:then=`sel`]]

et si l'identifiant de la page actuelle est 1, la dernière chose traitée est [[$carrousel]], si id n'est pas égal à 1 alors - [[$caru]]. Et si chunka $caru- s'il n'y a pas d'éléments, alors il n'y aura pas de charge.

En général, le résultat idéal ressemblerait à ceci.

[[$[[*id:is=`1`:then=`carusel`]]]]

Sur la façon d'intégrer correctement la mise en page dans modx révo Je recommande de lire ici.

Note! Vous pouvez combiner autant de modificateurs que vous le souhaitez en fonction de la logique des composants du site, mais la principale chose à retenir est que leur essence principale est faciliter le développement, et ne pas compliquer des tâches déjà complexes. Généralement le plus efficace et façon efficace- c'est le plus simple, car plus la conception est simple et claire, plus il sera facile de travailler avec elle à l'avenir. Vous trouverez ci-dessous les principaux modificateurs que vous pouvez utiliser pour n'importe quelle balise MODH Revo.

Chaînes de modificateurs

Un bon exemple le chaînage formatera la chaîne de date dans un format différent, comme ceci :

[[+mydate:strtotime:date=`%Y-%m-%d`]]

L'accès direct à la table "modx_user_attributes" dans la base de données à l'aide de modificateurs de sortie au lieu d'un extrait peut être effectué simplement en utilisant un modificateur informations utilisateur. Sélectionnez la colonne appropriée dans le tableau et spécifiez-la comme propriété de modificateur de sortie, par exemple, comme ceci :

Clé utilisateur interne : [[!+modx.user.id:userinfo=`internalKey`]] Connexion : [[!+modx.user.id:userinfo=`username`]] Nom complet : [[!+modx.user .id:userinfo=`fullname`]] Rôle : [[!+modx.user.id:userinfo=`role`]] E-mail : [[!+modx.user.id:userinfo=`email`]] Téléphone : [[!+modx.user.id:userinfo=`phone`]] Téléphone portable : [[!+modx.user.id:userinfo=`mobilephone`]] Fax : [[!+modx.user.id :userinfo=`fax`]] Anniversaire : [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]] Sexe : [[!+modx.user . id:userinfo=`gender`]] Pays : [[!+modx.user.id:userinfo=`country`]] État : [[!+modx.user.id:userinfo=`state`]] Code postal : [[!+modx.user.id:userinfo=`zip`]] Photo : [[!+modx.user.id:userinfo=`photo`]] Commentaire : [[!+modx.user.id:userinfo = `commentaire`]] Date Dernière connexion: [[!+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]] Nombre de connexions : [[!+modx.user.id:userinfo=`logincount` ] ]

Portez une attention particulière au point d'exclamation [[ ! +modx.user.id]]. Il permet NE PAS mettre en cache contenu de sortie. Pourquoi ne devriez-vous pas mettre en cache ? Imaginons ceci : il y a 5 utilisateurs sur le site. Le premier utilisateur a visité la page avec le défi :

Bienvenue, [[!+modx.user.id:userinfo=`username`]] !

Comme prévu, cette page affiche un message de bienvenue à l'utilisateur. Ainsi, si le résultat est mis en cache, la première fois que vous entrez sur cette page, le nom de l'utilisateur qui vient d'entrer sera enregistré et tous les autres ne verront pas leur nom, mais le nom de l'utilisateur qui est entré en premier sur cette page. . Pour éviter cela, nous ne mettons tout simplement pas cette balise en cache en utilisant point d'exclamation avant d'appeler [[ ! +modx…

P.s. : n'oubliez pas éteindre mettre en cache les balises là où c'est nécessaire ! Pour ce faire, vous avez besoin SE DÉBARRASSER des points d'exclamation ( ! ) . Les résultats de la plupart des extraits peuvent facilement être extraits du cache. Nous y reviendrons dans la prochaine leçon.

Les filtres dans Revolution vous permettent de manipuler la façon dont certaines balises sont traitées. Ils vous permettent de modifier les valeurs directement dans vos modèles.

Filtres d'entrée

Actuellement, les filtres d'entrée sont utilisés en préparation du traitement des filtres de sortie. Ils ne sont généralement utilisés qu’à l’intérieur du moteur MODX.

Filtres de sortie

Dans Revolution, les filtres de sortie se comportent de la même manière que PHx dans Evolution, seuls les filtres sont désormais intégrés directement dans le moteur MODX. La syntaxe ressemble à ceci :

[]

Les filtres peuvent être appliqués séquentiellement. Pour cela, écrivez-les consécutivement (de gauche à droite) :

[]

Les filtres peuvent également être utilisés pour modifier la sortie des extraits de code. Le filtre doit être précisé avant tous les paramètres (avant le point d'interrogation) :

[]

Modificateurs de sortie

Le tableau montre quelques modificateurs et des exemples de leur utilisation. Dans les exemples, les modificateurs sont appliqués aux espaces réservés, mais n'oubliez pas qu'ils peuvent être appliqués à n'importe quelle balise MODX. Assurez-vous que la balise que vous utilisez génère au moins quelque chose que le modificateur traitera.

Modificateurs de sortie conditionnels

Modificateur Description Exemple d'utilisation
si, entrée Passer du texte arbitraire en entrée pour le modificateur suivant [[*id:input=`[[+placeholder]]`:is=`1`:then=`Oui`:else=`Non`]]
ou OU [[+numbooks:is=`5`:or:is=`6`:then=`Il y a 5 ou 6 livres ici`:else=`Je ne sais pas combien de livres`]]
et Combiner plusieurs modificateurs avec un lien ET [[+numbooks:gt=`5`:and:lt=`10`:then=`Il y a de 5 à 10 livres ici`:else=`Il y a soit moins de 5, soit plus de 10 livres`]]
isequalto, isequal, égal à, égal à, est, eq Compare la valeur transmise avec la valeur définie. Si les valeurs correspondent, la valeur "alors" est affichée, sinon - "sinon" [[+numbooks:isequalto=`5`:then=`Il y a 5 livres ici`:else=`Je ne sais pas combien de livres`]]
notequalto, notequals, n'est pas, n'est pas, neq, ne Compare la valeur transmise avec la valeur définie. Si les valeurs ne correspondent PAS, la valeur "alors" est affichée, sinon - "sinon" [[+numbooks:notequalto=`5`:then=`Je ne sais pas combien de livres`:else=`Il y a 5 livres`]]
supérieur à égal à, égal ou supérieur à, ge, par exemple, isgte, gte Idem, seule la condition est « Supérieur ou égal à » [[+numbooks:gte=`5`:then=`Il y a 5 livres ou plus ici`:else=`Il y a moins de cinq livres ici`]]
est supérieur à, supérieur à, isgt, gt Pareil, seule la condition « Strictement plus » [[+numbooks:gt=`5`:then=`Il y a plus de cinq livres ici`:else=`Il y a 5 livres ou moins`]]
égal à moins que, moins à que égal à, el, le, islte, lte Idem, seule la condition est « Inférieur ou égal à » [[+numbooks:lte=`5`:then=`Il y a 5 livres ou moins ici`:else=`Il y a plus de cinq livres ici`]]
est inférieur à, est inférieur à, inférieur à, inférieur à, islt, lt Pareil, seule la condition « Strictement moins » [[+numbooks:lte=`5`:then=`Il y a moins de cinq livres ici`:else=`Il y a 5 livres ou plus ici`]]
cacher Masque l'élément si la condition est vraie [[+numbooks:lt=`1`:hide]]
montrer Affiche un élément si une condition est vraie [[+numbooks:gt=`0`:show]]
alors Utilisé pour créer des conditions [[+numbooks:gt=`0`:then=`Livres en stock !`]]
autre Utilisé pour créer des conditions (avec « alors ») [[+numbooks:gt=`0`:then=`Livres en stock!`:else=`Désolé, mais tout est épuisé.`]]
membre de, ismember, mo Vérifie si l'utilisateur est membre du groupe d'utilisateurs spécifié [[!+modx.user.id:memberof=`Administrateur`]]

Modificateurs pour travailler avec des chaînes

Modificateur Description Exemple d'utilisation
chat Ajoute une valeur après une balise [[+numbooks:cat=`livres`]]
lcase, minuscule, strtolower Convertit toutes les lettres en minuscules [[+titre:lcase]]
ucase, majuscule, strtoupper Convertit toutes les lettres en majuscules [[+titre :ucase]]
ucwords Met en majuscule la première lettre des mots [[+titre:ucwords]]
ucpremier Met en majuscule la première lettre d'une chaîne [[+nom:ucfirst]]
htmlent, entités html Convertit tous les caractères en entités HTML correspondantes [[+email:htmlent]]
esquiver, s'échapper Échappe les caractères en toute sécurité en utilisant expressions régulières et `str_replace()`. Échappe également aux balises MODX. [[+email:évasion]]
bande Remplace tous les traits d'union, tabulations et tout nombre d'espaces par un seul espace [[+documenttexte:bande]]
stripString Coupe la sous-chaîne spécifiée d'une chaîne [[+name:stripString=`M.`]]
remplacer Remplace les sous-chaînes [[+pagetitle:replace=`M.==Mme`]]
striptags, stripTags, notags, strip_tags Supprime toutes les balises (les balises autorisées peuvent être spécifiées). Ne pas utiliser pour des raisons de sécurité. [[+code:strip_tags]]
len, longueur, strlen Imprime la longueur d'une chaîne [[+chaîne longue:strlen]]
inverse, strev Inverse une chaîne caractère par caractère [[+texte miroir : inverse]]
retour à la ligne Insère un saut de ligne après chaque nième caractère (les mots ne sont pas interrompus) [[+bodytext:wordwrap=`80`]]
coupe-mot Insère un saut de ligne après chaque nième caractère, même si ce caractère est à l'intérieur d'un mot [[+bodytext:wordwrapcut=`80`]]
limite Imprime un nombre spécifié de caractères à partir du début d'une ligne (la valeur par défaut est 100) [[+description:limite=`50`]]
ellipse Ajoute des points de suspension et tronque la ligne si elle est plus longue que le nombre de caractères spécifié (la valeur par défaut est 100) [[+description:points de suspension=`50`]]
étiqueter Blindage. Affiche l'élément tel quel, sans le :tag. À utiliser dans la documentation [[+showThis:tag]]
ajouter, incrémenter, augmenter Ajoute le numéro spécifié (par défaut +1) [[+téléchargements:incr]] [[+blackjack:add=`21`]]
soustraire, décrémenter, décrémenter Soustrait le nombre spécifié (par défaut -1) [[+compte à rebours:decr]] [[+moneys:subtract=`100`]]
multiplier, mpy Multiplie par le nombre spécifié (par défaut *2) [[+tiercé gagnant:mpy=`3`]]
diviser,div Divise par le nombre spécifié (par défaut /2) [[+note:div=`4`]]
module,mod Renvoie le module d'un nombre (par défaut : %2, renvoie 0 ou 1) [[+numéro:mod]]
si vide, par défaut, vide, vide Renvoie la valeur du modificateur si la valeur de la balise est vide [[+name:default=`anonyme`]]
pas vide, !vide, sipasvide, n'est pas vide Renvoie la valeur du modificateur si la valeur de la balise Pas vide [[+name:notempty=`Bonjour [[+name]]!`]]
nl2br Remplace les personnages nouvelle ligne\n à la balise HTML br [[+fichier texte: nl2br]]
date Convertit l'horodatage en texte selon le format spécifié (format de date) [[+année de naissance:date=`%Y`]]
heure strtotime Convertit la date sous forme de texte en horodatage UNIX [[+l'heure:strtotime]]
date floue Accepte un horodatage et renvoie une date sous la forme "Aujourd'hui à 16h20" [[+createdon:fuzzydate]]
il y a Renvoie le nombre de secondes, minutes, semaines ou mois écoulés depuis la date spécifiée dans la balise. [[+créé il y a : il y a]]
md5 Crée un hachage MD5 d'une valeur [[+mot de passe:md5]]
données c Encapsule la sortie avec des balises CDATA [[+contenu:cdata]]
informations utilisateur Renvoie la valeur demandée à partir du profil utilisateur. ID utilisateur requis [[!+modx.user.id:userinfo=`nom d'utilisateur`]]
est connecté Renvoie 1 si l'utilisateur est autorisé dans le contexte actuel [[!+modx.user.id:isloggedin:is=`1`:then=`Oui`:else=`Non`]]
n'est pas connecté Renvoie 1 si utilisateur Pas autorisé dans le contexte actuel [[!+modx.user.id:isnotloggedin:is=`1`:then=`No`:else=`Oui`]]
code URL Convertit la valeur en URL, c'est-à-dire utilise la fonction PHP `urlencode()` [[+machaîne:urlencode]]
urldecode Convertit la valeur à partir d'une URL, c'est-à-dire utilise la fonction PHP `urldecode()` [[+monparam:urldecode]]

Les modificateurs pour travailler avec les utilisateurs doivent être appelés non mis en cache afin que chaque utilisateur voie les dernières données.

Utilisation de modificateurs de sortie avec des paramètres

Si une balise a des paramètres, alors ils doivent être écrits immédiatement après le modificateur :

[[!getResources:default=`Désolé, rien trouvé` ? &tplFirst=`blogTpl` &parents=`2,3,4,8` &tvFilters=`blog_tags==%[[!tag:htmlent]]%` &includeTVs=`1` ]]

Création d'un modificateur personnalisé

N’importe quel extrait peut être utilisé comme modificateur de sortie. Pour ce faire, spécifiez simplement le nom de l'extrait au lieu du modificateur. Par exemple, créons un extrait [] qui ajoute un certain nombre de points d'exclamation à la sortie :

[[*pagetitle:makeExciting=`4`]]

Un tel appel de balise transmettra les paramètres suivants à l'extrait makeExciting pour traitement :

Paramètre Signification Exemple de valeur

Bonne santé à tous. Dans cet article, je vais vous expliquer comment créer un filtre de documents basé sur les paramètres TV sur un site Web fonctionnant Révolution Modx. Nous utiliserons l'extrait gestionnaire de balises2 depuis Andchir. Cet extrait peut fonctionner avec plusieurs téléviseurs à la fois, ainsi qu'avec des données numériques (sous forme de prix) et une liste multiple. Nous analyserons chacun de ces exemples plus en détail.

1. Vous devez d’abord installer tagManager2

Pour ce faire, nous allons à Applications/Installateur/

appuie sur le bouton "Télécharger le module complémentaire" et entrez dans la barre de recherche gestionnaire de balises2

Vous devez également installer l'extrait de code getPage et getProducts. Ainsi la section "Gestion des paquets" devrait ressembler à ceci (l'extrait translittéré, d'ailleurs, est responsable de la translittération des alias en latin)

Téléchargez, installez les packages et accédez à "Les paramètres du système"

2. Configurez l'extrait tagManager2

DANS Les paramètres du système sélectionnez la section tag_manager2

Nous verrons les options de paramètres de filtre

Tout y est assez simple et clair, mais quand même :

  • DANS "ID de ressource d'annuaire de niveau supérieur" spécifiez l'identifiant du modèle de catalogue ou de la catégorie où les produits ou les pages seront filtrés
  • DANS "Délimiteur de liste multiple supplémentaire" mettez le signe #. Vous découvrirez ci-dessous pourquoi cela est nécessaire
  • DANS "TV ou plusieurs noms de champs de liste" enregistrer le téléviseur avec une liste multiple. Je vais vous montrer comment les créer ci-dessous.
  • "Noms de téléviseurs ou de champs avec valeurs numériques» - ici, vous devez spécifier les paramètres du téléviseur, qui contiendront des chiffres. Il s'agit généralement d'un paramètre de prix. Ce filtre sera affiché sous forme de curseur « de et vers »
  • DANS « ID de modèle de produit » nous notons l'identifiant des pages qui doivent être filtrées et auxquelles sont attachés les paramètres TV spécifiés ci-dessus
  • DANS "Nom du jeu de paramètres utilisé pour le filtrage" enregistrez catalog_filters. Ce modèle nous utiliserons dans les modèles de paramètres obtenir la page Et obtenir des produits
  • Inscrivez-vous dans « Snippet associé à un ensemble de paramètres » le nom de l'extrait qui affichera et paginera les pages ou les produits. Habituellement ceci obtenir la page.

3. Créez un ensemble de paramètres catalog_filters dans getPage

Passons à l'extrait getPage

Allez dans l'onglet "Options" et appuyez sur le bouton "Ajouter un jeu de paramètres". Vous pouvez bien sûr modifier celui existant, mais il est alors possible d'écraser les paramètres que nous allons maintenant créer lors de la mise à jour de getPage. Si vous ne souhaitez pas mettre à jour, vous pouvez simplement modifier.

Modifiez les paramètres existants et attribuez des valeurs :

Créer de nouveaux paramètres et attribuer des valeurs

Les paramètres modifiés seront affichés vert, créé - violet

4. Créez ou modifiez les paramètres TV pour le filtre

J'ai créé 3 paramètres TV par exemple

Je voudrais attirer une attention particulière sur le fait que vous devez spécifier le nom (titre) du paramètre TV, sinon il risque tout simplement de ne pas être affiché dans le module de contrôle du filtre.

​5.Créez un morceau filtr_tpl

Ce morceau est responsable de la sortie de chaque résultat individuel dans getProducts

6. Créez une structure dans l'arborescence du document

Pour moi, cela ressemble à ceci :

Notre page principale a l'ID 1 et les produits ont l'ID de modèle 1 (nous l'avons dans les paramètres tag_manager2, si vous avez d'autres valeurs, n'oubliez pas de le modifier dans les paramètres)

7. Modifier les filtres.js

Allons à l'adresse /assets/components/tag_manager2/js/web/filters.js et plutôt

Multitags : ["tags"],//Noms supplémentaires. champs avec plusieurs valeurs

insérez le code avec nos valeurs substituées

Multitags : ["filtr1", "filtr2"],//Noms supplémentaires. champs avec plusieurs valeurs

Tout ici est extrêmement simple et clair. Nous avons inséré nos champs TV avec plusieurs valeurs. En général, c'est une config de tous les paramètres (mais il vaut mieux ne pas y toucher sans l'autorisation des gros, je veux dire les conseils des créateurs du module)

8. Afficher le filtre et les résultats du filtrage

Le filtre lui-même

[]
[[+filtres]]

Affichage des résultats avec pagination

[[!tmCatalogue]]
    [[!+page.nav]]

Tri des résultats

9. Activez le filtre

Il ne nous reste plus qu'à activer notre filtre. Pour ce faire, nous allons à Gestion des applications/filtres.

Ici, vous devez cocher les cases à côté de chaque filtre et cliquer sur le bouton"Sauvegarder" .

Si vous avez tout fait correctement, le filtre devrait fonctionner. C'est tout. Si vous avez des questions, posez-les dans les commentaires, j'essaierai d'y répondre. En général, voici la documentation de tagManager2 . Bonne chance dans le développement. DANS "Démo" un de mes sites qui implémente un filtre utilisant tagManager2

Oui, une autre façon d'implémenter un filtre Ajax sur un site web =)

Commençons par un simple affichage d'une liste régulière de ressources sur la page. Assurez-vous de vous assurer que la pagination AJAX fonctionne correctement, car nous n'écrirons pas nos propres mécanismes pour travailler avec AJAX, mais utiliserons les méthodes AJAX qui se trouvent dans pdoPage.

("!pdoPage" | extrait : [ "ajaxMode" => "default", "parents" => 0, "limit" => 3, "includeTVs" => "height,weight,speed_type,price", "tvPrefix" => "", "tpl" => "@INLINE

($titre de la page)

Poids : ($poids)

Hauteur : ($hauteur)

Tapez : ($speed_type)

", ]}
("page.nav" | espace réservé)

Pour les filtres, j'utiliserai cette disposition. Mais la mise en page ne joue pas ici un rôle particulier - l'essentiel est de spécifier les classes correctes dans le code JS.


Le code JS de traitement du filtre ressemble à ceci :

$(document).on("change keyup", "#filters input", function())( // Vérifier que pdoPage est connecté if (typeof(pdoPage) == "undefined") return; // Collecter les valeurs ​​de tous les filtres dans un seul tableau var field = (); $.each($("#filters").serializeArray(), function())( // Si le paramètre n'est pas un tableau (case à cocher), alors tout est simple si (this.name.indexOf( "")<= 0) { fields = this.value; } else { // Для чекбоксов посложнее var name = this.name.replace("",""); if (typeof(fields) == "undefined") { fields = ; } fields.push(this.value); } }); // И отправляем этот массив на сервер. $.post(document.location.href, { action: "filter", fields: fields, // Параметр hash - обязательный (он содержит настройки pdoPage) hash: pdoPage.configs.page.hash }, function(data) { // Просим pdoPage загрузить новый список ресурсов var tmp = document.location.href.split("?"); pdoPage.keys.page = 0; pdoPage.loadPage(tmp, pdoPage.configs.page); }); });
Déjà maintenant, lors de la modification des valeurs du filtre, la liste des ressources sera mise à jour. Il ne reste plus qu'à « expliquer » comment traiter les filtres. Pour ce faire, créez un plugin pour l'événement SurHandleRequest:

contexte->clé == "mgr" || vide($_SERVER["HTTP_X_REQUESTED_WITH"]) || $_SERVER["HTTP_X_REQUESTED_WITH"] != "XMLHttpRequest") return; switch ($_POST["action"]) ( case "filter": $output = array("success" => false, "message" => ""); // Vérifiez que le hachage a été reçu et les paramètres pdoPage existe si ( isset($_POST["hash"]) && !empty($_POST["hash"]) && isset($_SESSION["pdoPage"][$_POST["hash"]]) && !empty($ _SESSION[" pdoPage"][$_POST["hash"]])) ( $hash = (string) $_POST["hash"]; // Spécifie uniquement les téléviseurs disponibles pour le filtrage $tvs = array("height"," poids" ,"speed_type"); // Remplir la condition de sélection $where = array(); switch ($tv) ( case "price": // Exemple de traitement des cases à cocher if (isset($_POST[ "fields"] ["price"]) && !empty($_POST["fields"]["price"])) ( $where_price = ; foreach ($_POST["fields"]["price"] as $range ) ( $value = éclater("-", $range); if (count($value) != 2) ( continuer; ) $min = (int) $max = (int) $where_range = "CAST( `TVprice`.`value` AS DECIMAL(13,3)) >= " . $min; if ($max) ( $where_range .= " AND CAST(`TVprice`.`value` AS DECIMAL( 13.3))<= " . $max; } $where_price = "(" . $where_range . ")"; } $where = "(" . implode(" OR ", $where_price) . ")"; } break; default: if (isset($_POST["fields"][$tv]) && $_POST["fields"][$tv] !== "") { $where[$tv] = $_POST["fields"][$tv]; } break; } } // Добавляем это условие в параметры pdoPage "на лету" $_SESSION["pdoPage"][$hash]["where"] = $where; $output["message"] = $where; $output["success"] = true; } else { $output["message"] = "Error"; } echo $modx->toJSON($sortie); mourir();
casser; par défaut : pause ; ) Maintenant, nos filtres fonctionnent. La seule chose est que pdoPage "ne sait pas" quoi afficher lorsqu'aucun résultat n'est trouvé. Pour prendre en compte ce cas, créons un fichier pdopage.custom.js:

et précisez-le dans le paramètre
frontend_js autre("!pdoPage" | extrait : [ "ajaxMode" => "default", "frontend_js" => "/assets/components/pdotools/js/pdopage.custom.js", "parents" => 0, "limite" => 3, // ... )

Dans le code standard nous ajouterons uniquement la condition
si la réponse du serveur est vide :

// ... pdoPage.loadPage = function (href, config, mode) ( // ... $.post(config["connectorUrl"], params, function (réponse) ( if (réponse && réponse["total" ]) ( // ... ) else ( // Ajouter une condition else wrapper.find(rows).html("Nothing found"); wrapper.find(pagination).html(""); wrapper.removeClass(" chargement"); wrapper.css((opacité: 1)); if (config["mode"] == "default") ( $("html, body").animate((scrollTop: wrapper.position(). haut - 50 || 0), 0); //... Ceci complète le simple filtre AJAX..

Dans cet article, je voudrais vous parler

filtres (modificateurs) dans MODx En principe, vous pouvez vivre sans eux, mais sachant comment et où ils sont utilisés, le développeur reçoit un outil puissant avec lequel vous pouvez ajouter une logique petite, mais parfois très utile, à votre site.. La possibilité d'appliquer des filtres existe grâce à l'extrait PHx, qui par défaut est déjà intégré au noyau MODx Revolution, mais PHx n'est pas inclus dans le noyau Evolution, il doit donc être installé séparément sur Evo.

Donc, filtres vous permettent de manipuler les données obtenues à la suite de l'analyse des espaces réservés et des balises. Ils offrent une opportunité modifier données directement dans vos modèles.

La syntaxe des filtres est la suivante :

C’est très pratique qu’ils puissent être disposés en chaînes :

Parallèlement, il est également possible de transmettre des paramètres aux extraits. L'essentiel est que le filtre soit écrit entre le nom de l'extrait et le point d'interrogation :

Le tableau suivant répertorie certains des filtres et exemple leur montrant application. Bien que les exemples utilisent un espace réservé, des filtres peuvent être appliqués à n'importe quelle balise MODx. Assurez-vous que l'espace réservé renvoie réellement quelque chose.

Modificateurs conditionnels

ModificateurDescriptionExemple
ou Peut être utilisé avec des modificateurs de chaîne pour créer une relation ET logique
et Peut être utilisé avec des modificateurs de chaîne pour créer une relation logique « OU »
isequalto, isequal, égal à, égal à, est, eq Compare la sortie avec la valeur spécifiée et, si elle correspond, continue l'analyse de la balise. Utilisé conjointement avec "alors" et "else" [[+numbooks:isequalto=`5`:then=`Il y a 5 livres !`:else=`Je ne sais pas combien de livres`]]
notequalto, notequals, n'est pas, n'est pas, neq, ne Compare la sortie avec la valeur spécifiée et, si elle ne correspond pas, continue l'analyse de la balise. Utilisé conjointement avec "alors" et "else" [[+numbooks:notequalto=`5`:then=`Je ne sais pas combien de livres`:else=`Il y a 5 livres !`]]
supérieur à égal à, égal ou supérieur à, ge, par exemple, isgte, gte

Compare la sortie avec la valeur spécifiée et, si la sortie est supérieure ou égale à la valeur transmise, continue l'analyse de la balise. Utilisé conjointement avec "alors" et "else"

[[+numbooks:gte=`5`:then=`Il y a 5 livres ou plus de 5 livres`:else=`Il y a moins de 5 livres`]]
est supérieur à, supérieur à, isgt, gt

Compare la sortie avec une valeur donnée. Si la sortie est plus grande, l'analyse continue. Utilisé avec "alors" et "sinon"

[[+numbooks:gt=`5`:then=`Il y a plus de 5 livres`:else=`Il y a moins de 5 livres`]]
égal à moins que, moins à que égal à, el, le, islte, lte Compare la sortie avec la valeur spécifiée et, si la sortie est inférieure ou égale à la valeur transmise, continue l'analyse de la balise. Utilisé conjointement avec "alors" et "else" [[+numbooks:lte=`5`:then=`Il y a 5 ou moins de 5 livres`:else=`Il y a plus de 5 livres`]]
est inférieur à, est inférieur à, inférieur à, inférieur à, islt, lt Compare la sortie avec une valeur donnée. Si la sortie est inférieure, l'analyse continue. Utilisé avec "alors" et "sinon" [[+numbooks:lte=`5`:then=`Moins de 5 livres`:else=`Plus de 5 livres`]]
cacher Vérifie les conditions précédentes. S'ils étaient vrais, masque l'élément. [[+numbooks:lt=`1`:hide]]
montrer Vérifie les conditions précédentes. S'ils étaient vrais, affiche l'élément. [[+numbooks:gt=`0`:show]]
alors Utilisé à la suite d'une condition [[+numbooks:gt=`0`:then=`Maintenant disponible !`]]
autre Utilisé à la suite d’une condition. Utilisé conjointement avec « puis » [[+numbooks:gt=`0`:then=`Maintenant disponible !`:else=`Désolé, actuellement épuisé.`]]
membre de, ismember, mo Renvoie le résultat de la vérification si un utilisateur appartient à un groupe donné. [[+modx.user.id:memberof=`Administrateur`]]

Modificateurs de chaîne

ModificateurDescriptionExemple
chat Ajoute la chaîne spécifiée à la sortie si la sortie n'est pas vide. [[+numbooks:cat=` livres`]]
lcase, minuscule, strtolower Convertit tous les caractères d'une chaîne en minuscules. Identique à la fonction PHP strtolower [[+titre:lcase]]
ucase, majuscule, strtoupper Convertit tous les caractères d'une chaîne en majuscules. Identique à la fonction PHP strtoupper [[+titre :ucase]]
ucwords Convertit les premières lettres de tous les mots d'une chaîne en majuscules. Identique à la fonction PHP ucwords [[+titre:ucwords]]
ucpremier Convertit la première lettre d'une chaîne en majuscule. Identique à la fonction PHP ucfirst [[+nom:ucfirst]]
htmlent, entités html

Identique à la fonction PHP htmlentities. Utilise la valeur actuelle du paramètre système "modx_charset" avec l'indicateur ENT_QUOTES

[[+email:htmlent]]
échap, évasion Mnémonise les caractères en toute sécurité à l'aide d'expressions régulières et de str_replace. Comprend également [, ] et ` [[+email:évasion]]
bande Remplace tous les sauts de ligne, tabulations et espaces multiples par un seul espace. [[+documenttexte:bande]]
stripString Supprime la sous-chaîne spécifiée d'une chaîne. [[+name:stripString=`M.`]]
remplacer Remplace une sous-chaîne par une autre. [[+pagetitle:replace=`M.==Mme`]]
striptags, stripTags, notags, strip_tags Supprime toutes les balises PHP et HTML à l'exception de celles spécifiées. Identique à la fonction PHP strip_tags [[+code:strip_tags=`

`]]

len, longueur, strlen Imprime la longueur de la chaîne. Identique à la fonction PHP strlen [[+chaîne longue:strlen]]
inverse, strev Identique à la fonction PHP strrev [[+texte miroir : inverse]]
retour à la ligne Identique à la fonction PHP wordwrap. Prend la valeur optimale pour définir la position de retour à la ligne. [[+bodytext:wordwrap=`80`]]
coupe-mot Identique à la fonction PHP wordwrap avec des sauts de mots. Prend la valeur optimale pour définir la position de retour à la ligne. [[+bodytext:wordwrapcut=`80`]]
limite Limite (tronque) la longueur d'une chaîne dans un nombre spécifié de caractères. La limite de longueur par défaut est de 100 caractères. [[+description:limite=`50`]]
ellipse Coupe une chaîne au nombre spécifié de caractères et ajoute des points de suspension. La limite par défaut est de 100 caractères. [[+description:points de suspension=`50`]]
étiqueter Affiche l'élément appelé sans :tag. Utile pour la documentation, par exemple, comme la mienne =) [[+showThis]]
mathématiques Renvoie le résultat des calculs (déconseillé car cela crée une charge sur le processeur)
ajouter, incrémenter, augmenter Renvoie une valeur incrémentée d'un montant spécifié (par défaut, de un) [[+téléchargements :incr]]
[[+blackjack:add=`21`]]
soustraire, décrémenter, décrémenter Décrémente la valeur spécifiée à partir d'une valeur (par défaut : -1) [[+compte à rebours :décr]]
[[+argent:soustraire=`100`]]
multiplier,mpy Renvoie le résultat de la multiplication par un nombre (par défaut : *2) [[+tiercé gagnant:mpy=`3`]]
diviser,div Renvoie le résultat de la division par un nombre (par défaut : /2) 0 n'est pas autorisé. [[+note:div=`4`]]
module,mod Renvoie le reste d'une division (par défaut : %2, renvoie 0 ou 1) [[+numéro:mod]]
si vide, par défaut, vide, vide Renvoie la chaîne donnée si la sortie est vide. [[+name:default=`anonyme`]]
pas vide, !vide, sipasvide, n'est pas vide Renvoie la chaîne donnée si la sortie n'est pas vide. [[+name:notempty=`Bonjour [[+name]]!`]]
nl2br Identique à la fonction PHP nl2br. Tous les sauts de ligne sont remplacés par
[[+fichier texte: nl2br]]
date Identique à la fonction PHP strftime. Le format est passé en valeur. Voir Formats de dates. [[+année de naissance:date=`%Y`]]
heure strtotime Identique à la fonction PHP strtotime. S'applique uniquement aux dates. Voir Formats de dates. [[+l'heure:strtotime]]
date floue Renvoie la date au format « aujourd'hui à 13h40 », « hier à 18h40 ». [[+publié le:fuzzydate]]
il y a Renvoie le nombre de secondes, minutes, heures, semaines, etc. entre une date et le moment actuel. S'applique uniquement aux dates [[+créé il y a : il y a]]
md5 Identique à la fonction PHP md5. [[+mot de passe:md5]]
données c Entoure une chaîne entre les balises CDATA. [[+contenu:cdata]]
informations utilisateur Renvoie les données utilisateur demandées. S'applique à l'ID utilisateur dans MODx. Le modificateur contient le champ qui doit être renvoyé. [[+modx.user.id:userinfo=`nom d'utilisateur`]]
est connecté Renvoie "true" si l'utilisateur est autorisé dans ce contexte. [[+modx.user.id:isloggedin]]
n'est pas connecté Renvoie "true" si l'utilisateur est autorisé dans ce contexte [[+modx.user.id:isnotloggedin]]
code URL Identique à la fonction PHP urlencode [[+machaîne:urlencode]]
urldecode Identique à la fonction PHP urldecode [[+monparam:urldecode]]

Création de modificateurs personnalisés

Les extraits peuvent être utilisés comme modificateurs. Pour ce faire, remplacez simplement le nom du filtre par le nom de l’extrait. Par exemple, nous avons un extrait appelé "makeDownloadLink".

[[+file:makeDownloadLink=`notitle`]]

Cet appel transmettra les paramètres suivants à l'extrait :


Le résultat sera ce qui sera retourné fragment.

Exemples d'utilisation

Voici un exemple où les filtres sont appelés les uns après les autres. Cet exemple formate une date d'une chaîne dans un autre format :

[[+mydate:strtotime:date=`%Y-%m-%d`]]

L'accès direct à la table modx_user_attributes depuis la base de données à partir de l'extrait peut être remplacé en utilisant simplement le modificateur userinfo. Pour obtenir le champ obligatoire, vous devez transmettre le nom de la colonne de la base de données aux paramètres du modificateur.

Clé interne : [[!+modx.user.id:userinfo=`internalKey`]]

Nom d'utilisateur : [[!+modx.user.id:userinfo=`username`]]

Nom complet : [[!+modx.user.id:userinfo=`fullname`]]

Rôle : [[!+modx.user.id:userinfo=`role`]]

E-mail : [[!+modx.user.id:userinfo=`email`]]

Téléphone : [[!+modx.user.id:userinfo=`phone`]]

Mobile : [[!+modx.user.id:userinfo=`mobilephone`]]

Télécopie : [[!+modx.user.id:userinfo=`fax`]]

Date de naissance : [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]]

Sexe : [[!+modx.user.id:userinfo=`gender`]]

Pays : [[+modx.user.id:userinfo=`country`]]

Région : [[+modx.user.id:userinfo=`state`]]

Code postal : [[+modx.user.id:userinfo=`zip`]]

Avatar : [[+modx.user.id:userinfo=`photo`]]

Partager