Skip to main content

🔧 pdoTools

pdoTools – schnelle Alternative für klassische MODX-Snippets

pdoTools kann folgende Extras für MODX Revolution ersetzen:

  • pdoResources – schneller Ersatz für getResources
  • pdoCrumbs – schneller Ersatz für `BreadCrumb]
  • pdoField – schneller Ersatz für getResourceField und UltimateParent
  • pdoPage – schneller Ersatz für getPage
  • pdoMenu – schneller Ersatz für Wayfinder

siehe auch: docs-pdoTools (englisch)

pdoToos hat mehr Funktionen und ist eine schnellere Alternative zu den anderen Snippets. Daher ist die Syntax nicht immer gleich.

Ein Grund für die Geschwindigkeit ist z.B. dass der Parameter includeTVs in pdoResources kein einfacher Schalter (boolean) ist, um die TV-Abfrage zu aktivieren. Hier gebt ihr die gewünschten TVs an, z.B.:
includeTVs=`tvClass,tvPfad,tvDatum` – es werden also nur geziehlt TVs abgefragt!


🧩 Anwendungsbeispiele

🥖 Brotkrümel (pdoCrumbs)

[[!pdoCrumbs?
  &context=`web5`
  &depth=`2`
  &showHome=`1`
  &showAtHome=`0`
  &showContainer=`1`
  &tplWrapper=`@INLINE <ul class="breadcrumb">[[+output]]</ul>`
  &tplCurrent=`@INLINE <li>[[+menutitle]]</li>`
  &tpl=`@INLINE <li><a href="[[+link]]">[[+menutitle]]</a></li>`
  &outputSeparator=``
]]

🧭 Navigationsmenü (pdoMenu)

[[!pdoMenu?
  &context=`web5`
  &parents=`0`
  &level=`2`
  &tpl=`tplBS3.WF.row`
  &tplOuter=`@INLINE [[+wf.wrapper]]`
  &tplParentRow=`tplBS3.WF.row.parent`
  &tplInnerRow=`tplBS3.WF.row.inner`
]]

🧭 Navigationsmenü mit der Anzahl der Kinder

[[pdoMenu?
    &context=`web5`
    &parents=`0`
    &level=`2`
    &countChildren=`1`
    &tplInner=`@INLINE [[+wrapper]]`
    &tplParentRow=`@INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a> ([[+children]])</li>[[+wrapper]]`
]]

📄 Inhalte aus den Kindressourcen (pdoResources)

[[!pdoResources?
   &context=`web3`
   &parents=`[[*id]]`
   &tpl=`tplBS3-2Column`
   &limit=`0`
   &idx=`0`
   &includeContent=`1`
   &showUnpublished=`0`
   &includeTVs=`tvGaleriePfad`
   &sortby=`menuindex`
   &sortdir=`asc`
]]

Info zur Eigenschaft &idx=`0`:
Bei pdoTools 1.9.7-pl scheint das Festlegen einer Start-IDX nicht zu funktionieren. Bei mir startet diese immer mit einer 1 (bei getResources funktioniert es). Scheint ein Bug zu sein? Habe das derzeit im entsprechenden Template mit einem Output Filter so gelöst:

[[+idx:add=`-1`]]

🧭 Wayfinder mit UltimateParent

[[!Wayfinder?
  &contexts=`web2`
  &startId=`[[UltimateParent? &topLevel=`1`]]`
  &level=`1`
  &rowTpl=`tplBS.WF.row`
  &outerTpl=`tplBS.WF.outer`
  &parentRowTpl=`tplBS.WF.row.parent`
  &innerRowTpl=`tplBS.WF.row.inner`
]]

🧭 dasselbe mit pdoMenu und pdoField

[[!pdoMenu?
  &context=`web2`
  &parents=`[[*id:pdoField=`{"topLevel":1,"field":"id"}`]]`
  &level=`1`
  &tpl=`tplBS.WF.row`
  &tplOuter=`tplBS.WF.outer`
  &tplParentRow=`tplBS.WF.row.parent`
  &tplInnerRow=`tplBS.WF.row.inner`
]]

oder

[[!Wayfinder? &contexts=`web` &level=`1` &startId=`[[UltimateParent]]` &rowTpl=`wfRow` &hereTpl=`wfHere` &rowIdPrefix=`menu`]]

mit dem pdoMenu

[[!pdoMenu? &context=`web` &parents=`[[*id:pdoField=`{"topLevel":1,"field":"id"}`]]` &level=`1` &tpl=`wfRow` &tplHere=`wfHere` &rowIdPrefix=`menu`]]

🧱 getResources – Spaltentext aus den Childs parsen

[[*id:is=`42`:then=`
[[!getResources:default=``?
   &context=`web2`
   &parents=`[[*id]]`
   &tpl=`web2tplGrid`
   &limit=`0`
   &depth=`0`
   &includeContent=`1`
   &showUnpublished=`0`
   &showHidden=`0`
   &sortby=`menuindex`
   &sortdir=`asc`
]]`:else=``]]

dasselbe mit pdoResources

[[*id:is=`42`:then=`
[[!pdoResources:default=``?
   &context=`web2`
   &parents=`[[*id]]`
   &tpl=`web2tplGrid`
   &limit=`0`
   &depth=`0`
   &includeContent=`1`
   &showHidden=`0`
   &showUnpublished=`0`
   &sortby=`menuindex`
   &sortdir=`asc`
]]`:else=``]]

(showHidden ist bei pdoResources 1 vorgegeben)

web2tplGrid (Beispiel für Bootstrap 5)

<div class="grid-item col-md-6">
[[+tv.Seitentitel:is=`ja`:then=`<h4>[[+longtitle:default=`[[+pagetitle]]`]]</h4>`:else=``]]
[[+introtext:notempty=`<span class="float-end [[+introtext]]"></span>`]]
[[+content]]
</div>

📅 getResources für aktuelle Events (tvFilters nach Datum)

[[!getResources:default=`Keine Events vorhanden`?
    &context=`web`
    &parents=`62`
    &tpl=`tplEvents`
    &limit=`20`
    &sortbyTV=`tvEventDateEnd`
    &sortdirTV=`asc`
    &sortby=``
    &includeContent=`1`
    &tvFilters=`tvEventDateEnd>=[[!getStrftime? &format=`%Y-%m-%d %H:%M`]]`
]]

dasselbe mit pdoResources

[[!pdoResources:default=`Keine Events vorhanden`?
    &context=`web`
    &parents=`62`
    &depth=`0`
    &tpl=`tplEvents`
    &limit=`20`
    &includeContent=`1`
    &showUnpublished=`0`
    &includeTVs=`tvEventDateEnd`
    &sortby=`tvEventDateEnd`
    &sortdir=`asc`
    &tvFilters=`tvEventDateEnd>=[[!getStrftime? &format=`%Y-%m-%d %H:%M`]]`
]]

📄 getResources für eine One-Page-Seite (alle Parent-Ressourcen)

[[getResources?
  &context=`web6`
  &parents=`0`
  &limit=`0`
  &depth=`0`
  &sortby=`menuindex`
  &sortdir=`asc`
  &includeTVs=`1`
  &processTVs=`1`
  &includeContent=`1`
  &tpl=`web6tplContent`]]

dasselbe mit pdoResources für eine One-Page-Seite

[[pdoResources?
    &context=`web6`
    &parents=`0`
    &resources=`[[pdoMenu:striptags? &context=`web6` &parents=`0` &level=`0` &tpl=`@INLINE [[+id]]`]]`
    &depth=`0`
    &limit=`0`
    &tpl=`web6tplContent`
    &includeContent=`1`
    &showUnpublished=`0`
    &includeTVs=`tvClass,tvClassCol,tvGaleriePfad`
    &sortby=`menuindex`
    &sortdir=`asc`
]]

Hier muss auch der Parameter &resources angegeben werden, z.B.:
&resources=`351,367,350,349,358,365,370,352`

Ich Liste alle Ressourcen IDs dynamisch mit dem pdoMenu auf.


📄 getResources Pagination mit getPage

[[!getPage:default=`Keine Events vorhanden`?
   &context=`web7`
   &element=`getResources`
   &elementClass=`modSnippet`
   &parents=`[[*id]]`
   &depth=`0`
   &limit=`5`
   &tpl=`tplEvents`
   &pageVarKey=`page`
   &pageFirstTpl=`<li class="control"><a[[+classes]][[+title]] href="[[+href]]">Erste</a></li>`
   &pageLastTpl=`<li class="control"><a[[+classes]][[+title]] href="[[+href]]">Letzte</a></li>`
   &dateFormat=`%Y-%m-%d`
   &includeContent=`1`
   &showHidden=`0`
   &includeTVs=`1`
   &sortbyTV=`tvEventDateEnd`
   &sortdirTV=`asc`
   &sortby=``
   &tvFilters=`tvEventDateEnd>=[[!getStrftime? &format=`%Y-%m-%d %H:%M`]]`
]]
</div>

[[!+page.nav:notempty=`
<div class="paging">
<ul class="pageList">
[[!+page.nav]]
</ul>
</div>
`]]

dasselbe mit pdoResources und pdoPage

[[!pdoPage:default=`Keine Events vorhanden`?
    &context=`web7`
    &element=`pdoResources`
    &parents=`[[*id]]`
    &depth=`0`
    &limit=`5`
    &tpl=`tplEvents`
    &pageLimit=`100`
    &includeContent=`1`
    &showUnpublished=`0`
    &includeTVs=`tvEventDateEnd`
    &sortby=`tvEventDateEnd`
    &sortdir=`asc`
    &tplPage=`@INLINE <li><a href="[[+href]]">[[+pageNo]]</a></li>`
    &tplPageWrapper=`@INLINE <div class="pagination"><ul class="pageList">[[+first]][[+prev]][[+pages]][[+next]][[+last]]</ul></div>`
]]

[[!+page.nav]]

(habe hier meine eigene ul-Klasse "pageList" eingetragen)


🧩 Parent Title anzeigen

[[getResourceField? &id=`[[UltimateParent]]` &field=`menutitle`]]

dasselbe mit pdoField

[[*id:pdoField=`{"topLevel":1,"field":"menutitle"}`]]

oder

[[!pdoField? &id=`[[*id]]` &field=`pagetitle` &top=`1`]]

🎯 Wenn Parent ID 42 ist, dann tu das

[[*id:pdoField=`{"topLevel":1,"field":"id"}`:is=`42`:then=`
tu das
`:else=`
sonst tu das
`]]

📅 Datum im Template aus pdoResources ausgeben

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

anstatt wie bei getResources

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