Meine Sammlung von MODX-Snippets usw. :cool:
PARSER (wenn mit ! dann ohne Cache) :- TV -> [[*templatevar]]
- Chunk -> [[!$chunk]]
- Snippet -> [[snippet]]
- Placeholder -> [[+platzhalter]]
- Link -> [[~link]]
- System-Einstellung -> [[++einstellung]]
MODX Tag Syntax (https://docs.modx.com/revolution/2.x/making-sites-with-modx/tag-syntax)
Wenn User ungleich ID1 dann Redirect zur Resource 42
if ($modx->user->get('id') != 1) {
$modx->sendRedirect($modx->makeUrl(42)); # goto Errorpage
exit();
}
Name des Users mit der ID1
$user = $modx->getObject('modUser', 1);
return $user->get('username');
IP-Adresse
if (isset($_SERVER['REMOTE_ADDR'])) $ipCode=$_SERVER['REMOTE_ADDR']; else $ipCode='0:0:0:0:0:0:0:0';
return $ipCode;
nur Admin oder einen bestimmten IP Bereich zulassen!
<?php
# Aufruf im Template: [[!ipEngage? &ipStart=`90.67.111.42` &ipEnd=`90.67.111.47`]]
if (isset($_SERVER['REMOTE_ADDR'])) $ip=$_SERVER['REMOTE_ADDR']; else $ip="127.0.0.1";
$code=ip2long($ip);
$low = ip2long($modx->getOption('ipStart',$scriptProperties,'127.0.0.1'));
$high = ip2long($modx->getOption('ipEnd',$scriptProperties,'127.0.0.1'));
if($code <= $high && $code >= $low)
{
return;
}
# only if Admin
# elseif ($modx->user->isMember(array('Administrator'))){
# only if UserID=1
elseif ($modx->user->get('id') == '1'){
return;
}
else {
# du kommst hier nicht rein! Weiterleitung auf localhost ;-)
$modx->sendRedirect('http://127.0.0.1/', 0);
}
Wert eines TVs lesen (Resource 42) -> altes MODx 2.0.x !
$document_tvs = $modx->getTemplateVarOutput(array("meinTV"), 42);
$tv_output=$document_tvs['meinTV'];
Wert eines TVs lesen -> neues MODX >2.1.x !
# $tv_output = $modx->resource->getTVValue('meinTV'); // TV des aktuellen Dokuments, oder:
$doc = $modx->getObject('modResource', 42);
$tv_output = $doc->getTVValue('meinTV');
mySQLSQL-Select Beispiel mit den letzten 42 Einträgen
$query = $modx->db->select('*','modx_tabelle_prefix','id>0','id DESC','42');
while($daten = $modx->db->getRow($query)) {
echo 'File: ' . $daten['column1'] . "\n- " . $daten['column2'] . "\n- " . $daten['column3'] . "\n- " .$daten['column4'] . '<br />';
}
Link API:DBAPI (http://wiki.modxcms.com/index.php/API:DBAPI)
Ab MODX Revo geht das bevorzugt via xPDO Methode (http://www.php.net/manual/de/book.pdo.php)
$stmt = $modx->query('SELECT * FROM `modx_tabelle_prefix` ORDER BY `id` DESC LIMIT 0,42');
if ($stmt && $stmt instanceof PDOStatement) {
$output.="<table align='center' border=1' cellspacing='0' cellpadding='5'>";
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$output.="<tr><td>"
.$row['column1']."</td><td>"
.$row['column2']."</td><td>"
.$row['column3']."</td><td>"
.$row['column4']."</td></tr>\n";
}
$output.="</table>";
}
return $output;
mehr Info auf bobsguides.com (http://www.bobsguides.com/custom-db-tables.html)
oder:
<?php
# Lade eine DB Tabelle in Platzhalter (z.B.: [[+gbtext]]) - Chunk: tplGuestbookForm
$stmt = $modx->query('SELECT * FROM `modx_custom_guestbook` WHERE `gbactive`="1" ORDER BY `id` DESC');
if ($stmt && $stmt instanceof PDOStatement) {
$output='';
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$output.= $modx->getChunk('tplGuestbookForm', $row, '[[+', ']]');
}
}
return $output;
Delete:
<?php
$table = 'modx_custom_test';
$where = 'name=`Mayer`';
$count = $modx->exec("DELETE FROM $table WHERE $where");
return $count. ' Einträge gelöscht!';
eine MODX Funktion im snippet
<?php
# Funktion - zähle aktivierte Einträge (oder Summe ;- )
function rnSumRows() {
global $modx; # $modx muss vor Gebrauch einer Funktion definiert werden!
$stmt = $modx->query('SELECT * FROM `modx_custom_guestbook` WHERE `gbactive`="1"');
if ($stmt && $stmt instanceof PDOStatement) {
$sum='0';
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$sum = $sum + $row['gbactive'];
}
}
return $sum;
}
$gbsum = rnSumRows();
row count - Beispiel: [[!guestbookQty?active=`1`]]
<?php
$stmt = $modx->query('SELECT * FROM `modx_custom_guestbook` WHERE `gbactive`='.$active);
if ($stmt && $stmt instanceof PDOStatement) {
$count=0;
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$count = $stmt->rowCount();
}
}
return $count;
Template Variablen (TV)TV ja /nein
[[*meinTV:is=`ja`:then=`Ausgabe1`:else=`Ausgabe2`]]
gutes TV Beispiel um den Seitentitel für jede Resource zu schalten -> Eingabetyp: Optionsschaltfläche > Eingabe-Optionswerte: ja||nein > Standardwert: ja
dann im Template
[[*Seitentitel:is=`ja`:then=`<h2>[[*pagetitle]]</h2>`:else=``]]
Events via TV (eventDate) und getResources sortiert ausgeben
[[!getResources? &parents=`[[*id]]` &tpl=`EventsTpl` &limit=`20`
&dateFormat=`%d.%m.%Y` &includeTVs=`1` &sortbyTV=`eventDate` &sortdirTV=`ASC` &sortby=``]]
erforderliche Parameter: &parents - (string) Komma-aufgeteilt und &tpl (Chunk-Template)Info: Wenn ich z.B. nur den Seitentittle haben will, geht das auch gut ohne extra Template:
&tpl=`@INLINE [[+pagetitle]]`
Ein Bild per TV + "phpthumbof" verkleinern + bei Mausklick das Original zeigenUpdate: ich benutzte nur noch den Fork "pThumb" (gleiche Syntax! aber schneller!) (https://modx.com/extras/package/pthumb)
<div class="bild">
<a href="[[*tvBild]]" target="_blank"><img style="border: 0pt none;" title="größer ansehen" src="[[*tvBild:phpthumbof=`w=640&zc=1`]]" alt="" /></a>
</div>
oder ohne TV
src="[[!phpthumbof?input=`assets/images/stories/bild.jpg` &options=`w=640&h=480&zc=1`]]"
Das eigentlich geniale daran ist die Tatsache, dass die Bilder verkleinert im Cache liegen und so die Seite schneller geladen wird. :wink:
Chunk mit phpthumbof, TV per if-snippet[[!If?
&subject=`[[*meineBilder]]`
&operator=`eq`
&operand=``
&then=``
&else=`
<div class="img">
<a href="[[*meineBilder]]" target="_blank"><img style="border: 0pt none;" src="[[*meineBilder:phpthumbof=`w=640&h=480&zc=1`]]" alt="Bild größer ansehen" /></a>
</div>
`
]]
Chunk mit phpthumbof, TV per Output-Filter (ressourcenschonender)[[*meineBilder:neq=``:then=`
<div class="img">
<a href="[[*meineBilder]]" target="_blank"><img style="border: 0pt none;" src="[[*meineBilder:phpthumbof=`w=640&h=480&zc=1`]]" alt="Bild größer ansehen" /></a>
</div>
`:else=``]]
mehr Infos dazu im Blog von Belafonte: Image Manipulation with phpThumbOf in MODx Revolution (http://www.belafontecode.com/image-manipulation-with-phpthumbof-in-modx-revolution/)
if-snippet - das gleiche geht auch einfach per Output-Filter:(Bedingung: wenn Seite ID1, dann mache das, sonst mache dieses)
[[If?
&subject=`[[*id]]`
&operator=`eq`
&operand=`1`
&then=`mache das`
&else=`mache dieses`
]]
[[*id:is=`1`:then=`mache das`:else=`mache dieses`]]
Slide-Show aus Bildern von Resourcen die ein TV-Images haben (z.B. Banner)Das jQuery Cycle Lite Plugin gibt es hier: Cycle Lite Plugin (http://malsup.com/jquery/cycle/lite/)
Chunk1 - tplBannerFade
<div class="banneranim">
[[!getResources?
&parents=`1,21,26`
&resources=`1,21,26`
&depth=`1`
&limit=`10`
&includeTVs=`1`
&processTVs=`1`
&tvFilters=`tvBanner==%`
&sortby=`RAND()`
&tpl=`tplBannerAnim`]]
</div>
<script type="text/javascript">
$(document).ready(function(){$('.banneranim').cycle({fx:'fade',speed:2000,timeout:5000,next:'.banneranim',pause:0});});
</script>
Wichtig ist: [tt]&tvFilters=`tvBanner==%`[/tt], damit werden dann nur nicht leere TVs angezeigt.
Chunk2 - tplBannerAnim:
<img style="border: 0pt none; text-align: center;"
src="[[+tv.tvBanner:phpthumbof=`w=640&h480`]]" alt="" />
Einen Chunk per Snippet (z.B. Slideshow) Jahreszeitlich aufrufen<?php
# Fällt ein Datum in die Sommerzeit
# 1 bei Sommerzeit, ansonsten 0
if(date("I")==1) {
$chunk=$modx->getChunk('Slide-Sommer');
}
else{
$chunk=$modx->getChunk('Slide-Winter');
}
return $chunk;
Code nur einmal am Tag ausführen (ungetestet)z.B. Hintergrundbild wechseln
<?php
# Tage seit Beginn der UNIX-Epoche (1970-01-01 00:00:00 UTC)
$timestamp = time();
$UnixTag = date('U', $timestamp)/86400;
$UnixTag1 = intval($UnixTag);
$UnixTag2 = $modx->getPlaceholder('UnixTag');
if ($UnixTag1 > $UnixTag2) {
$modx->setPlaceholder('UnixTag', $UnixTag1);
# weiterer Code ...
}
return;
Eine Variable an eine Resource oder Chunk weiter gebenIm Snippet wird die Variable $wert in ein Platzhalter gespeichert, z.B.
$modx->setPlaceholder('wert', $wert);
und im HTML-Bereich mit [[+wert]] abgerufen.
Alte Packages entfernenInstaller -> Package Management -> View Details, dann im TAB "Uploaded Versions" die alten Pakete löschen