[PHP] Smarty template probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Xanland
  • Registratie: Oktober 2007
  • Laatst online: 19-09 23:45
Dag mede-tweakers,

Op het moment ben ik bezig een klein, maar toch wel weer makkelijk CMS (voor niet alleen/o.a.) mijzelf te scripten in de aangegeven programmeertaal: PHP.

Sinds kort ben ik er een template-systeem in aan het bouwen, eerst had ik nog per module een layout, maar aangezien het zeer omslachtig is voor toevoegen van dingen en designers. Toch maar even een template-systeem gedownload, genaamd Smarty.

Voor op de homepage werkt het perfect, ook qua assignen van variablen e.d. Nu heb ik een module gebouwd in de map modules/foto-album, link is http://domein.ext/foto-album - het wordt dus gerewrite. En index.php?pagina=iets gaat ook naar /iets.

Om de één of andere reden kunnen de modules het template-ding niet vinden, hoewel ik toch van een absoluut pad (volgens mij heet dat zo) uitgaat. Als /var/www/path/to/my/domain/template/templates/.

En hierdoor krijg ik dus dat ik of een '404' krijg, of dat hij een aantal includes niet kan doen. :S

Wie o wie, kan mij helpen!?

RobIII: Ik probeer als ik wil stoppen met mijn auto ook altijd de sigarettenaansteker, de airco, 3 radioknoppen en de binnenverlichting en dan de rem :P


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Dat is een geval glazen bol kijken zonder een feitelijke foutmelding.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Xanland
  • Registratie: Oktober 2007
  • Laatst online: 19-09 23:45
Probleem is er nog steeds, maar iets veranderd.

Heb nu onder andere 2 variables geset die betrekking hebben tot die functie die ik gebruik {include_php}, noemend $trusted_dir en $security,

Als ik bij die include_php de dingen die ik include wel een / voor zet, dan krijg ik errors als deze:
code:
1
2
3
4
5
Warning: Smarty error: file:/menu_register.php is not readable in /var/www/vhosts/xanland.nl/subdomains/cms/httpdocs/template/engine/Smarty.class.php on line 1092

Notice: Undefined index: php_resource in /var/www/vhosts/xanland.nl/subdomains/cms/httpdocs/template/engine/internals/core.smarty_include_php.php on line 27

Warning: _include(): Failed opening '' for inclusion (include_path='.:') in /var/www/vhosts/xanland.nl/subdomains/cms/httpdocs/template/engine/Smarty.class.php on line 1922

Dat per {include_php}.

Maar als ik die / weglaat, dan laat hij helemaal niks zien, een 404: http://cms.xanland.nl/foto-album/ (alleen om laten zien wat er gebeurd (hier in Chrome iig))!


edit:
Kan mijn .htaccess misschien roet in het eten gooien....?

[ Voor 3% gewijzigd door Xanland op 31-03-2009 22:07 ]

RobIII: Ik probeer als ik wil stoppen met mijn auto ook altijd de sigarettenaansteker, de airco, 3 radioknoppen en de binnenverlichting en dan de rem :P


Acties:
  • 0 Henk 'm!

  • !null
  • Registratie: Maart 2008
  • Laatst online: 20-09 20:32
Ik weet (nog) niet veel van URL rewriting, maar bij die foutmeldingen krijg ik het idee dat je het e.e.a. verkeerd doet. Zo zou ik een smarty template gewoon .tpl noemen en geen .php (en dus geen php code erin stoppen).
Die laatste _include() (waar is die functie van?) krijgt blijkbaar een lege string. Het is me allemaal niet erg duidelijk.

Ampera-e (60kWh) -> (66kWh)


Acties:
  • 0 Henk 'm!

  • Xanland
  • Registratie: Oktober 2007
  • Laatst online: 19-09 23:45
De smarty template heet ook index.tpl en include daar via die include_php functie een 3-tal files.
En die laatste _include()-error, die komt door die error op regel 1 van dat code-blok - want die kan niet geïnclude worden.

