logo

pdoResources

Plus de détail

pdoResources est un remplacement de getResources. Comme tous les autres snippets de pdoTools, il n'utilise pas d'objets xPDO pour la représentation des ressources. Il fonctionne directement avec les tables de la base de données. Cela le rend plus rapide. Vous n'avez pas besoin de convertir les dates des ressources en horodatage avant de pouvoir les passer au filtre de sortie "date". Et il ne joint que les TV nécessaires, vous devez donc les spécifier dans la propriété &includeTVs sous forme de liste séparée par des virgules.

[[!pdoResources?
    &parents=`0`
    &includeTVs=`my_tv1,my_tv2`
    &tvPrefix=`tv.`
    &processTVs=`1`
    &includeContent=`1`
    &showLog=`1`
]]

L'une des caractéristiques les plus importantes de pdoTools est la propriété &showLog. Elle vous permet de vérifier la rapidité de l'extrait. S'agit-il d'une requête SQL lente ou d'un chunk  trop compliqué ? La propriété &showLog vous aidera à le déterminer.

0.0000689: pdoTools loaded
0.0000191: xPDO query object created0.0001979: Added selection of modResource: `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `alias_visible`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `content`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`
0.0000079: Processed additional conditions
0.0001051: Added where condition: modResource.published=1, modResource.deleted=0
0.0001261: Sorted by modResource.publishedon, DESC
0.0000029: Limited to 10, offset 0
0.0002160: SQL prepared "SELECT `modResource`.`id`, `modResource`.`type`, `modResource`.`contentType`, `modResource`.`pagetitle`, `modResource`.`longtitle`, `modResource`.`description`, `modResource`.`alias`, `modResource`.`alias_visible`, `modResource`.`link_attributes`, `modResource`.`published`, `modResource`.`pub_date`, `modResource`.`unpub_date`, `modResource`.`parent`, `modResource`.`isfolder`, `modResource`.`introtext`, `modResource`.`content`, `modResource`.`richtext`, `modResource`.`template`, `modResource`.`menuindex`, `modResource`.`searchable`, `modResource`.`cacheable`, `modResource`.`createdby`, `modResource`.`createdon`, `modResource`.`editedby`, `modResource`.`editedon`, `modResource`.`deleted`, `modResource`.`deletedon`, `modResource`.`deletedby`, `modResource`.`publishedon`, `modResource`.`publishedby`, `modResource`.`menutitle`, `modResource`.`donthit`, `modResource`.`privateweb`, `modResource`.`privatemgr`, `modResource`.`content_dispo`, `modResource`.`hidemenu`, `modResource`.`class_key`, `modResource`.`context_key`, `modResource`.`content_type`, `modResource`.`uri`, `modResource`.`uri_override`, `modResource`.`hide_children_in_tree`, `modResource`.`show_in_tree`, `modResource`.`properties` FROM `modx_site_content` AS `modResource` WHERE  ( `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 )  ORDER BY modResource.publishedon DESC LIMIT 10 "
0.0005879: SQL executed 0.0000281: Rows fetched
0.0002151: Returning processed chunks
0.0016940: Total time2 097 152: Memory usage

Il existe de nombreuses autres caractéristiques intéressantes, mais ce sont les plus importantes.

