*

Offline Jo

  • *****
  • 224
  • Geschlecht: Männlich
    • JoLichter.de
MODX Spickzettel
« am: 15. März 2011, 19:20:44 »
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



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');



mySQL

SQL-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

Ab MODX Revo geht das bevorzugt via xPDO Methode
$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

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 zeigen
Update: ich benutzte nur noch den Fork "pThumb" (gleiche Syntax! aber schneller!)

<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


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

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: &tvFilters=`tvBanner==%`, 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 geben
Im Snippet wird die Variable $wert in ein Platzhalter gespeichert, z.B.
$modx->setPlaceholder('wert', $wert);und im HTML-Bereich mit [[+wert]] abgerufen.




Alte Packages entfernen
Installer -> Package Management -> View Details, dann im TAB "Uploaded Versions" die alten Pakete löschen


« Letzte Änderung: 20. März 2017, 23:22:25 von Jo »