login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[tpl]waardes doorgeven aan AssignInclude

Offline Dark_Paul - 19/10/2006 21:24
Avatar van Dark_PaulPHP ver gevorderde Hej,

Hoe kan je via TemplatePower vars doorsturen?
Omdat ik AssignInclude(); doe ipv een normale include, zijn niet al mijn vars beschikbaar. Dit is wel een probleem, want die heb ik wel nodig.
Ik heb $time; nodig op de login.inc.php (die ik include via AssignInclude). Als ik die echo op login.inc.php, krijg ik niets. Dan bestaat ie dus niet. Hoe kan ik die vars doorsturen naar login.inc.php?
Het is belangrijk dat $time; overal hetzelfde is, dus ik kan 'm niet overal opnieuw definiëeren..

10 antwoorden

Gesponsorde links
Offline Gerard - 19/10/2006 23:05
Avatar van Gerard Ouwe rakker Werk je op dit moment met <!-- INCLUDE BLOCK : blockName -->?

Je moet namelijk met php includes wel werken met <!-- INCLUDESCRIPT BLOCK : blockName -->
Offline Dark_Paul - 20/10/2006 08:34
Avatar van Dark_Paul PHP ver gevorderde Jup, dat doe ik. Dat moet ik wel, anders kan ik op dat includeblock sowieso geen php-scripts draaien. Als je namelijk gewoon INCLUDE BLOCK : blockname doet, dan wordt je script letterlijk erneer gezet.
Het includescript block:
  1. <!-- CONTENT -->
  2. <div id="subcontent">
  3. <!-- INCLUDESCRIPT BLOCK : content -->
  4. </div>

en het stuk waar ik de includes assign:
  1. // INCLUDE PAGE
  2. // if page exists, include it
  3. if (isset($_GET['page']) && file_exists($_GET['page'].'.inc.php')) {
  4. $tpl -> AssignInclude('content', $_GET['page'].'.inc.php');
  5. }
  6. // page doesn't exist, show error page
  7. elseif (isset($_GET['page']) && file_exists($_GET['page'].'.inc.php') == FALSE) {
  8. $tpl -> AssignInclude('content', '404error.inc.php');
  9. }
  10. // no page set, show home
  11. else {
  12. $tpl -> AssignInclude('content', 'home.inc.php');
  13. }
Offline Thomas - 20/10/2006 09:27
Avatar van Thomas Moderator Huh?
Je kunt toch PHP en templates gescheiden houden?

Ik werk altijd met INCLUDE BLOCK, nooit met INCLUDESCRIPT BLOCK, omdat je daarmee in feite breekt met de hele reden waarom je in de eerste plaats van een template-engine gebruik maakte, nl. het scheiden van code en layout.

Als je in het juiste BLOCK zit om een bepaalde template-variabele te vullen, en je hebt in PHP een variabele $time, dan kun je overal $tpl->assign("<template_variabele>", $time); uitvoeren.

Ik denk dat je problemen voornamelijk voortkomen uit de manier waarop je templates en PHP-scripts probeert samen te voegen, en de naamgeving van blokken / variabelen binnen je templates.

Ik zou voordat je verder gaat dit ontwerp eerst in orde maken.
Offline Dark_Paul - 20/10/2006 09:38
Avatar van Dark_Paul PHP ver gevorderde Elke pagina.inc.php heeft ook weer een aparte .tpl, zodat ik alles toch gescheiden houdt. Het is alleen zon grote lap index.php als ik niet include, vandaar. Mijn lay-out en PHP is wel gescheiden hoor .
Het probleem is, dat ik op login.inc.php, de variabele $time; nodig heb, niet om te assignen ofzo, maar om weg te stoppen in de database. Ik moet met die variabele kunnen werken in de login. Verder viel het me ook al op (dat heb ik opgelost met sessies, niet echt ideaal), dat ik een waarde uit login.inc.php, niet via index.php kan assignen, terwijl die login.inc.php als eerste wordt geïnclude.
Offline Thomas - 20/10/2006 09:47 (laatste wijziging 20/10/2006 10:06)
Avatar van Thomas Moderator Als je pagina-opzet goed is, dan gebruik je variabelen (PHP of template) alleen binnen dat onderdeel (binnen PHP-bestand of template).

