TinyButStrong - the PHP Template Engine
Categories > TinyButStrong general (FR) >

sous template

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs

By: franck
Date: 2013-06-03
Time: 18:37

sous template

J'ai encore un problème avec un sous template.

<?php
if (isset($this))
{
    $tbs = &$this;
    $tpl='tpl.html';

}
else
{
    require_once('Tbs.class.php');
    $tbs = new clsTinyButStrong;
    $tpl='tpl.html';
}
include('config.php');
include_once('maclass.php');

$maclass = new Maclass();


$tbs->LoadTemplate($tpl);
$tbs->Show();
?>
Quand j'instancie la class Maclass le script général me retourne une page vide.
Si j’exécute le sous script tout seul, le résultat escompté est affiché.
D'après vous qu'est ce qui provoquer le plantage.

Merci
By: Skrol29
Date: 2013-06-03
Time: 23:45

Re: sous template

Bonjour,

On mode sous-template, les erreurs PHP du sous-template sont étouffés, et en cas d'erreur critique, le contenu est vide.
Il faut faire tourner ce sous-script en mode normal (sans le modèle parent) afin de voir l'erreur PHP s'afficher.
By: franck
Date: 2013-06-04
Time: 12:48

Re: sous template

En mode normal je n'ai aucune erreur c'est bien la mon problème !
By: Skrol29
Date: 2013-06-05
Time: 15:58

Re: sous template

Bonjour,

C'est un peu dur comme ça à distance.
Soit tu peux patienter 2-3 jours et je fais un patch de TinyButStrong pour pouvoir debuger ces situations.
Sinon, tu peux regarder ce qu'il se passe en désactivant la ligne "ob_start()" dans la méthode meth_Misc_ChangeMode().
Tu devrais voir s'afficher ton message d'erreur, puis TBS devrait affichre n'importe quoi.
By: franck
Date: 2013-06-05
Time: 20:13

Re: sous template

Bonjour,

Je te remercie je vais essayer cela en attendant le patch.

merci pour ton support.

Franck
By: franck
Date: 2013-06-05
Time: 22:31

Re: sous template

Bonjour,
J'ai désactivé la ligne "ob_start()" dans la méthode meth_Misc_ChangeMode().
J'ai lancer mon script et rien n'est affiché. Aucun message.

Une page blanche...

Voila pour les indications supplémentaires.

a+
By: Skrol29
Date: 2013-06-05
Time: 22:57

Re: sous template

Bon ben c'est un bug de ton script assez méchant car il plante sans message.
Tu as bien paramétré PHP pour afficher les message d'erreur au niveau Notice ?

Peux-tu m'envoyer un bout de code qui permet de reproduire le problème ?
By: franck
Date: 2013-06-06
Time: 12:49

Re: sous template

Non le script ne bug pas quand je le lance en simple script.
Oui l’environnement m'affiche tout en cas  de warning.
Je vais continuer a explorer...

Je vais voir ce que je peux t'envoyer.

Merci pour ton aide.

Franck
By: franck
Date: 2013-06-07
Time: 18:10

Re: sous template

Bonjour,

je viens de vérifier mon php.ihi  coté erreur ma config est :

error_reporting = E_ALL | E_STRICT

donc je devrais tout voir.

J'ai passé mon script (sous template) a la moulinette x-debug, aucune erreur, aucune notification, il fait exactement ce que je lui demande de faire.

Quand j'utilise le script en sous template il n'y a rien qui s'affiche.
voici le code php


<?php
if (!isset($_SESSION))
{
    session_start();
}

if (isset($this))
{
    // We are under the TBS Subtemplate Mode => variables are local by default and the TBS object is referenced by variable $this.
    $tpl = 'sub.tpl.products.list.html';
    $tbs = &$this;
}
else
{
    // This sub-script can also be run under the normal mode => its corresponding template will be displayed like a main template.
    require_once('../lib/Tbs.class.php');
    $tbs = new clsTinyButStrong;
    $tpl = 'sub.tpl.products.list.html';
}
$_SESSION['tabActive']='#produits';
include('../config/boutique.config.php');
include_once('../lib/Boutique.class.php');
$maboutique = new Boutique($dbBoutique, $tblBoutique);
$tbs->LoadTemplate($tpl);
$tbs->Show();
?>
sub.tpl.products.list.html ne contient une page html contenant juste le mot ' produit ' entre les balises body.
Si j'emlève la ligne :
$maboutique = new Boutique($dbBoutique, $tblBoutique);
tout se passe bien, le mot  ' produit ' apparait dans le résultat final comme attendu.