pdoPage


      pdoPage est un remplacement de getPage. Il y a quelques différences par rapport à getPage :
    1. Il n'affiche pas de pages vides. Si vous n'avez pas de résultats sur la page, ou si l'utilisateur a entré une mauvaise page manuellement - vous serez redirigé vers la première page.
    2. Il a une propriété &maxLimit, qui est fixée à 100 par défaut. Elle permet de s'assurer que les utilisateurs ne peuvent pas ralentir votre site en fixant &limit=100000 dans l'url. Si vous utilisez getPage, essayez de le faire sur votre site.
    3. Il définit les métatags des pages précédentes et suivantes pour les crawlers dans l'en-tête de la page.
    4. Il intègre une pagination ajax. Voici comment cela fonctionne :
  <div id="pdopage">
    <div class="rows">
      [[!pdoPage ?
         &parents=`0`
         &ajaxMode=`default``
      ]]
    </div>
  
  </div>

bien entendu, vous pouvez modifier le balisage en spécifiant des paramètres supplémentaires au snippet.

pdoMenu


Cet extrait peut remplacer Wayfinder. Il fonctionne généralement de la même manière, mais il est un peu plus rapide.

Comme les objets xPDO sont contournés, vous devez vérifier manuellement les autorisations des éléments du menu avec une propriété spéciale :

  [[!pdoMenu ?
     &parents=`10`
     &checkPermissions=`list`
  ]]

Par défaut, tous les contrôles d'autorisation sont désactivés. Cette propriété peut être utilisée sur tous les snippets de pdoTools, d'ailleurs.

pdoUsers


Ce snippet énumère les utilisateurs de votre site. Vous pouvez les filtrer par groupes et par rôles :

   [[!pdoUsers?     &groups=`Authors`     &sortdir=`asc`   ]]

Vous pouvez combiner cela avec pdoPage pour fournir une liste paginée des utilisateurs :

   [[!pdoPage?
    &element=`pdoUsers`
    &groups=`Authors`
    &roles=`Member`
    &sortby=`id`
    &sortdir=`asc`
  ]]
  

les Placeholders sont tous des champs des objets modUser et modUserProfile. Vous pouvez les voir tous si vous définissez simplement un paramètre &tpl vide (ou ne le définissez pas du tout, si le snippet n'a pas de valeur tpl par défaut).

Le &tpl vide est une autre caractéristique commune à tous les snippets de pdoTools.

pdoSitemap


pdoSitemap crée un sitemap rapide qui ne nécessite pas que la ressource soit définie en XML si la propriété &forceXML est activée (par défaut).
Il met les données en cache, et la clé de cache dépend des paramètres du snippet, mais vous pouvez également définir votre propre clé.
Pour voir à quelle vitesse elle est, nous pouvons la tester en désactivant &forceXML et en activant &showLog. Sur mon site, cela prend presque 30 secondes pour la première exécution et seulement 0,03 pour la seconde :

  [[!pdoSitemap?
    &forceXML=`0`
    &showLog=`1`
  ]]

Il y a 6873 ressources dans mon plan de site.

pdoNeighbors


Snippet pour faire des liens vers les pages précédentes, suivantes et supérieures du document actuel.

  [[!pdoNeighbors?     &sortby=`menuindex`     &sortdirc=`desc`   ]]

Juste les voisins, vous savez.

pdoCrumbs


Ma version d'un simple extrait pour les miettes de pain sur le site. Rien de spécial, sauf qu'il utilise le noyau pdoTools avec traitement rapide des morceaux et récupération des données.

  [[!pdoCrumbs]]

pdoTitle


Ce snippet génère la balise "title" des pages. Il lance pdoCrumbs et indique le chemin d'accès au document actuel dans le titre.

;<title>[[!pdoTitle]]]. / </titre>

>Il supporte pdoPage par défaut, vous verrez donc le nombre de pages dans le titre.

Questions / page 5 sur 593 / Sections / mysite.com</titre>

Les Crawlers adorent ça !

pdoField


Enfin, pdoField est un extrait qui permet d'obtenir n'importe quel champ à partir de n'importe quelle ressource. Il remplace à la fois les snippets UltimateParent et getResourceField.
Par exemple, nous devons obtenir le longtitle de la ressource avec id = 15

  [[pdoField ?     &id=`15`     &field=`longtitle`   ]]

Ou si nous voulons obtenir le titre de page du grand-parent du document actuel :

  [[pdoField ?     &id=`31`     &field=`pagetitle`     &top=`2`   ]]

Conclusion


Il est important de se rappeler que tous les snippets pdoTools utilisent le même noyau et que la plupart des paramètres peuvent être utilisés pour chacun d'entre eux.
Vous pouvez utiliser &showLog pour voir comment les snippets fonctionnent, vous pouvez spécifier des morceaux vides pour voir les places disponibles, et vous pouvez rejoindre des tables à la volée.
pdoTools est une bibliothèque, pas seulement un ensemble snippets. De nombreux MODX extras utilisent pdoTools pour leurs propres snippets, comme miniShop2, Tickets, BannerY, AjaxForm, et plus encore.
Et n'oubliez pas que tous les paramètres des snippets sont décrits à l'intérieur de ceux-ci. Il suffit d'ouvrir le snippet dans le gestionnaire et de voir l'onglet Propriétés.