Het lijkt mij onwenselijk om een variabele in script #1 te declareren, en in script #2 te gebruiken (tenzij dit een variabele met een globaal karakter is, die op de hele site geldigheid dient te hebben).

Dit is weliswaar onwenselijk, maar niet onmogelijk. Vaak is het zo dat als een ge-assignde waarde niet op het scherm wordt getoond, dat je in het verkeerde BLOCK zit te werken.

PHP heeft geen last van de variabelen-scopes die TemplatePower gebruikt lijkt mij, dus dit zou gewoon moeten werken.

EDIT: Hmm, misschien introduceert TP haar eigen variabelen-scopes voor PHP als je gebruik maakt van INCLUDESCRIPT BLOCK?

EDIT2: Het is logisch (?) dat variabelen in PHP-bestanden die via assignInclude ingevoegd worden, niet gedeeld kunnen worden in andere PHP-bestanden. Volgens mij worden deze ge-assignInclude scripts apart uitgevoerd (als je de source van de templatepower-class bekijkt zie je dat deze bestanden worden "ge-include" d.m.v. file()), en de uitvoer (HTML) wordt als template gebruikt... je PHP-variabelen gaan dan dus verloren.
Offline Dark_Paul - 20/10/2006 10:10 (laatste wijziging 20/10/2006 10:16)
Avatar van Dark_Paul PHP ver gevorderde Okej, dat is dus heel jammer. Is er een manier, behalve sessies, om een variabele die ik op index.php definiëer, op te roepen in een script dat via AssignInclude(); is opgevraagd?
Anders zal ik dus toch weer een extra sessie moeten maken, want dan kan 't wel..
Ik hoef die variabele ook niet te printen ofzo, bij het inloggen moet die tijd in de database worden gezet, en worden eventueel cookies gezet. Voor het controleren van alle cookies enzo moet de tijd overal gelijk zijn.

Edit: DOH!! ik ben echt dom, 't hoeft niet per se. Als je inlogt, en je wilt de cookie laten zetten (om ingelogd te blijven), kan ik gewoon op login.inc.php de tijd zetten en daarmee werken, want dan wordt de tijd in de cookie en de database toch hetzelfde. Hetzelfde gebeurt bij de functie, zolang daar de tijden ook maar gelijk zijn is het al goed..
Nu nog uitvinden waarom mijn functie niet goed werkt.. maar er wordt niet meer gereageerd op mijn topic 
Offline Thomas - 20/10/2006 10:46 (laatste wijziging 20/10/2006 10:47)
Avatar van Thomas Moderator Even voor de duidelijkheid (als ik de TP-class goed begrijp):

De scripts die jij assignInclude worden omgezet naar templates. Alle variabelen die je in deze scripts gebruikt gaan dus verloren. De output van de scripts (templates) kunnen weer gevuld/opgebouwd worden met PHP-scripts.

Ik zou dus alleen scripts assignIncluden als je een soort van dynamische templates nodig hebt. In alle andere gevallen kun je in principe templates assignIncluden en daarna (nadat je ge-prepare()d hebt) de templates vullen met php-bestanden die je include.
Het is dan belangrijk dat namen van blokken en dergelijke niet overlappen, tenzij je dus PHP- of template-variabelen in meerdere templates wilt gebruiken. Daarvoor kun je assignGlobal gebruiken!
Offline Dark_Paul - 20/10/2006 11:01 (laatste wijziging 20/10/2006 11:02)
Avatar van Dark_Paul PHP ver gevorderde De scripts die ik include, maken elk weer gebruik van een eigen .tpl die wordt geparsed. Omdat de inhoud veel afhankelijk is van ingelogd of niet, de juiste rechten of niet enzovoorts, en veel met MySQL.