Stukje uit foto-album/index.php ->
PHP:
1
2
3
4
5
$smarty->assign('pagina', $pagina);
$smarty->assign('pagina2', $pagina2);
//$smarty->assign('inhoud', '');
$smarty->display('index.tpl'); 
//overhevelen van de variablen dus, inhoud doe ik later aangezien ik eerst die errors wil fixen


En een vb-include uit index.tpl ->
code:
1
2
{include_php file="menu_register.php"}
// geeft ie dus die error op in mijn vorige post


Hoop het zo iets duidelijker gemaakt te kunnen hebben! :+

[ Voor 0% gewijzigd door Xanland op 31-03-2009 22:21 . Reden: foutje in code-blok ]

RobIII: Ik probeer als ik wil stoppen met mijn auto ook altijd de sigarettenaansteker, de airco, 3 radioknoppen en de binnenverlichting en dan de rem :P


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Zo te zien probeert hij het absolute pad /menu_register.php te openen. Lijkt me heel sterk dat dit bestand bestaat.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • harrald
  • Registratie: September 2005
  • Laatst online: 16-09 08:44
Dus menu_register.php staat in dezelfde map als je smarty templates? Het lijkt mij sterk.

Acties:
  • 0 Henk 'm!

  • Xanland
  • Registratie: Oktober 2007
  • Laatst online: 19-09 23:45
Xanland schreef op dinsdag 31 maart 2009 @ 22:06:
...
Heb nu onder andere 2 variables geset die betrekking hebben tot die functie die ik gebruik {include_php}, noemend $trusted_dir en $security,
...
Die variabelen $security staat op TRUE, om $trusted_dir te kunnen gebruiken. $trusted_dir is het pad naar waar include_php kijkt voor de in te cluden bestanden.
Zo zou het in principe, en volgens mij, dus moeten werken! :+


Voor info over die variablen, $security, $trusted_dir en {include_php} in verband met meer duidelijkheid (hoop ik).

RobIII: Ik probeer als ik wil stoppen met mijn auto ook altijd de sigarettenaansteker, de airco, 3 radioknoppen en de binnenverlichting en dan de rem :P


Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Xanland schreef op dinsdag 31 maart 2009 @ 22:20:

[..]

En een vb-include uit index.tpl ->
code:
1
2
{include_php file="menu_register.php"}
// geeft ie dus die error op in mijn vorige post


Hoop het zo iets duidelijker gemaakt te kunnen hebben! :+
Als je zo gaat includen met Smarty, dan kan je eigenlijk net zo goed PHP gebruiken (als template).

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

Verwijderd

Wacht even hoor. Zo offtopic als de hel, maar in mijn ogen klopt er sowieso iets niet in hoe je smarty gebruikt

Ben je bekend met MVC?

Je probeert dus in de View een PHP-pagina te includen? Ik ben ook niet heel ervaren (sterker nog, ik ken Smarty alleen van een medestudent :P ), maar zoals ik dat zie is dat niet handig. Het handigste is volgens mij als je de Controller (.php) laat bepalen welke gegevens je in de View (.tpl) laat zien. Wat je dus in de Controller doet:

- Authenticatie bepalen
- Bepalen welke gegevens je uit de Model haalt.
- Deze variabelen parsen in een smarty-object
- de .tpl parsen in dat zelfde smarty object

de variabele geef je dus in principe mee door $smarty->assign('naam', $naam), zoals je al doet met die pagina´s

variabele 'naam' wordt indien goed doorgegeven in de .tpl weegegeven door {naam} op de plek te zetten waar je de waarde wilt zien.

Wat ik ook gek vind is dat je een hele pagina wilt assignen. Het uiterste wat ik zou willen assignen aan "View-materiaal" (dus statische HTML) is eventueel bij een dynamisch menu, waarvan je in de Controller moet bepalen welk menu-items je ziet.

Om kort te zijn:

