TRImax documentatie

voor developers


module

Een moduleof mod is een programma geschreven in PHP dat dynamische content genereert voor een webpagina, volgens een welbepaalde logica die in het programma vastgelegd wordt (vb. overzicht van artikels die te koop zijn, met prijsinformatie); dit verschilt van een content block met variabele content die de inhoud van het blok uit de database van het CMS ophaalt.

Een mod kan gebruikt worden om kleine wijzigingen aan te brengen aan de website of om grote maatmodules te integreren (vb. e-commerce).

Een mod wordt geschreven in PHP en heeft dus altijd .php als extension; het wordt als een best practice beschouwd om de filename te laten starten met mod-.

integratie van een MOD in TRImax

Elke MOD start met de volgende code (deze is ook beschikbaar als bestand /trimax/_trimaxmod.php)

<?php
# MOD TRIMAX INTRO #
session_start();
$includefiles=true;
$basicmap=$_SESSION["mod"]["basicmap"] . "trimax/";
include($basicmap . "trimax.class.php");
include($basicmap . "config.php");
include($basicmap . "markdownextra.php");

$T=new trimax();
$T->startTrimax($config,$_SESSION["mod"]["post"]);

$dbtable=$config["db"]["dbtable"];
$post=$_SESSION["mod"]["post"];
?>

scope van de variabelen

Enkel $_SESSION-veriabelen zijn beschikbaar in een MOD. De volgende speciale TRImax-variabelen zijn bewaard in $_SESSION en beschikbaar op het niveau van een MOD.

  • $_SESSION["mod"]["basicurl"] bevat de baisurl van het project (het gedeelte vanaf http:// tot aan de root van het project), vb voor dit project: http://1net.be/sub/trimax/
  • $_SESSION["mod"]["basicmap"] bevat de volledige map van alle directories, startend van de root van de server
  • $_SESSION["mod"]["post"][...] bevat de array met de formulier-variabelen van de laatste POST
  • $_SESSION["mod"]["arraction"][n] bevat de array met acties en parameters waarbij de actie zelf bewaard is in n=0 en vanaf n=1 volgen de parameters

voorbeeld van arraction

url = http://1net.be/sub/trimax/system/crud/trimaxreleases dan is op het niveau van een MOD arraction als volgt beschikbaar:
$_SESSION["mod"]["arraction"][0] = system
$_SESSION["mod"]["arraction"][1] = page-update
$_SESSION["mod"]["arraction"][2] = 15

database operaties via TRImax methods create - read - update - delete

Dankzij $T , een instantie van TRImax die beschikbaar is op het niveau van de MOD, kunnen ook de database operaties van TRImax gebruikt worden.

In de volgende voorbeelden is omwille van de parsing in TRImax de syntax aangepast; placeholders zoals { { 1 } } moeten zonder spaties ingegeven worden.

CREATE

$T->create("INSERT INTO table_name",array("column1"=>$value1,"column2"=>$value2));

Voorbeeld

$newid=$T->create("INSERT INTO tablecars",array("merk"=>"BMW","type"=>"320d","bouwjaar"=>"2010"));

READ

$sqlres=$T->read("SELECT * FROM tablename WHERE columname='{​ {1}​ }'",$variable);

De $variable mag ook een array() zijn indien er meerdere condities zijn; de SQL wordt dan bijvoorbeeld met drie condities:

$sqlres=$T->read("SELECT * FROM tablename WHERE columname='{​ {1}​ }' AND columname='​{ {2}​ }'AND columname='​{ {3}​ }'",$array);

Voorbeeld

$sqlres=$T->read("SELECT * FROM tablecars WHERE merk='{​ {1}​ }' AND type='​{ {2}​ }'AND bouwjaar='​{ {3}​ }'",$arraycond);
waarbij $arrcond=array("BMW","320d","2010");

UPDATE

$T->update("UPDATE $dbtable { {1} } WHERE id={ {2} }",array("columname"=>$variable),$conditionvariable);
  • { {1} } is een array met fields en values
  • { {2,3,4 ...} } zijn argumenten in WHERE

Voorbeeld

$idpag=$T->update("UPDATE $dbtable { {1} } WHERE id={ {2} }",$arrupdate,$id);
waarbij $arrupdate=array("merk"=>"BMW","type"=>"320d","bouwjaar"=>"2010")

DELETE

$T->delete("DELETE FROM $dbtable WHERE id={ {1} }",$dbid);
  • { {1,2,3,4 ...} } zijn argumenten in WHERE

Voorbeeld 1

$T->delete("DELETE FROM tablecars WHERE merk='{ {1} }' AND type='{ { 2 } }' AND bouwjaar='{ { 3 } }'",$arrcond);
waarbij $arrcond=array("BMW","320d","2010");

Voorbeeld 2

$T->delete("DELETE FROM tablecars WHERE id='{ {1} }'",12);

kleine mods voor een dynamische navigatie

  • mod-navadmin.php wijzig het gedrag van het menu-item admin in de topnavigatie; dit menu-item gedraagt zich bij de start als een switch: door erop te klikken, wordt aan de rechterkant van de topnavigatie een loginscherm toegevoegd waarmee een admin-gebruiker van de website zich kan inloggen; na inloggen wordt het een dropdown-menu


  • mod-toplogin.php wanneer correcte login-gegevens zijn ingevoerd, heeft het geen zin om dan het login-invulscherm te laten staan in het hoofdmenu; deze mod zorgt er voor dat na een correcte login de naam van de gebruiker en zijn gebruikersniveau wordt weergegeven


speciale functies

upload file

$acceptedFormats = array('gif', 'png', 'jpg','jpeg','GIF','PNG','JPG','JPEG');
$jaar=$_POST["jaar"];
$uploaddir = "app/journal/$jaar/";

if($_FILES["file"]["error"] > 0)
{
    echo "
    <h2>FOUT</h2>
    <p>Er werd geen beeld geselecteerd</p>
    <p><br><br><br></p>
    <p><a href='javascript:history.go(-1)'>keer terug en probeer opnieuw</a></p>
    </div>
    ";
    exit;
}

if(!in_array(pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION), $acceptedFormats))
{
    echo "
    <h2>FOUT</h2>
    <p>Ongeldig beeldformaat</p>
    <p><br><br><br></p>
    <p><a href='javascript:history.go(-1)'>keer terug en probeer opnieuw</a></p>
    </div>
    ";
    exit;
}

$image2=$_FILES['file']['tmp_name'];
$imageext=substr($_FILES["file"]["name"],-4);   if($imageext=="jpeg")
    $imageext=".jpg";

$mtime=microtime();
list($milsec,$secs)=explode(" ",$mtime);
$milsec=str_replace("0.","",$milsec);
$imagenewfilename="$uploaddir$datetoday-$secs-$milsec".$imageext;
$imageurl="http://1net.be/app/journal/$jaar/$datetoday-$secs-$milsec".$imageext;

  # resize
  $check = getimagesize($image2);
  $imagewidth=$check[0];
  $imageheight=$check[1];    
  $resized=false;

  if($imagewidth>800)
  {
    resize_image_smart($image2, $imagenewfilename,800);
    $imagewidth=800;
    $resized=true;
  }
  else if($imageheight>800)
  {
    resize_image_smart($image2, $imagenewfilename,$imagewidth,800);
    $imageheight=800;
    $resized=true;
  }

  if(!$resized)
    move_uploaded_file($image2, $imagenewfilename);    

    echo "
    <div class='center' style='margin: 50px 0;'>
    <a href='$imageurl' target='_blank'>$imageurl</a>
    <br><br>
    <img src='$imageurl' style='max-height: 250px; max-width: 900px; border: 1px solid #CCC; box-shadow: 5px 5px 5px #EEE;'>
    </div>
    ";

resize image

function resize_image_smart($file, $newfilename, $dest_width=null, $dest_height=null)
{
  # http://php.net/manual/en/function.imagecopyresampled.php
  $extension = strtolower(strrchr($file, '.'));
  switch($extension)
  {
      case '.jpg':
      case '.jpeg':
          $orig = @imagecreatefromjpeg($file);
          break;
      case '.gif':
          $orig = @imagecreatefromgif($file);
          break;
      case '.png':
          $orig = @imagecreatefrompng($file);
          break;
      default:
          $orig = @imagecreatefromjpeg($file);
          break;
  }

  $orig_width = imagesx($orig);
  $orig_height = imagesy($orig);
  $vertical_offset = 0;
  $horizontal_offset = 0;
  if($dest_width == null)
  {
    if($dest_height == null)
    {
      die('$dest_width and $dest_height cant both be null!');
    }
    // height is locked
    $dest_width = $dest_height * $orig_width / $orig_height;
  } else {
    if($dest_height == null)
    {
      // width is locked
      $dest_height = $dest_width * $orig_height / $orig_width;
    } else {
      // both dimensions are locked
      $vertical_offset = $dest_height - ($orig_height * $dest_width) / $orig_width;
      $horizontal_offset = $dest_width - ($dest_height * $orig_width) / $orig_height;
      if($vertical_offset < 0) $vertical_offset = 0;
      if($horizontal_offset < 0) $horizontal_offset = 0;
    }
  }
  $img = imagecreatetruecolor($dest_width, $dest_height);
  imagesavealpha($img, true);
  imagealphablending($img, false);
  $transparent = imagecolorallocatealpha($img, 255, 255, 255, 127);
  imagefill($img, 0, 0, $transparent);
  imagecopyresampled($img, $orig, round($horizontal_offset / 2),
                                  round($vertical_offset / 2),
                                  0,
                                  0,
                                  round($dest_width - $horizontal_offset),
                                  round($dest_height - $vertical_offset),
                                  $orig_width,
                                  $orig_height);



  imagejpeg($img, $newfilename);                                
  return;
}