Ik snap wat je bedoelt, is misschien voor het volgende project een idee. Ik ben nu al een eind op weg met deze zo te maken, en het kost me te veel tijd om dat weer om te zetten.

Ik heb in ieder geval wel gevonden waar mijn probleem zit, er gaat iets mis met het zetten van de cookies. Het probleem is, wanneer ik login.inc.php apart open en de juiste bestanden include, worden de cookies WEL gezet. Log ik zo in, op index.php, dan worden de cookies NIET gezet :S
Login.inc.php > http://www.plaatscode.be/2917/ Ik krijg 'cookie1 niet gezet' te zien.
http://www.plaatscode.be/2918/ < de functie die je ingelogd moet houden (ik include 'm niet, maar ik denk dat daar een fout inzit waardoor de cookies verwijderd worden, maar ik krijg geen melding daarvan).

Edit, ik sprak mezelf tegen, ik weet eigenlijk niet meer waar 't nou fout gaat :S
Offline Thomas - 20/10/2006 11:56
Avatar van Thomas Moderator Zet voor jezelf eens op een rij wat er achtereenvolgens gebeurt, want het klinkt een beetje alsof je in je eigen code verdwaald bent. Voor mij is het ook niet meer duidelijk wat wanneer wordt aangeroepen of uitgevoerd.

Trek alle handelingen (inloggen, cookies setten, database updaten, etc.) eens uit elkaar en vergelijk deze (gegevens) met elkaar.

Creëer dus wat orde voor jezelf.
Offline Dark_Paul - 20/10/2006 12:10 (laatste wijziging 20/10/2006 12:40)
Avatar van Dark_Paul PHP ver gevorderde De duidelijkheid (ook deels voor mezelf):
Bij het binnenkomen op index.php wordt de functie check_login(); aangeroepen. Er wordt dan gekeken of er sessies zijn gezet.
Er is een sessie gezet:
- Kijk of de persoon nog ingelogd is in de tabel online;
> Nee, verwijder de sessie.
> Ja, kijk of er cookies gezet zijn.
Als er cookies gezet zijn, controleer of de cookies nog goed zijn.
Als de cookies goed zijn, update ze. Zijn ze niet meer goed, verwijder ze.
Update de tabel 'members' met de juiste gegevens.
Er is geen sessie gezet, maar er zijn wel cookies:
- Kijk of de cookies kloppen met de database;
> De cookies kloppen, update de database, de cookies en zet de sessies met de databasegegevens.
> De cookies kloppen niet, verwijder ze.

Bij het inloggen:
Vergelijk de ingevoerde gegevens met de database, kloppen ze, controleer dan of de persoon niet gebanned is.
> Niet gebanned, Zet de sessies en update de database.
Controleer dan of de persoon ingelogd wil blijven (dmv cookies), is dit het geval, zet cookies.
> Gebanned, laat de melding zien.
Kloppen de inloggegevens niet, laat een foutmelding zien.

Dit is eigenlijk wat er gebeurt, ik kan niet uitvinden waar het fout gaat. Misschien moet ik de hele functie maar weer
herschrijven en opsplitsen in 2 delen, de sessiecheck en de cookiecheck.

Edit
Okej, ik heb de functie herschreven en verdeeld in 2 stukken, maar daar zat het probleem dus niet. Nadat ik login.inc.php zelf eens grondig ging onderzoeken, zag ik dat daar een fout inzat.
Als ik login.inc.php normaal open, dan kan ik inloggen en worden de cookies goed gezet. Als ik de pagina include, en dan inlog, dan gaat het mis. Dan staat er 'cookies gezet', maar zijn ze niet gezet.
http://www.plaatscode.be/2919/
Als ik die 2 includes weglaat en ik open 'm gewoon via index.php, dan lukt 't niet. Zo worden de cookies WEL goed gezet. Ik weet alleen niet waar het aan ligt..
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.212s