[php, smarty] kan smarty tags in content parsen?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goedemorgen allemaal :),

Ik ben sinds enkele dagen bezig met Smarty.

Het is me niet helemaal duidelijk, waar de functionaliteit van Smarty nu eigenlijk op houdt. Ik wil nml: het volgende: pagina's dynamisch maken, mbv zogenaamde "tags". Dit betekent, dat je, door bepaalde tags te gebruiken, content dynamisch kan maken.

Mijn vraag is: kan smarty ook tags renderen in content, ipv in templates?

Een voorbeeldje is de link-tag. Met de link tag kunnen hyperlinks worden gemaakt, bijvoorbeeld:

--- stukje content ---

Welkom op de website van smarty. Smarty is powered by {link "http://www.php.net"}php.net{/link}.

-- einde content. ---

De link tag wordt gerenderd, en dan bijvoorbeeld vervangen door: <A HREF="http://www.php.net">php.net</A>

Is dit functionaliteit die ook in Smarty zit, of is hier iets anders voor nodig? Alle voorbeelden die ik heb kunnen vinden, hebben alleen tags in de templates.

Hartelijk dank voor de moeite.

Groeten,

Kees

[ Voor 4% gewijzigd door Verwijderd op 03-01-2003 00:23 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk dat je het concept van een template engine (of in ieder geval van Smarty) niet begrijpt. Je zet namelijk alle presentatie logica in de template, en zet alleen applicatie logica nog in de PHP file. Het afbeelden van links is presentatie logica, dus dat doe je in de template.

Edit:
Zie http://www.zend.com/zend/tut/tutorial-cezar.php In het voorbeeld wordt eerst alle gegevens opgehaald in index.php, waarna in in index.tpl deze gegevens worden afgebeeld.

[ Voor 25% gewijzigd door Verwijderd op 03-01-2003 01:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik denk dat mijn vraagstelling te vaag was.

Mijn vraag is: kan Smarty ook tags in de content renderen? Of kunnen alleen tags in templates zelf gerenderd worden? Voorbeeld:

PHP:
1
2
3
4
5
6
7
8
9
10
11
require 'Smarty.class.php';

$smarty = new Smarty;

$smarty->compile_check = true;
$smarty->debugging = true;
$content = "Welkom op de website van smarty. Smarty is 
powered by {link \"http://www.php.net\"}php.net{/link}.";
$smarty->assign("content", $content);

$smarty->display('test.tpl');


test.tpl:
code:
1
2
Dit is de content (in een paragraaf)
<p>{$content}</p>


Nu wil ik dat de Link-tag die in de content staat, wordt gerenderd. Ik weet dat je in smarty zelf een functie erbij kan bouwen (in de plugins-map). Maar kan zo'n functie alleen voor templates werken, of ook voor php-variabelen die ge-assigned worden aan Smarty?

[ Voor 7% gewijzigd door Verwijderd op 03-01-2003 10:08 ]


Acties:
  • 0 Henk 'm!

Verwijderd

ik denk trouwens dat "renderen" niet het goede woord is wat je de hele tijd gebruikt... :D misschien dat parsen meer in de buurt komt...

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Het is mogelijk om zelf een plugin te schrijven die zoiets doet. Je aanroep van de plugin moet je dan wel wijzigen in iets van:

code:
1
{link href='http://smarty.php.net' name='Smarty Homepage'}


Ik zou zeggen, bekijk een aantal standaard plugins, dan is het vrij simpel om dergelijke functie te maken.

Wat ik me wel afvraag, wat het nut ervan is. het verschil tussen <A HREF='http://bla'>Naam</A> en {link http://bla}Naam{/link}, behalve de syntax, kan ik niet ontdekken..

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

Verwijderd

De enige reden waarom je dit zou willen doen is als je deze content dynamisch ophaalt, bijv. uit de database. Dan zet je dus Smarty tags in een database, iets wat ik niet zo'n goed idee vind eigenlijk, want je bent bezig layout info in de database op te slaan, waar juist de templates voor bedoeld zijn. Zet in dat geval de waarden binnen de Smarty tags in aparte kolommen (in dit geval de URL en de tekst vooor de link, en assign die apart aan Smarty variabelen, en zet de Smarty tags er omheen in de template.

Mocht je dit toch willen, kan je kijken naar het gebruik van {php}{/php} tags om code te embedden in een template. Je zou dan dus in 1 template je dynamische content kunnen ophalen en displayen, en de output daarvan weer in een andere template includen. Zie http://smarty.php.net/man...mponentized.templates.php Voor zover ik weet is er geen andere manier om dit te doen.

HTH :)

[ Voor 7% gewijzigd door Verwijderd op 03-01-2003 10:38 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 03 January 2003 @ 10:37:
De enige reden waarom je dit zou willen doen is als je deze content dynamisch ophaalt, bijv. uit de database. Dan zet je dus Smarty tags in een database, iets wat ik niet zo'n goed idee vind eigenlijk, want je bent bezig layout info in de database op te slaan, waar juist de templates voor bedoeld zijn. Zet in dat geval de waarden binnen de Smarty tags in aparte kolommen (in dit geval de URL en de tekst vooor de link, en assign die apart aan Smarty variabelen, en zet de Smarty tags er omheen in de template.

Mocht je dit toch willen, kan je kijken naar het gebruik van {php}{/php} tags om code te embedden in een template. Je zou dan dus in 1 template je dynamische content kunnen ophalen en displayen, en de output daarvan weer in een andere template includen. Zie http://smarty.php.net/man...mponentized.templates.php Voor zover ik weet is er geen andere manier om dit te doen.

HTH :)
Thanx, daar heb 'k wat aan.

Waarom ik dat zo zou willen? Ik ben bezig met het maken van een mini-cms, waarmee de beheerder zelf functionaliteiten kan aanroepen in een content-pagina.

Stel dat je 1 pol hebt die je op meerdere plaatsen aan wilt roepen, kan je gewoon
{poll "polnaam"} (als beheerder) in de content zetten, en voila, daar staat een poll.

Dat is 't id.

De oplossing die ik dus denk ik ga gebruiken, is dat ik mijn content gewoon ga opslaan als "template" en die door smarty heen stuur.

Dat betekent dat functionaliteit niet 'hard-coded' aan een pagina vast hangt, maar dat je het overal in elke pagina aan kan roepen. Dat is toch een mooi principe?

Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk ook dat het een goed plan is om de templates te laten aanpassen door de beheerder. Let daarbij wel op versie beheer. Je zou bijvoorbeeld de volledige source van je templates in een database kunnen opslaan (als TEXT veld), zodat je naar een oude versie kunt terugrollen. Ook kan je een concept versie aanmaken en laten testen, voordat je hem 'live' breng.

Succes :)

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Misschien is het handiger om naar fetch te kijken bv in combinatie met templates.from.elsewhere.

PHP in je template plaatsen vind ik persoonlijk eng en ongewenst. Aangezien je dan het nut van template te niet doet. Maar dat is mijn mening.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het gaat er niet om, dat er php in de templates wordt gebruikt. Dat is niet het principe wat ik bedoel.

Het gaat om het volgende probleem: stel, je wilt op een site een poll publiceren. In de beheer-bestaat een poll-module waarmee polls kunnen worden opgebouwd. Deze poll moet op een nieuws-pagina en een info-pagina komen die ook door de beheerder in het CMS worden ingevoerd.

Hoe maak je het mogelijk, om deze poll in een pagina weer te geven?

Oplossing 1:
- als je een tag maakt voor de template, betekent dat dat je voor elke poll een template moet maken. Dat is vindt ik niet zo'n mooie oplossing, wel dan?

Oplossing 2:
Een tag in de content, die wordt geparsed Of door Smarty Of door iets anders, die aan de hand van de inhoud van de tag de juiste 'taghandler' aanroept.

De beheerder moet dus op het een of de andere manier aan kunnen geven: op deze plaats in de pagina, komt de poll te staan.

Het moet dus vanuit de beheeromgeving voor de beheerder simpel mogelijk te zijn, om functionaliteit gebouwd in php, waarvan in de beheeromgeving een "instantie" is aangemaakt, op elke plaats in een pagina weer te geven. Hoe kan je dat dan netjes doen op een andere manier?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
'k Weet al een goed en duidelijk voorbeeld te noemen van type tags die ik zo ook wil randeren: de 'code' en 'php' tags van het Got Forum :). Ik ga er nu een eigen parser van maken (lees: afleiden van smarty)

[ Voor 9% gewijzigd door Verwijderd op 03-01-2003 13:42 ]

Pagina: 1