Je vais essayer de passer l'ensemble a la moulinette xdebug....
By: Skrol29
Date: 2013-06-08
Time: 01:10

Re: sous template


Déjà, peux-tu modifire le code source de TBS comme ceci :
function meth_Misc_ChangeMode($Init,&$Loc,&$CurrVal) {
    if ($Init) {
        // Save contents configuration
        $Loc->SaveSrc = &$this->Source;
        $Loc->SaveRender = $this->Render;
        $Loc->SaveMode = $this->_Mode;
        $Loc->SaveVarRef = &$this->VarRef;
        unset($this->Source); $this->Source = '';
        $this->Render = TBS_NOTHING;
        $this->_Mode++; // Mode>0 means subtemplate mode
    } else {
        // Restore contents configuration
        $CurrVal = $this->Source;
        $this->Source = &$Loc->SaveSrc;
        $this->Render = $Loc->SaveRender;
        $this->_Mode = $Loc->SaveMode;
        $this->VarRef = &$Loc->SaveVarRef;
    }
}

Si ça ne donne rien, je soupçonne le code sous "new Boutique($dbBoutique, $tblBoutique)" de faire un exit() inattendu.

Il te faudra alors traquer le ligne sous ce code (new Boutique) afin de trouver le ligne qui fait un exit.


By: franck
Date: 2013-06-08
Time: 14:13

Re: sous template

ok je vais essayer cela
je te reviens apres.
By: franck
Date: 2013-06-08
Time: 17:34

Re: sous template

Salut cela n'a rien donné.

Après avoir remis tbs dans son état initial,et par curiosité j'ai réduit le fichier Boutique.class.php a sa plus simple expression cad:

<?php
class Boutique
{
}
?>
j'ai exactement le même resultat : rien .
C'est vraiment très étrange, car j'ai déja utilisé des sous templates, et les problèmes que j,avqais alors était a l'inclusion des fichiers de class.
il fallait vraiment utiliser un include_once
By: Skrol29
Date: 2013-06-08
Time: 21:04

Re: sous template

Bon, en dernière idée, essayez avec une autre version de PHP.

Sinon, pour examiner ton cas, j'aurai besoin d'avoir du code qui permette de reproduire le bug.
By: franck
Date: 2013-06-09
Time: 23:06

Re: sous template

bonjour,

J'ai trouvé qques chose.
Le précédent code était:
if (isset($this))
{
    // We are under the TBS Subtemplate Mode => variables are local by default and the TBS object is referenced by variable $this.
    $tpl = 'sub.tpl.products.list.html';
    $tbs = &$this;
}
else
{
    // This sub-script can also be run under the normal mode => its corresponding template will be displayed like a main template.
    require_once('../lib/Tbs.class.php');
    $tbs = new clsTinyButStrong;
    $tpl = 'sub.tpl.products.list.html';
}
$_SESSION['tabActive']='#produits';
include('../config/boutique.config.php');
include_once('../lib/Boutique.class.php');
$maboutique = new Boutique($dbBoutique, $tblBoutique);
$tbs->LoadTemplate($tpl);
$tbs->Show();
?>
j'ai dupliqué et modifié les chemin des includes pour la class boutique, dans les deux parties du test ( if (isset($this)) ),
afin d'adapter le chemin de la class du fait que tout les fichier ne sont pas dans le même répertoire.



if (isset($this))
{
    // We are under the TBS Subtemplate Mode => variables are local by default and the TBS object is referenced by variable $this.
    $tpl = 'sub.tpl.products.list.html';
    $tbs = &$this;
    include('config/boutique.config.php');
    include_once('lib/Boutique.class.php');
}
else
{
    // This sub-script can also be run under the normal mode => its corresponding template will be displayed like a main template.
    require_once('../lib/Tbs.class.php');
    $tbs = new clsTinyButStrong;
    $tpl = 'sub.tpl.products.list.html';
    include('../config/boutique.config.php');
    include_once('../lib/Boutique.class.php');
}
$_SESSION['tabActive']='#produits';

$maboutique = new Boutique($dbBoutique, $tblBoutique);
$tbs->LoadTemplate($tpl);
$tbs->Show();
?>
Cela a l'air de fonctionner.
Cela explique pourquoi cela fonctionnait en script et non en mode sous-script.
Quand je déclarais la ligne
$maboutique = new Boutique($dbBoutique, $tblBoutique);
l'inclusion de la classe n'ayant été faite correctement ca plantait.
Un gros merci pour l'aide.

Cependant y aurait il un moyen de modifier TBS pour qu'il affiche un message d'erreur dans un tel cas ?
By: Skrol29
Date: 2013-06-10
Time: 01:53

Re: sous template

Ok, super, bravo.