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
[]Affichage des résultats avec pagination
- [[!+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.
($titre de la page)
Poids : ($poids)
Hauteur : ($hauteur)
Tapez : ($speed_type)
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
Modificateur | Description | Exemple |
---|---|---|
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
Modificateur | Description | Exemple |
---|---|---|
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`]]