IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MkFramework Discussion :

Lecture d'une table dans une table


Sujet :

MkFramework

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut Lecture d'une table dans une table
    Saut,
    merci à l'auteur de Mkframework plus je l'étudie et plus je le trouve complet.

    J'ai deux tables
    eleves: id, nom, prenom, classe_id
    classes: id, nom, année...

    je voudrai faire une page qui affiche
    ->boucle sur classe
    Et pour chaque classe ->boucle des élèves

    Je crois que c'est avec la création de CRUD integrable mais je ne sais pas comment faire.Je n'ai pas d'exemple pour comprendre. Avec le code generé je ne sais pas comment l’intégrer, comment l’écrire. et où l'écrire.

    Merci

    PS
    dans le fichier site.ini.php à la ligne 75 il y a -content="0-
    est-ce normal qu'il manque -"- de fermeture pour obtenir -content="0"-? ça ne genere pas de bug?

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Dans un premier temps, téléchargez la dernière version du framework: j'ai corrigé quelques éléments de la partie "module intégrable", regénérez ensuite votre module intégrable avec la nouvelle version du framework.

    Pour l'utilisation conjointe d'un module et de sous module, vous pouvez par exemple indiquer dans la methode _show() de votre module classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //on instancie le module integrable
    $oModuleEleves=new module_eleves;
    //on indique au module integrable les parametres a prendre en compte pour ses liens
    $oModuleEleves->setRootLink(_root::getParamNav(),array('id'=>_root::getParam('id')));
    //on recuere la vue de ce module
    $oViewEleves=$oModuleEleves->_index();
    Mais si vous faites simplement cela, les éleves affichés ne seront pas filtrés par classe, il faut pour cela modifier votre module intégrable

    Par exemple, modifiez votre classe modèle model/model_eleves.php pour ajoutez une methode retournant les eleves par classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //dans la classe model_eleves
    public function findAllByClasse($classe_id){
     return $this->findMany('SELECT * FROM eleves WHERE classe_id=?',(int)$classe_id);
    }
    Et dans votre module intégrable module_eleves, modifier l'action _list
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public function _list(){
     
    $tEleves=model_eleves::getInstance()->findAll();
     
    $oView=new _view('eleves::list');
    $oView->tEleves=$tEleves;
     
    return $oView;
    }
    Remplacer l'appel à votre modèle findAll() par findAllByClasse()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public function _list(){
     
    	$tEleves=model_eleves::getInstance()->findAllByClasse(_root::getParam('id'));
     
    	$oView=new _view('eleves::list');
    	$oView->tEleves=$tEleves;
     
    	return $oView;
    }
    Pour lister uniquement les eleves de la classe sélectionné, ensuite pensez à forcer la classe de l'elève en modifiant la methode "save()" du fichier module/eleves/main.php
    Remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if($oEleves->isValid()){
     
    	$oEleves->save();
    	//une fois enregistre on redirige (vers la page liste)
    	$this->redirect('list');
    }else{
    	return $oEleves->getListError();
    }
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if($oEleves->isValid()){
    	//on force la classe de l'eleve
    	$oEleves->classe_id=_root::getParam('id');
     
    	$oEleves->save();
    	//une fois enregistre on redirige (vers la page liste)
    	$this->redirect('list');
    }else{
    	return $oEleves->getListError();
    }
    Ainsi, en cliquant sur le lien "show" de votre classe, vous pouvez en dessous ajouter, modifier des eleves


    PS
    dans le fichier site.ini.php à la ligne 75 il y a -content="0-
    est-ce normal qu'il manque -"- de fermeture pour obtenir -content="0"-? ça ne genere pas de bug?
    C'est un commentaire pour expliquer le paramétrage redirection.default
    j'indique juste ce que donne header et ce que donne http comme variable
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Je pensais pas que j'en baverais autant.
    Je passe beaucoup de temps à jouer les détectives pour comprendre et ça ne marche toujours pas.
    Je sais que ce n'est pas du temps de perdu mais...

    J'ai tout fait comme tes explications.
    Quand j'affiche ma liste de classe j'ai un tableau. Quand je clique sur "show" d'une des classes affichées ->retour vide.

    classe/main.php
    <?php
    class module_classes extends abstract_module{

    public function before(){
    $this->oLayout=new _layout('template1');

    $this->oLayout->addModule('menu','menu::index');
    }


    public function _index(){
    //on considere que la page par defaut est la page de listage
    $this->_list();
    }

    public function _list(){

    $tClasses=model_classes::getInstance()->findAll();

    $oView=new _view('classes::list');
    $oView->tClasses=$tClasses;

    $oView->tJoinmodel_ateliers=model_ateliers::getInstance()->getSelect(); $oView->tJoinmodel_sessions=model_sessions::getInstance()->getSelect();

    $this->oLayout->add('main',$oView);
    }


    public function _new(){
    $tMessage=$this->save();

    $oClasses=new row_classes;

    $oView=new _view('classes::new');
    $oView->oClasses=$oClasses;

    $oView->tJoinmodel_ateliers=model_ateliers::getInstance()->getSelect(); $oView->tJoinmodel_sessions=model_sessions::getInstance()->getSelect();

    $oPluginXsrf=new plugin_xsrf();
    $oView->token=$oPluginXsrf->getToken();
    $oView->tMessage=$tMessage;

    $this->oLayout->add('main',$oView);
    }


    public function _edit(){
    $tMessage=$this->save();

    $oClasses=model_classes::getInstance()->findById( _root::getParam('id') );

    $oView=new _view('classes::edit');
    $oView->oClasses=$oClasses;
    $oView->tId=model_classes::getInstance()->getIdTab();

    $oView->tJoinmodel_ateliers=model_ateliers::getInstance()->getSelect(); $oView->tJoinmodel_sessions=model_sessions::getInstance()->getSelect();

    $oPluginXsrf=new plugin_xsrf();
    $oView->token=$oPluginXsrf->getToken();
    $oView->tMessage=$tMessage;

    $this->oLayout->add('main',$oView);
    }

    public function _show(){
    //on instancie le module integrable
    $oModuleEleves=new module_eleves;
    //on indique au module integrable les parametres a prendre en compte pour ses liens
    $oModuleEleves->setRootLink(_root::getParamNav(),array('id'=>_root::getParam('id')));
    //on recuere la vue de ce module
    $oViewEleves=$oModuleEleves->_index();

    /*$oClasses=model_classes::getInstance()->findById( _root::getParam('id') );

    //on instancie le module integrable
    $oModuleEleves=new module_eleves;
    //on indique au module integrable les parametres a prendre en compte pour ses liens
    $oModuleEleves->setRootLink(_root::getParamNav(),array('id'=>_root::getParam('id')));
    //on recuere la vue de ce module
    $oViewEleves=$oModuleEleves->_index();


    $oView=new _view('classes::show');
    $oView->oClasses=$oClasses;

    $oView->tJoinmodel_ateliers=model_ateliers::getInstance()->getSelect(); $oView->tJoinmodel_sessions=model_sessions::getInstance()->getSelect();
    $this->oLayout->add('main',$oView);*/
    }

    public function _delete(){
    $tMessage=$this->delete();

    $oClasses=model_classes::getInstance()->findById( _root::getParam('id') );

    $oView=new _view('classes::delete');
    $oView->oClasses=$oClasses;

    $oView->tJoinmodel_ateliers=model_ateliers::getInstance()->getSelect(); $oView->tJoinmodel_sessions=model_sessions::getInstance()->getSelect();

    $oPluginXsrf=new plugin_xsrf();
    $oView->token=$oPluginXsrf->getToken();
    $oView->tMessage=$tMessage;

    $this->oLayout->add('main',$oView);
    }

    public function save(){
    if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    return null;
    }

    $oPluginXsrf=new plugin_xsrf();
    if(!$oPluginXsrf->checkToken( _root::getParam('token') ) ){ //on verifie que le token est valide
    return array('token'=>$oPluginXsrf->getMessage() );
    }

    $iId=_root::getParam('id',null);
    if($iId==null){
    $oClasses=new row_classes;
    }else{
    $oClasses=model_classes::getInstance()->findById( _root::getParam('id',null) );
    }

    $tId=model_classes::getInstance()->getIdTab();
    $tColumn=model_classes::getInstance()->getListColumn();
    foreach($tColumn as $sColumn){
    if(isset($_FILES[$sColumn]) and $_FILES[$sColumn]['size'] > 0){
    $sNewFileName='data/upload/'.$sColumn.'_'.date('Ymdhis');

    $oPluginUpload=new plugin_upload($_FILES[$sColumn]);
    $oPluginUpload->saveAs($sNewFileName);
    $oClasses->$sColumn=$oPluginUpload->getPath();
    continue;
    }else if( _root::getParam($sColumn,null) ==null ){
    continue;
    }else if( in_array($sColumn,$tId)){
    continue;
    }

    $oClasses->$sColumn=_root::getParam($sColumn,null) ;
    }

    if($oClasses->isValid()){

    $oClasses->save();
    //une fois enregistre on redirige (vers la page liste)
    _root::redirect('classes::list');
    }else{
    return $oClasses->getListError();
    }

    }

    public function delete(){
    if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    return null;
    }

    $oPluginXsrf=new plugin_xsrf();
    if(!$oPluginXsrf->checkToken( _root::getParam('token') ) ){ //on verifie que le token est valide
    return array('token'=>$oPluginXsrf->getMessage() );
    }

    $oClasses=model_classes::getInstance()->findById( _root::getParam('id',null) );

    $oClasses->delete();
    //une fois enregistre on redirige (vers la page liste)
    _root::redirect('classes::list');

    }

    public function after(){
    $this->oLayout->show();
    }


    }

    /*variables
    #select $oView->tJoinclasses=classes::getInstance()->getSelect();#fin_select
    #uploadsave if(isset($_FILES[$sColumn]) and $_FILES[$sColumn]['size'] > 0){
    $sNewFileName='data/upload/'.$sColumn.'_'.date('Ymdhis');

    $oPluginUpload=new plugin_upload($_FILES[$sColumn]);
    $oPluginUpload->saveAs($sNewFileName);
    $oClasses->$sColumn=$oPluginUpload->getPath();
    continue;
    }else #fin_uploadsave
    variables*/
    eleves/main.php
    <?php
    class module_eleves extends abstract_moduleembedded{

    public static $sModuleName='eleves';
    public static $sRootModule;
    public static $tRootParams;

    public function __construct(){
    self::setRootLink(_root::getParamNav(),null);
    }
    public static function setRootLink($sRootModule,$tRootParams=null){
    self::$sRootModule=$sRootModule;
    self::$tRootParams=$tRootParams;
    }
    public static function getLink($sAction,$tParam=null){
    return parent::_getLink(self::$sRootModule,self::$tRootParams,self::$sModuleName,$sAction,$tParam);
    }
    public static function getParam($sVar,$uDefault=null){
    return parent::_getParam(self::$sModuleName,$sVar,$uDefault);
    }
    public static function redirect($sModuleAction,$tModuleParam=null){
    return parent::_redirect(self::$sRootModule,self::$tRootParams,self::$sModuleName,$sModuleAction,$tModuleParam);
    }


    public function _index(){
    $sAction='_'.self::getParam('Action','list');
    return $this->$sAction();
    }

    public function _list(){

    $tEleves=model_eleves::getInstance()->findAllByClasse(_root::getParam('id'));

    $oView=new _view('eleves::list');
    $oView->tEleves=$tEleves;

    return $oView;
    }


    public function _new(){
    $tMessage=$this->save();

    $oEleves=new row_eleves;

    $oView=new _view('eleves::new');
    $oView->oEleves=$oEleves;

    $oView->tJoinmodel_classes=model_classes::getInstance()->getSelect();

    $oPluginXsrf=new plugin_xsrf();
    $oView->token=$oPluginXsrf->getToken();
    $oView->tMessage=$tMessage;

    return $oView;
    }


    public function _edit(){
    $tMessage=$this->save();

    $oEleves=model_eleves::getInstance()->findById( module_eleves::getParam('id') );

    $oView=new _view('eleves::edit');
    $oView->oEleves=$oEleves;
    $oView->tId=model_eleves::getInstance()->getIdTab();

    $oView->tJoinmodel_classes=model_classes::getInstance()->getSelect();

    $oPluginXsrf=new plugin_xsrf();
    $oView->token=$oPluginXsrf->getToken();
    $oView->tMessage=$tMessage;

    return $oView;
    }

    public function _show(){
    $oEleves=model_eleves::getInstance()->findById( module_eleves::getParam('id') );

    $oView=new _view('eleves::show');
    $oView->oEleves=$oEleves;

    $oView->tJoinmodel_classes=model_classes::getInstance()->getSelect();
    return $oView;
    }

    public function _delete(){
    $tMessage=$this->delete();

    $oEleves=model_eleves::getInstance()->findById( module_eleves::getParam('id') );

    $oView=new _view('eleves::delete');
    $oView->oEleves=$oEleves;

    $oView->tJoinmodel_classes=model_classes::getInstance()->getSelect();

    $oPluginXsrf=new plugin_xsrf();
    $oView->token=$oPluginXsrf->getToken();
    $oView->tMessage=$tMessage;

    return $oView;
    }

    public function save(){


    if(!_root::getRequest()->isPost() or _root::getParam('formmodule')!=self::$sModuleName ){ //si ce n'est pas une requete POST on ne soumet pas
    return null;
    }

    $oPluginXsrf=new plugin_xsrf();
    if(!$oPluginXsrf->checkToken( _root::getParam('token') ) ){ //on verifie que le token est valide
    return array('token'=>$oPluginXsrf->getMessage() );
    }

    $iId=module_eleves::getParam('id',null);
    if($iId==null){
    $oEleves=new row_eleves;
    }else{
    $oEleves=model_eleves::getInstance()->findById( module_eleves::getParam('id',null) );
    }

    $tId=model_eleves::getInstance()->getIdTab();
    $tColumn=model_eleves::getInstance()->getListColumn();
    foreach($tColumn as $sColumn){
    if(isset($_FILES[$sColumn]) and $_FILES[$sColumn]['size'] > 0){
    $sNewFileName='data/upload/'.$sColumn.'_'.date('Ymdhis');

    $oPluginUpload=new plugin_upload($_FILES[$sColumn]);
    $oPluginUpload->saveAs($sNewFileName);
    $oEleves->$sColumn=$oPluginUpload->getPath();
    continue;
    }else if( _root::getParam($sColumn,null) ==null ){
    continue;
    }else if( in_array($sColumn,$tId)){
    continue;
    }

    $oEleves->$sColumn=_root::getParam($sColumn,null) ;
    }

    if($oEleves->isValid()){
    //on force la classe de l'eleve
    $oEleves->classe_id=_root::getParam('id');

    $oEleves->save();
    //une fois enregistre on redirige (vers la page liste)
    $this->redirect('list');
    }else{
    return $oEleves->getListError();
    }

    }

    public function delete(){
    if(!_root::getRequest()->isPost() or _root::getParam('formmodule')!=self::$sModuleName){ //si ce n'est pas une requete POST on ne soumet pas
    return null;
    }

    $oPluginXsrf=new plugin_xsrf();
    if(!$oPluginXsrf->checkToken( _root::getParam('token') ) ){ //on verifie que le token est valide
    return array('token'=>$oPluginXsrf->getMessage() );
    }

    $oEleves=model_eleves::getInstance()->findById( module_eleves::getParam('id',null) );

    $oEleves->delete();
    //une fois enregistre on redirige (vers la page liste)
    $this->redirect('list');

    }




    }

    /*variables
    #select $oView->tJoineleves=eleves::getInstance()->getSelect();#fin_select
    #uploadsave if(isset($_FILES[$sColumn]) and $_FILES[$sColumn]['size'] > 0){
    $sNewFileName='data/upload/'.$sColumn.'_'.date('Ymdhis');

    $oPluginUpload=new plugin_upload($_FILES[$sColumn]);
    $oPluginUpload->saveAs($sNewFileName);
    $oEleves->$sColumn=$oPluginUpload->getPath();
    continue;
    }else #fin_uploadsave
    variables*/
    model/eleves.php
    <?php
    class model_eleves extends abstract_model{

    protected $sClassRow='row_eleves';

    protected $sTable='eleves';
    protected $sConfig='mysq';

    protected $tId=array('id');

    public static function getInstance(){
    return self::_getInstance(__CLASS__);
    }

    public function findById($uId){
    return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE id=?',$uId );
    }
    public function findAll(){
    return $this->findMany('SELECT * FROM '.$this->sTable);
    }
    public function findAllByClasse($classe_id){
    return $this->findMany('SELECT * FROM eleves WHERE classe_id=?',(int)$classe_id);
    }


    public function getSelect(){
    $tab=$this->findAll();
    $tSelect=array();
    if($tab){
    foreach($tab as $oRow){
    $tSelect[ $oRow->id ]=$oRow->nom;
    }
    }
    return $tSelect;
    }


    }

    class row_eleves extends abstract_row{

    protected $sClassModel='model_eleves';

    /*exemple jointure
    public function findAuteur(){
    return model_auteur::getInstance()->findById($this->auteur_id);
    }
    */
    /*exemple test validation*/
    private function getCheck(){
    $oPluginValid=new plugin_valid($this->getTab());
    /* renseigner vos check ici
    $oPluginValid->isEqual('champ','valeurB');
    $oPluginValid->isNotEqual('champ','valeurB');
    $oPluginValid->isUpperThan('champ','valeurB');
    $oPluginValid->isUpperOrEqualThan('champ','valeurB');
    $oPluginValid->isLowerThan('champ','valeurB');
    $oPluginValid->isLowerOrEqualThan('champ','valeurB');
    $oPluginValid->isEmpty('champ');
    $oPluginValid->isNotEmpty('champ');
    $oPluginValid->isEmailValid('champ');
    $oPluginValid->matchExpression('champ','/[0-9]/');
    $oPluginValid->notMatchExpression('champ','/[a-zA-Z]/');
    */

    return $oPluginValid;
    }

    public function isValid(){
    return $this->getCheck()->isValid();
    }
    public function getListError(){
    return $this->getCheck()->getListError();
    }

    }

  4. #4
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Votre classe model eleves doit etre dans un fichier nommé model/model_eleves.php et non model/eleves.php
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  5. #5
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    En regardant un peu mieux, il faut modifier la methode _show du fichier module/classe/main.php

    ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    	public function _show(){
    		$oClasse=model_classe::getInstance()->findById( _root::getParam('id') );
     
    		$oView=new _view('classe::show');
    		$oView->oClasse=$oClasse;
     
     
    		$this->oLayout->add('main',$oView);
     
    		//ajout du module integrable:
     
    		//on instancie le module integrable
    		$oModuleEleves=new module_eleves;
    		//on indique au module integrable les parametres a prendre en compte pour ses liens
    		$oModuleEleves->setRootLink(_root::getParamNav(),array('id'=>_root::getParam('id')));
    		//on recuere la vue de ce module
    		$oViewEleves=$oModuleEleves->_index();
     
    		$this->oLayout->add('main',$oViewEleves);
     
    	}
    Explication: la vue retournée par le module intégrable doit etre ajouté au layout
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  6. #6
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Ma classe model eleves s'appelle bien model/model_eleves.php et non model/eleves.php (erreur d'ecriture)

    Mais ça marche pas
    J'ai en retour un tableau vide

    Le tableau de mes classes


    Voila quand je clique sur show



    Dans l'exemple généré par Mkframework je pense que ce serait une bonne idée de mettre en exemple une view liste des auteurs et quand on clique sur show cela afficherait un tableau avec tous les livre enregistré sur son nom.
    Il y aurait un exemple de CRUD intégrable.
    En tout cas moi ça m'aiderai peut-être à mieux comprendre.

    Désolé si je solocite autant

  7. #7
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Pour les eleves, il suffit a priori d'utiliser le lien nouveau pour ajouter des eleves a la classe affichee.
    Au fur et a mesur, le tableau d'eleves devrait se remplir

    Je note que ce seait une bonne idee d'ajouter un exemple de crud integrable lors de la generation d'un projet avec exemples
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  8. #8
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Ma table eleves est bien remplis. Et il y a bien jonction avec les classes.

    Si je liste mes eleves je l'ai ai tous, mais par le lien show de la table classe -> rien.

  9. #9
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Il y a bien des enregistrement dans la table eleve avec classe_id de rempli ?

    Si vous executez la requete "select * from eleves where classe_id=N", cela vous retourne des enregistrements ?
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  10. #10
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    oups! La table était vide. Je l'ai donc remplis. Marche pas non plus! J'ai ça

    Ma requête donne:


    si je met "index.php?:nav=classes::show&id=3" j'ai un tableau vide sans erreurs . Normal je n'ai pas d'élèves enregistrés dans la classe id=3

    Une idée?

  11. #11
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    La vue cherche a afficher une variable tJoinModel_classes qui n'est pas initialisees dans le fichier module/eleves/main.php (methode _list())

    Vous devriez supprimer cet appel dans le fichier de vue module/eleves/view/list.php, vous n'avez pas besoin d'afficher le nom de la classe dans le tableau listant les eleves
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  12. #12
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    C'était donc ça?

    Un problème réglé en appelle un autre explication:

    Quand je voit ma liste de classe, j'ai maintenant le tableau des élèves que je peux voir ou supprimer tout en restant dans la page de la classe choisie.
    Mais quand je veux éditer je ne peux modifier que le texte dans la zone texte. Si je choisi dans le select une autre classe, celle ci ne sera pas affectée. Il reste dans la même classe. Impossible de le changer de classe.

  13. #13
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Mon objectif final est de réaliser une application web pour valider les évaluations des élevés sur des machines à l'atelier.

    J'ai fait donc le même travail entre les machines et ateliers: j'affiche la liste des ateliers et je clique sur "voir les machines" et j'ai la liste des machines. Mais si je veux faire quoi que soit sur une des machine ('voir' par exemple) j'ai cette erreur.
    Erreur

    Trying to get property of non-object
    #0 /opt/lampp/htdocs/tests/mkframework/data/genere/secu02/module/ateliers/view/show.php(5): exception_error_handler(8, 'Trying to get p...', '/opt/lampp/htdo...', 5, Array)
    #1 /opt/lampp/htdocs/tests/mkframework/lib/framework/class_view.php(83): include('/opt/lampp/htdo...')
    #2 /opt/lampp/htdocs/tests/mkframework/lib/framework/class_layout.php(121): _view->show()
    #3 /opt/lampp/htdocs/tests/mkframework/data/genere/secu02/layout/template1.php(14): _layout->load('main')
    #4 /opt/lampp/htdocs/tests/mkframework/lib/framework/class_layout.php(108): include('/opt/lampp/htdo...')
    #5 /opt/lampp/htdocs/tests/mkframework/data/genere/secu02/module/ateliers/main.php(164): _layout->show()
    #6 /opt/lampp/htdocs/tests/mkframework/lib/framework/class_root.php(237): module_ateliers->after()
    #7 /opt/lampp/htdocs/tests/mkframework/data/genere/secu02/public/index.php(54): _root->run()
    #8 {main}

    Detail:
    #0 /opt/lampp/htdocs/tests/mkframework/data/genere/secu02/module/ateliers/view/show.php (5)
    exception_error_handler( , 'Trying to get property of non-object' , '/opt/lampp/htdocs/tests/mkframework/data/genere/secu02/module/ateliers/view/show.php' , , Array ( [sClass] => plugin_tpl ) )
    #1 /opt/lampp/htdocs/tests/mkframework/lib/framework/class_view.php (83)
    include( '/opt/lampp/htdocs/tests/mkframework/data/genere/secu02/module/ateliers/view/show.php' )
    #2 /opt/lampp/htdocs/tests/mkframework/lib/framework/class_layout.php (121)
    _view -> show( )
    #3 /opt/lampp/htdocs/tests/mkframework/data/genere/secu02/layout/template1.php (14)
    _layout -> load( 'main' )
    #4 /opt/lampp/htdocs/tests/mkframework/lib/framework/class_layout.php (108)
    include( '/opt/lampp/htdocs/tests/mkframework/data/genere/secu02/layout/template1.php' )
    #5 /opt/lampp/htdocs/tests/mkframework/data/genere/secu02/module/ateliers/main.php (164)
    _layout -> show( )
    #6 /opt/lampp/htdocs/tests/mkframework/lib/framework/class_root.php (237)
    module_ateliers -> after( )
    #7 /opt/lampp/htdocs/tests/mkframework/data/genere/secu02/public/index.php (54)
    _root -> run( )
    #8 {main}

  14. #14
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par pitu69 Voir le message
    C'était donc ça?

    Un problème réglé en appelle un autre explication:

    Quand je voit ma liste de classe, j'ai maintenant le tableau des élèves que je peux voir ou supprimer tout en restant dans la page de la classe choisie.
    Mais quand je veux éditer je ne peux modifier que le texte dans la zone texte. Si je choisi dans le select une autre classe, celle ci ne sera pas affectée. Il reste dans la même classe. Impossible de le changer de classe.
    C'est normal, dans ma premiere reponse j'indiquai d'ajouter une ligne dans module/eleves/main.php pour forcer la classe
    Il faut l'enlever dans ce cas la dans la methode save():
    $oEleves->classe_id=_root::getParam('id');
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  15. #15
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Pour lr problème sur atelier, la vue essaie d'afficher une propriete d'un objet on initialise
    Qu'y a t il ligne 5 dans le fichier module/atelier/view/4how.php ?
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  16. #16
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Je n'ai que ces lignes là dans /module/ateliers/view/show.php
    <table class="tb_show">

    <tr>
    <th>nom</th>
    <td><?php echo $this->oAteliers->nom ?></td>
    </tr>

    </table>
    <p> <a href="<?php echo $this->getLink('ateliers::list')?>">Retour</a></p>
    Mais le problème ne vient-il pas du module machines?

  17. #17
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Il essaie d'afficher le nom de l'atelier (variable oAteliers)
    Dans le fichier module/ateliers/main.php qu'y a til dans la methode _show() ?

    Le module ateliers a ete genere via le builder ? Comme un CRUD normal ?
    C'est bien le module machine qui doit etre genere comme un crud integrable
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  18. #18
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Le module machines à été généré par builder CRUD integrable.

    Voici l'action show de ateliers/main.php
    public function _show(){
    $oAteliers=model_ateliers::getInstance()->findById( _root::getParam('id') );
    $oView=new _view('ateliers::show');
    $oView->oAteliers=$oAteliers;
    $this->oLayout->add('main',$oView);
    //instancier le module MAchines
    $oModuleMachines=new module_machines;
    //recupere la vue du module
    $oView=$oModuleMachines->_index();
    //assigner la vue retournee a votre layout
    $this->oLayout->add('main',$oView);
    }
    J'arrive à comprendre certaines lignes mais pas toutes. Serai-t-il possible de m'en expliquer chacune?

  19. #19
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public function _show(){
    $oAteliers=model_ateliers::getInstance()->findById( _root::getParam('id') );
    Ici on recupere l'enregistrement atelier dont l'id et passé dans l'URL sous le nom "id"
    note: on recupere un objet de type row_ateliers qui est rempli avec les informations de la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $oView=new _view('ateliers::show');
    La on instancie la vue module/ateliers/view/show.php dans l'objet oView

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $oView->oAteliers=$oAteliers;
    On assigne la varible $oAteliers (contenant la ligne en base) à la vue


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->oLayout->add('main',$oView);
    On ajoute cette vue enrichi au layout (template du site) principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //instancier le module MAchines
    $oModuleMachines=new module_machines;
    On instancie le module integrable module_machines

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //recupere la vue du module
    $oView=$oModuleMachines->_index();
    on recupere la vue retournée par le module integrable machine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //assigner la vue retournee a votre layout
    $this->oLayout->add('main',$oView);
    }
    On ajoute la vue retournée par le module intégrable au layout principal (comme vu deux lignes plus haut)


    L'erreur indiquée predement semble indiquer qu'il n'a pas trouvé l'enregistrement en base pour l'atelier
    A quoi ressemble la classe modele atelier ? il y a bien une clé primaire, indiquée dans celle-ci ?
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  20. #20
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Merci pour ces explications, j'y vois un peu plus clair.

    Voici le code du model_ateliers
    <?php
    class model_ateliers extends abstract_model{

    protected $sClassRow='row_ateliers';

    protected $sTable='ateliers';
    protected $sConfig='mysq';

    protected $tId=array('id');

    public static function getInstance(){
    return self::_getInstance(__CLASS__);
    }

    public function findById($uId){
    return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE id=?',$uId );
    }
    public function findAll(){
    return $this->findMany('SELECT * FROM '.$this->sTable);
    }


    public function getSelect(){
    $tab=$this->findAll();
    $tSelect=array();
    if($tab){
    foreach($tab as $oRow){
    $tSelect[ $oRow->id ]=$oRow->nom;
    }
    }
    return $tSelect;
    }


    }

    class row_ateliers extends abstract_row{

    protected $sClassModel='model_ateliers';

    /*exemple jointure
    public function findAuteur(){
    return model_auteur::getInstance()->findById($this->auteur_id);
    }
    */
    /*exemple test validation*/
    private function getCheck(){
    $oPluginValid=new plugin_valid($this->getTab());

    return $oPluginValid;
    }

    public function isValid(){
    return $this->getCheck()->isValid();
    }
    public function getListError(){
    return $this->getCheck()->getListError();
    }

    }
    Il y a bien une clé primaire dans la table ateliers sur id.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [AC-2003] Lier les tables d'une Base1 dans une Base3 via une Base2
    Par ted the Ors dans le forum VBA Access
    Réponses: 0
    Dernier message: 30/12/2009, 11h58
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo