HUOM! Voit itse lisätä ja muuttaa sisältöä muokkaa-painikkeiden avulla

 Olet itse vastuussa tämän teoksen käytöstä aiheutuvista vahingoista Lue lisää.

Smarty

Kohteesta Wikikko - kansan taitopankki
Siirry navigaatioon Siirry hakuun

Johdanto[muokkaa]

Smarty on "template engine", joka helpottaa esimerkiksi kotisivujen sivupohjien koodaamista. Esimerkiksi julkaisujärjestelmä CMS Made Simple käyttää Smartya.

http://www.smarty.net

KESKEN: http://www.smarty.net/docsv2/en/language.modifiers.tpl

Asennus[muokkaa]

Hyvät ohjeet, joita kannattaa seurata: http://www.smarty.net/quick_install

  • Smarty löytyy myös CMS Made Simplen hakemistosta.

Ongelmia[muokkaa]

  • Blankko sivu, eikä mikään $smarty -komento toimi, ei esm. $smarty->testInstall(); jolla testataan ovatko hakemistopolut ym. oikein.
    • todennäköisesti polku on väärin siinä, mikä yrittää noutaa Smarty.class.php:tä
      • jos käytössä on esm. cmsmadesimple, niin Smarty sijaitsee cmsmadesimple/lib/smarty/libs/Smarty.class.php
      • jos taas olet asentanut Smartyn sen sivujen ohjeiden mukaan, se on ehkä /usr/local/lib/php/Smarty/Smarty.class.php
    • jos käytät OSX järjestelmää ja olet tehnyt juurihakemistoksi localhost/~käyttäjänimesi niin tällöin selvitä tämän hakemiston polku pääteohjelmassa pwd -komennolla kun olet tuossa juurihakemistossa
      • se on esm. /Users/käyttäjänimesi/Sites/
      • oikea muoto on silloin esm.: require('/Users/kättäjänimesi/Sites/cmsmadesimple/lib/smarty/libs/Smarty.class.php');

Viritetään CMS Made Simple harjoituskäyttöön[muokkaa]

  • Luodaan harjoituspohja Sisältö > Uutiset > Koostepohja > Luo uusi pohja.
  • Anna pohjalle nimi, lisää Smarty koodi ja Lähetä.
  • Kytke kyseinen pohja valikosta oletukseksi.
  • Lataa uudelleen kotisivu, jossa uutiset moduulin tuloste näkyy ja näet tulokset. Normaaliksi palauttaminen tapahtuu valitsemalla joku toinen oletuspohja.
  • Jos käytössäsi on esimerkiksi CGUserDirectory -moduuli, voit tehdä myös sillä sivipohjan ja tulostaa suoraan varsinaiseen sivun lohkoon.
  • Tämän jälkeen teet muutokset, painat Ota käyttöön ja lataat kotisivun uudestaan ja näet heti muutokset. Smartyn välimuistiasetuksia voi säätää Sivuston hallinnassa, mutta välimuistit lienee hyvä olla tällaisessa käytössä pois päältä.

Alkeet[muokkaa]

Kannattaa käyttää 10 minuuttia perusteiden opettelemiseen. Tässä tiivistetyt ohjeet.

  • Smarty:ä voi käyttää tiedostojärjestelmästä tai esimerkiksi CMS Made Simplen sisältä.
  • Tässä ohjeessa on käytetty apuna smarty -sivuston tutorialia, joka erityisesti keskittyy sivupohjien ohjelmoijille.
  • Smartyn perus syntaksi on {$tähänmuuttuja} jonka ympärille voidaan lisätä esm. html-kieltä

    {$tähänmuuttuja}

    Käytetään siis { } ellei asetuksissa toisiksi ole muutettu.
  • Jokainen tagi eli { } joko tulostaa muuttujan tai suorittaa aliohjelman (function). Funktiolle voidaan syöttää arvot seuraavasti:
{funktionnimi attribuutti1='arvo1' attribuutti2='arvo2'}
{insert file='sivupohja.tpl' title='Teksti tähän'}

Smarty tiedostojärjestelmässä[muokkaa]

  1. Itse Smarty-ohjelma sijaitsee jossain hakemistossa (kts. yllä). Tämä osoite tarvitsee tietää: esm. require('/Users/käyttäjänimesi/Sites/cmsmadesimple/lib/smarty/libs/Smarty.class.php');
  2. Se ohjelma, johon käytät Smartyä voidaan liittää esm. CMS Made Simple:en sivun osoitteella tiedostojärjestelmän hakemistoon. Tämä on myös sama URL-tai vastaava osoite on kuin kutsuisit sitä suoraan.
  3. Smarty:n ohjeiden mukaan
    1. Tee kuten sivulla on ohjeistettu: http://www.smarty.net/quick_install

CMS Made Simple[muokkaa]

  1. Jos haluat tehdä oman pienen ohjelman tai toiminnon, voit tehdä sen käyttäjän määrittelemänä tagina php:llä ylläpidon puolella.
  2. Jos haluat tehdä laajemman ohjelman, se kannattaa sijoittaa tiedostojärjestelmään.
  3. Kannattaa ehkä sijoittaa ohjelma omaan hakemistoonsa esm. /uploads hakemistoon, koska sitä ei CMS Made Simpleä päivitettäessä tule tuhottua.
    1. /uploads/omanohjelmannimi -hakemistoon tee hakemistot: cache, configs, templates, templates_c ja tarkista että templates_c ja cache -hakemistoilla on 775 ja oikea omistaja ja ryhmä. Kts. edellä annetulta Smarty-linkkisivulta.
  4. Sijoita templates -hakemistoon sivupohjat, eli ne jotka päättyvät .tpl niissä on se tieto, mikä muodostaa netissä näkyvän sivun
  5. cache on välimuisti ja templates_c samoin myös hakemisto, johon Smarty itse tekee tiedostoja.
  6. configs -hakemisto voi sisältää tekstitiedostoja ohjelmasi avuksi
  7. Smarty osaa hakea alikansioista automaattisesti. Jos haluat ohjata ohjelmasi hakemaan ne muualta, määrittele index.php -tiedostossa hakemistot:
$smarty->setTemplateDir('/Users/käyttäjänimesi/Sites/cmsmadesimple/uploads/testi2/templates');
$smarty->setCompileDir('/Users/käyttäjänimesi/Sites/cmsmadesimple/uploads/testi2/templates_c');
$smarty->setCacheDir('/Users/käyttäjänimesi/Sites/cmsmadesimple/uploads/testi2/cache');
$smarty->setConfigDir('/Users/käyttäjänimesi/Sites/cmsmadesimple/uploads/testi2//configs');
  1. Kun osoitat selaimen "omanohjelmannimi" -kansioon, se lataa index.php -tiedoston. Se on se komennuskeskus, mikä ohjaa muihin toimintoihin eli tiedostoihin tässä hakemistossa ellet ole muualle määrännyt.
  • Myöhemmin tällä sivulla on esimerkki miten tehdään pieni ohjelma joka pyytää käyttäjältä arvoja ja tulostaa ne.

Muuttujat[muokkaa]

  • Muuttuja alkaa $ (dollari) merkillä. Voi sisältää kirjaimia, numeroita ja alaviivoja.
{$muuttuja} tulostaa muuttujan joka ei ole taulukko eikä olio.
{"muuttuja"} staattinen arvo
{$muuttuja[10]} tulostaa taulukon 11. alkion
{$muuttuja[10].avaimennimi}
{$muuttuja[10].$avaimennimi}
{$muuttuja.avaimennimi} tulostaa taulukosta avaimen arvon
{$muuttuja.$avaimennimi} tulostaa taulukosta muuttujassa olevan avaimen arvon
{$muuttuja->ominaisuus} tulostaa olion nimeltä muuttuja ominaisuuden ??
{$muuttuja->ominaisuus()} tulostaa olion nimeltä muuttuja ominaisuuden paluuarvon ??
{$muuttuja->ominaisuus($muuttuja2,2,$muuttuja3)}
{#muuttuja#} tulostaa tiedostonimi.conf -tiedostoon tallennetun arvon. Kts. oma otsikko.
{$smarty.config.muuttuja} tulostaa tiedostonimi.conf -tiedostoon tallennetun arvon. Kts. oma otsikko.
{assign var=muuttuja value='teksti'}{$muuttuja} tulostaa teksti 
{$smarty.server.SERVER_NAME} tulostaa palvelimen nimen
{$muuttuja+1} laskutoimitukset voidaan sisällyttää suoraan
{assign var="muuttuja" value="`$muuttuja+$muuttuja1`"}
Lähde http://www.smarty.net/docsv2/en/language.syntax.variables.tpl

Muunnin[muokkaa]

"Muuttuja muuntimia" voi liittää muuttujiin, custon aliohjelmiin tai merkkijonoihin. Ne listätään putkimerkillä |

{$muuttuja|upper}
{$muuttuja|truncate:40:'...'} muunnin parametreilla
{aliohjelma loop=$muuttuja|upper} 
{'merkkijono'|upper}
{mailto|upper address='[email protected]'}
{$taulukko|@count} PHP:n count

Käytössäolevien muuttujien tutkiminen[muokkaa]

  • Miten sitten saadaan näkyviin käytettävissä olevat muuttujat, joita ei esimerkiksi sivupohjassa ole itse luotu?
    • tulostaa kaikki sillä hetkellä käytettävissä olevat ylimmän tason smarty-muuttujat ja niiden tyypit. Tämä soveltuu esimerkiksi sivupohjien (template) tekemiseen, kunt tarvitsee saada käsitys mitä muuttujia on käytettävissä.
{get_template_vars} 
  • Oman muuttujan voi luoda esim. item:llä: {foreach from=$jokumuuttuja.properties.membership item='jasenyys'} Tämän jälkeen käytettävissä on muuttuja $jasenyys
  • {dump item="jokumuuttuja"} tulostaa ylimmän tason muuttujan jäsenet (member).
  • <pre>{$somevariable|print_r}</pre> tulostaa muuttujan jäsenet.
    • {foreach from=$jokumuuttuja item=entry}<pre>{$entry|print_r}</pre>{/foreach} jos kysessä ei ole ylimmän tason muuttuja.
  • Laajennokset > Tagit näyttää käytettävissä olevat ? ja niitä klikkaamalla antaa ohjeet!

Debug[muokkaa]

{debug}
{$debugging = TRUE} Soveltuu esimerkiksi muuttujien tutkimiseen.

Arvojen kanssa pelaaminen[muokkaa]

Calguys Module Extensions
  • Noudetaan aluksi kaikki kayttajat kaikki-taulukkoon
    • {foreach from=$users item='kaikki'}
  • Toteutetaan jotain jos ehto toteutuu. Huomaa, miten tieto haetaan tietokannasta $-merkillä. Aluksi viitataan edellä haettuun kaikki-taulukkoon ja sitten mennään syvemmälle arvoa kohti. Katso tästä selitys muutava rivi alempana.
    • {if ($kaikki.groups.0 == 2 or $kaikki.groups.1 == 2) and ($kaikki.properties.membership != 'opiskelijajäsen')}
    • {if $kaikki.props.osaajanakyvyys.data == 1}
  • Asettamalla debugin eli seuraavan päälle ja päivittämällä kotisivun, saa tiedot taulukoista.
{get_template_vars} 

{foreach from=$users item=entry}

{$entry|print_r}

{/foreach}

    • Ne näkyvät esimerkiksi seuraavasti viitaten edellä oleviin if-lausekkeisiin:
[groups] => Array ( [0] => 2 )
[properties] => Array ( [membership] => opiskelijajäsen )

Kommentointi[muokkaa]

{* Kommentti tähän joka ei näy loppukäyttäjän lähdekoodissa *}
<!-- HTML kommentti joka näkyy loppukäyttäjän lähdekoodissa -->
{* Useammalla
   rivillä
*}

{*********************************************************
Teksti tähän
**********************************************************}

Tietojen hakeminen omaan muuttujaan[muokkaa]

Perusmuoto on käyttää foreach komentoa ja määritellä mistä muuttujasta haetaan ja mihin muuttujaan

{foreach from=$muuttujajostahaetaan item=kohdemuuttuja}

Valmiit aliohjelmat (built-in functions)[muokkaa]

http://www.smarty.net/docsv2/en/language.builtin.functions.tpl
  • Esimerkiksi {if}
  • Valmiita aliohjelmia ei tulisi muuttaa.
  • Osa aliohjelmista sisältää assign -attribuutin joka kerää aliohjelman tulokset nimettyyn mallipohjan muuttujaan

Attribuutit[muokkaa]

{include file='header.tpl'}
{include file='header.tpl' attrib_name='attribuutin arvo'}
{include file=$muuttujasta}
{include file=#conf-tiedostosta ladattu muuttuja# title='Teksti tähän'}
{html_select_date display_days=yes}
{mailto address='[email protected]'}

Muuttujat attribuuteissa[muokkaa]

{func var="teksti $muuttuja teksti"} huomioi $muuttuja
{func var="teksti $muuttuja[bar] teksti"} huomioi $muuttuja[bar]
{func var="teksti $muuttuja.bar teksti"} huomioi $muuttuja
{func var="teksti `$muuttuja.bar` teksti"} huomioi $muuttuja.bar
{func var="teksti `$muuttuja.bar` teksti"|escape}
{include file="hakemistonimi/$mallipohjan_nimi.tpl"} korvaa malipohjan_nimi kohdan muuttujan arvolla
{include file='hakemistonimi/$mallipohjan_nimi.tpl'} ei korvaa mallipohjan_nimi kohtaa
  • Boolean arvoja: true, on, yes ja false, off, no

Custom aliohjelmat (functions)[muokkaa]

http://www.smarty.net/docsv2/en/language.custom.functions.tpl
  • Esimerkiksi {html_options}
  • Aliohjelmia, jotka implementoidaan lisäosilla (plugin). Näitä voi muokata tai luoda lisää.
  • Et voi käyttää nimiä, jotka sisältyvät Smartyyn

If[muokkaa]

 {if $logged_in}
     Hei, <font color="{#fontColor#}">{$name}!</font>
 {else}
     Moi, {$name}
 {/if}

Conf-tiedosto[muokkaa]

  • Tallenna esm. seruaava tiedostoon tiedostonimi.conf
muuttuja = "Teksti tähän"
  • Sivupohjassa kutsu seuraavasti (kaksi eri vaihtoehtoa):
{config_load file='tiedostonimi.conf'}
<title>{#muuttuja#}</title>
<title>{$smarty.config.muuttuja}</title>

Päivämäärä[muokkaa]

{$smarty.now|date_format:"%Y/%m/%d"}

Tuonti PHP:stä[muokkaa]

Muuttujan tuonti

PHP koodi:
<?php
$smarty = new Smarty();
$smarty->assign('nimi', 'Matti');
$smarty->display('tiedostonimi.tpl');
?>

Sivupohjakoodi nimeltä tiedostonimi.tpl:
Hei {$nimi}

Taulukon tuonti

<?php
$smarty->assign('Taulukko',
    array('arvo1' => '123456789',
          'arvo2' => 'Teksti tähän',
          'arvo3' => array('alaarvo1' => '1234567',
                           'alaarvo2' => '12345')
                           )
         );
$smarty->display('tiedostonimi.tpl');
?>

Sivupohjakoodi nimeltä tiedostonimi.tpl:
{$Taulukko.arvo2}<br />
{$Taulukko.arvo3.alaarvo2}
<?php
$smarty->assign('Taulukko', array(
                           '123456789',
                           'Teksti tähän',
                            array('1234567',
                                  '12345')
                            ));
$smarty->display('index.tpl');
?>

Sivupohjakoodi nimeltä tiedostonimi.tpl:
{$Taulukko[1]}<br /> tulostaa Teksti tähän
{$Taulukko[2][1]} tulostaa 12345

Lomakkeen käsittely[muokkaa]

Seuraava esimerkki tulostaa nettisivulle lomakkeen, johon käyttäjä syöttää arvoja. Kun käyttäjä on lähettänyt lomakkeen, php laskee niitä ja näyttää toisella nettisivulle tuloksen

  • Katso yllä eri vaihtoehdot miten sinulla pitää olla käytössä hakemistoja.
  • HUOM! Jos tiedostopolku ei ole oikein Smarty.class.php -hakemistoon tulostuu todennäköisesti tyhjä valkoinen sivu.
  • Muutoin voit käyttää apuna vianetsintä -apuria, joka näkyy oheisesta koodista.
  • Tässä esimerkissä polku on OSX localhost palvelimella Sites -hakemisto.
  • On myös ilmeisesti muita Smartyfunktioita, joilla lomakkeen voi tehdä. Tämän esimerkin tarkoitus on osoittaa kuinka tällainen toiminto liitetään esimerkiksi kotisivuihin.
  • index.tpl voi myös sijoittaa CMS Made Simplen sivulle, jolloin lomake tulostuu sivulta, ja se hakee tiedon hakemistosta, jossa laskuri.php on.
    • Tästä puuttuu, miten vastaus tuodaan valkoisen sivun sijaan (jonne se kyllä tulee automaattisesti) kotisivun sisälle.
Tänne tullaan ja tästä kaikki alkaa
/laskuri/index.php

<?php
require('/Users/käyttäjänimi/Sites/cmsmadesimple/lib/smarty/libs/Smarty.class.php');
$smarty = new smarty();
$smarty->debugging = true; // Näyttää muuttujien arvot eri ikkunassa
$smarty->caching = true;
$smarty->cache_lifetime = 10;
//$smarty->testInstall(); // Järjestelmän polkutesti

$smarty->assign("title", "Sivun otsikko"); // Asettaa Smarty $title arvoksi Sivun otsikko

$smarty->display('index.tpl'); // Tulostetaan kotisivulle
?>
Tämä määrittelee html-sivun aloituksen ja skandinaaviset merkit
/laskuri/templates/header.tpl

<!DOCTYPE html>
<html lang="fi-FI">
<head>
<meta charset="utf-8">
<title>{$title}</title>
</head>
<body>
Varsinainen html, mikä tulostaa nettiin vastauksen
/laskuri/templates/index.tpl

{include file="header.tpl" title={$title}}
<form action="laskuri.php" method="get">
<h1>Otsikko</h1>
 <p>Tämä laskuri laskee kaksi arvoa yhteen</p>
 <p>Syötä arvot kenttiin ja paina Laske</p>
 <p>Eka arvo <input id="arvo1" type="number" name="arvo1" value="20" size="5" /></p>
 <p>Toka arvo <input id="arvo2" type="number" name="arvo2" value="30" size="5" /></p>
 <p><input type="submit" name="painike" value="Laske" /></p>
</form>
{include file="footer.tpl"}
Tämä lopettaa html-sivun
/laskuri/templates/footer.tpl

</body>
</html>
Tämä on varsinainen koodi joka tekee tässä laskennan
/laskuri/laskuri.php

<?php
//include("config.php");
if(isset($_GET))
{
// Noudetaan lomakkeen arvot muuttujiin
$arvo1 = $_GET["arvo1"];
$arvo2 = $_GET["arvo2"];

// Tulostetaan lähtöarvot kotisivulle
print ("Annetut arvot ovat:"."
"); print "Eka arvo: ".$arvo1."
"; print "Toka arvo: ".$arvo2."
"."
"; // Tehdään laskutoimitus ($vastaus = $arvo1 + $arvo2); // Tulostetaan tulokset kotisivulle print ("Vastaus: ".$vastaus); } ?>

Sekalaista[muokkaa]

{include file='header.tpl'}
{insert file='sivupohja.tpl' title='Teksti tähän'}

{if $entry->postdate}
	<div class="NewsSummaryPostdate">
		{$entry->postdate|cms_date_format}
	</div>
{/if}

<select name='company_id'>
  {html_options options=$companies selected=$company_id}
</select>

Lähteitä ja linkkejä[muokkaa]

http://calguy1000.com/Blogs/12/60/basic-cms-template-development-skills.html