ik raad het ten strengste af om in de .tpl nog php te gebruiken. De PHP-zaken moeten allemaal vóor het parsen van de .tpl al gedaan zijn.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ben ik het niet helemaal mee eens. Je controller haalt bepaalde dingen op voor je in zo'n geval en in je view kun je dat vormgeven. PHP in je view is dus helemaal niet gek, integendeel. In feite paas je een bak data door vanuit je controller naar je view en in je view loop je daar doorheen en voer je evt. nog opmaaklogica uit.

Acties:
  • 0 Henk 'm!

Verwijderd

Nou ja. Dat kan een verschil in inzicht zijn uiteraard.

Ik persoonlijk ga er altijd van uit dat de persoon die de View maakt (=toch meestal een designer die weinig met programeren te maken heeft), helemaal niks van serverside-scripten of programmeren snapt. Die moet dus alleen zeggen van eh: ok in dit divje of celletje wil ik de naam van de ingelogde user kunnen zien, dan plaats ik daar {name}.

In mijn ogen: de Controller bepaalt wát er weergegeven wordt en geeft dit in strings of arrays door. De View bepaalt wáar de doorgezonden strings en arrays worden weergegeven, door middel van de {variabele} tags. Ik ga er altijd van uit dat de Controller de logica bevat. Zo houd je duidelijk gescheiden welk deel van de applicatie wat doet, namelijk: data ophalen en bruikbaar maken (Model), weergeven (View), beslissingen nemen(Controller).

Maar zoals ik al zei: dat kan persoonlijk zijn. Ik wil dus ook absoluut niet zeggen dat dat van mij per se beter is dan dat van jou :P .

Waar het mij vooral om gaat is dat hij in die View nog PHP include terwijl je met Smarty die eventuele dynamische opmaak ook wel kunt regelen. Dat vind ik heel slordig.

Maargoed.... offtopic :P.

Acties:
  • 0 Henk 'm!

  • Xanland
  • Registratie: Oktober 2007
  • Laatst online: 19-09 23:45
Bedankt voor de berichten zover, ik heb hier op gereageerd m.b.t het CMS.
Voor template-makers zijn het nu gewoon duidelijke variablen geworden en nu wordt er GEEN PHP meer geparsed in de templates. Dat is dus nu voor de template-bestanden (dus in de PHP-bestanden) gebeurd. :)

Maar om de één of andere reden heb ik dit probleem nu nog steeds, en ik heb nu zo'n vermoeden dat het aan mijn .htaccess ligt! Mijn .htaccess is als volgd: (aardig rommelig ja en onnodige zooi - nog geen tijd gehad om op te ruimen :().

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

RewriteCond %{SCRIPT_FILENAME} -f [OR]
RewriteCond %{SCRIPT_FILENAME} -d
RewriteRule .* - [L]

RewriteRule ^register/$ register.php [QSA,L]
RewriteRule ^nieuws/$ modules/nieuws/index.php [QSA,L]
RewriteRule ^foto-album/$ modules/foto-album/index.php [QSA,L]
RewriteRule ^gastenboek/$ modules/gastenboek/index.php [QSA,L]
RewriteRule ^inschrijven/$ modules/inschrijven/index.php [QSA,L]
#RewriteRule ^nieuws/([^-]+)/([^&]+)\.html$ modules/nieuws/index.php?id=$1&titel=$2 [L]
#RewriteRule ^foto-album/$ modules/foto-album/ [L]
#RewriteRule ^foto-album/([^&]+)\.html$ modules/foto-album/index.php?album=$1 [L]
RewriteRule ^(.*)/$ index.php?pagina=$1 [QSA,L]
#RewriteRule ^(.*)$ index.php?pagina=index [QSA,L]

# show php errors
php_flag display_startup_errors on
php_flag display_errors on



Hij heeft gewoon goed gewerkt, dus daar twijfel ik niet aan. Het ging fout toen ik het template-systeem ging implementeren.
Maar om nog even terug te komen: De pagina waar ik al een paar posts eerder een link naar gaf, geeft dus nog steeds een 404 - en heb dus zo'n vermoeden (omdat template-systeem nu goed werkt), dat het dus aan die .htaccess ligt. ;)

Wat doe ik nu (finaal) fout...?

RobIII: Ik probeer als ik wil stoppen met mijn auto ook altijd de sigarettenaansteker, de airco, 3 radioknoppen en de binnenverlichting en dan de rem :P


Acties:
  • 0 Henk 'm!

  • Xanland
  • Registratie: Oktober 2007
  • Laatst online: 19-09 23:45
Echt niemand die dit weet!?

RobIII: Ik probeer als ik wil stoppen met mijn auto ook altijd de sigarettenaansteker, de airco, 3 radioknoppen en de binnenverlichting en dan de rem :P


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Tja, ik denk dat je gewoon moet leren debuggen. Strip het overbodige weg en voeg stukje bij beetje weer toe en kijk waar t mis gaat. Error reporting op E_ALL (bij voorkeur E_ALL|E_STRICT natuurlijk) en testen maar.

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Laat je rewrites even weg en roep je php file in de url aan. Zorg dat error reporting aanstaat, ook voor Smarty.

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Xanland
  • Registratie: Oktober 2007
  • Laatst online: 19-09 23:45
Ok, ik weet atm wat het 'probleem' is.

Als ik nu smarty.php (staat een class die de smarty class extend in) include in mijn file, krijg ik dus een 404 op die index.php van die 'module'. Maar ik kan niet achterhalen waarom, omdat die pagina dus herlaad, maar als ik die include comment, dan werkt het dus wel. Dat is dus het vreemde!

Wat kan het nou zijn, want op de hoofdsite gaat het gewoon goed. :S

RobIII: Ik probeer als ik wil stoppen met mijn auto ook altijd de sigarettenaansteker, de airco, 3 radioknoppen en de binnenverlichting en dan de rem :P


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Misschien door Smarty's internal caching en parsing systeem? Wellicht heb je deze directories niet goed ingesteld.

Acties:
  • 0 Henk 'm!

  • Xanland
  • Registratie: Oktober 2007
  • Laatst online: 19-09 23:45
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// *nix style (note capital 'S')
define('SMARTY_DIR', '/var/www/vhosts/xanland.nl/subdomains/cms/httpdocs/template/engine/');

require_once(SMARTY_DIR . 'Smarty.class.php');

class Smarty_xanlandCMS extends Smarty
{
    function Smarty_xanlandCMS()
    {

        $this->Smarty();
        
        $this->template_dir = '/var/www/vhosts/xanland.nl/subdomains/cms/httpdocs/template/templates/';
        $this->compile_dir  = '/var/www/vhosts/xanland.nl/subdomains/cms/httpdocs/template/templates_c/';
        $this->config_dir   = '/var/www/vhosts/xanland.nl/subdomains/cms/httpdocs/template/configs/';
        $this->cache_dir    = '/var/www/vhosts/xanland.nl/subdomains/cms/httpdocs/template/cache/';
//      $this->trusted_dir  = array('/var/www/vhosts/xanland.nl/subdomains/cms/httpdocs/template/standard/');
        $this->debugging    = TRUE;
//      $this->security     = TRUE;
    }
}
?>


Dat is smarty.php

Die wordt vanaf modules/foto-album/index.php op de volgende manier geïnclude:
PHP:
1
2
3
<?php
include('../../template/smarty.php');
?>

Want hij staat in hoofddir/template

[ Voor 4% gewijzigd door Xanland op 05-04-2009 22:21 ]

RobIII: Ik probeer als ik wil stoppen met mijn auto ook altijd de sigarettenaansteker, de airco, 3 radioknoppen en de binnenverlichting en dan de rem :P


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Als je 404 errors krijgt kan je beter even in je access_log kijken van Apache welk bestand hij niet kan vinden.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

code:
1
2
3
4
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

Als dat al je eerste, en [L]aatste rewriterule is, wat denk je dan dat er gebeurt...

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...

Pagina: 1