Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-10-2009 15:18:02

ubald
Membre
Date d'inscription: 20-09-2009
Messages: 15

affichage des données

Bonjour a tous,
j'ai un petit soucis sur ma base de données . je n'arrive pas à recupere les données qui se trouve dans la base afin de l'affiche .
voici l'erreur qu'il m'affiche

Warning: Invalid argument supplied for foreach() in /home/ephrem/public_html/application/views/scripts/work/home.phtml on line 11

ma page des views/scrips/work/home.phtml
<?php $this->headScript()->appendFile($this->makeUrl('/js/close-ul.js')); ?>
<table class="home">
<tr><td>
<div class="logo"><img src="<?php echo $this->makeUrl('/images/traduxio_home_logo.jpg'); ?>">
<div class="citation">Du point de vue de la communaut&eacute;, le langage n'est pas seulement un fait social , [...] il est par l'alt&eacute;rit&eacute; [...] le fondement de toute association humaine.<span class="work">Eugenio Coseriu</span></div>
<div class="site-title"><?php echo _('Translating cultural texts') ?></div>
</div>
                       </td><td class="tdxio">
<ol>
<?php
   foreach ($this->work as $work) { ?>
          <li class='work'><?php echo $this->escape($work['author']);?>
          <ul class='work'>
<?php     foreach ($this->author as $work) { ?>
              <li class='work closed'><?php echo $this->escape($work['author']);?>
              <ul class='work'>
<?php       foreach ($work as $work) { ?>
                 <li class='work'><a href="<?php echo $this->url(
            array('controller'=>'work','action'=>'read','id'=>$work['id'])) ?>">
                         <?php echo $work['title']; ?></a> (<?php echo strlen($work['Translations']) ?> translations)</li>
<?php        } ?>
                </ul></li>
<?php    } ?>
          </ul></li>
<?php   } ?>
                  </ol>
</td></tr></table>

vraiment aide moi je ne sais plus quoi faire.

ma page de controller est:

require_once "TdxioController.php";

class WorkController extends TdxioController {
    protected $_modelname;

    public function indexAction() {
    return $this->_helper->redirector->gotoSimple('home','work');
        $model=$this->_getModel();
        $entries=$model->fetchEntries('id is NULL',1);
        $this->view->entries=$entries;
    }

    public function homeAction() {
        $model=$this->_getModel();
      $entries=$model->fetchEntries('id is NULL',1);
        $sort=array();
        $langs=array();
        $work=array(-1=>array('title'=>'No Author'));
        foreach ($entries as $entry) {
            if (isset($entry['id'])) {
                $lang=$entry['id'];
                if (!isset($sort[$lang])) {
                    $sort[$lang]=array();
                }
                if (!isset($langs[$lang])) {
                    $langs[$lang]=$entry['Language'];
                }
                if (!isset($entry['author']) || $entry['author']==='' || $entry['Author']['name']==='') {
                    $entry['author']=-1;
                }
                    $author=$entry['author'];
                    if (!isset($sort[$lang][$author])) {
                        $sort[$lang][$author]=array();
                    }
                    if (!isset($authors[$author])) {
                        $authors[$author]=$entry['Author'];
                    }
                    $sort[$lang][$author][]=$entry;
            }
        }
        $this->view->entries=$sort;
        $this->view->langs=$langs;
        $this->view->authors=$authors;*/
    $this->view->home=true;
    }

    public function readAction() {
        $request = $this->getRequest();
        $id = $request->getParam('id');
        $model=$this->_getModel();
        if (!$id || !($work=$model->fetchEntry($id))) {
        throw new Zend_Controller_Action_Exception(sprintf('work ub Id "%d" does not exist.', $id), 404);
        }
        $this->view->work=$this->_work->find($id)->current();
    }

    public function depositAction() {
        $auth=Zend_Auth::getInstance();
        $this->view->needAuth=true;
        $request = $this->getRequest();
        $form = $this->_getWorkDepositForm();
        if ($this->getRequest()->isPost()) {
            if (!$auth->hasIdentity()) {
                $this->_helper->redirector('index','login');
            }

            if ($form->isValid($request->getPost())) {

                $model = $this->_getModel();
                $data=$form->getValues();
                $this->log($data);
                unset($data['id']);
                unset($data['id']);
                $newId=$model->save($data);

                return $this->_helper->redirector->gotoSimple('read',null,null, array('id'=>$newId));
            }
        }

        $this->view->form=$form;

    }

    public function editAction() {
        $request = $this->getRequest();
        $this->view->needAuth=true;
        $id=$request->getParam('id');
        $model=$this->_getModel();
        if ($id && ($work=$model->fetchEntry($id))) {
            if ($work['id']) {
                $this->log('init form translation');
                $form = $this->_getWorkEditForm('translation');
            } else {
                $form = $this->_getWorkEditForm();
            }
            if ($this->getRequest()->isPost()) {

                if (!$auth->hasIdentity()) {
                    $this->_helper->redirector('index','login');
                }
                if ($form->isValid($request->getPost())) {

                    $model = $this->_getModel();
                    $data=$form->getValues();
                    $this->log($data);
                    $newId=$model->update($data,$id);

                    return $this->_helper->redirector->gotoSimple('read',null,null, array('id'=>$id));
                }
            }
            $form->setDefaults($work);
            $this->view->form=$form;
            $this->view->work=$work;
        } else {
            throw new Zend_Exception("Couldn't find text $id");
        }

    }

    /**
     * This method is essentially doing the same thing for the Form that we did
     * above in the protected model accessor.  Same logic applies here.
     *
     * @return Form_workDeposit
     */
    protected function _getWorkDepositForm()
    {
        require_once APPLICATION_PATH . '/forms/WorkDepositForm.php';
        $form = new WorkDepositForm();
        return $form;
    }

    /**
     * This method is essentially doing the same thing for the Form that we did
     * above in the protected model accessor.  Same logic applies here.
     *
     * @return Form_workEdit
     */
    protected function _getWorkEditForm($type=null)
    {
        require_once APPLICATION_PATH . '/forms/WorkEditForm.php';
        $form = new WorkEditForm($type);
        return $form;
    }

}

?>

Hors ligne

 

#2 13-10-2009 15:28:07

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: affichage des données

s'il te plais utilise le bbtag [ code][/ code]pour afficher ton code ça sera plus lisible
si j'ai bien lu tu fait un foreach sur $this->work dans home.phtml

or je n'a pas vus d'affectation de valeur à $this->view->work dans homeAction

$this->work est donc null dans ta vue et on ne peut pas faire de foreach sur un null

de façon générale il convient de toujours tester les tableau avant usage (à moins d'être sur et certain que ce sont des tableaux)

Code:

if (is_array($this->work) foreach (....

A+JYT

Hors ligne

 

#3 13-10-2009 19:43:41

ubald
Membre
Date d'inscription: 20-09-2009
Messages: 15

Re: affichage des données

merci beaucoup pour le conseil   il n'affiche plus l'erreur mais il na rien affiche comme données.

Dernière modification par ubald (13-10-2009 19:44:53)

Hors ligne

 

#4 13-10-2009 20:14:27

ubald
Membre
Date d'inscription: 20-09-2009
Messages: 15

Re: affichage des données

Aidez moi j'ai d'une classe interface que j'appele tdxio , la tag est une table d'association qui recoit id de la classe txdio , work et originalsentence herité id de la classe tdxio qui est abstract.
mais la classe originalsentence et interpretation  recoivent ausi id de la classe work que j'appel work_id.
la classe interpretation va traduire le contenu de la classe originalsentence (number,content)et de work(title,author,etc...)
en effet mon souci quand j'enregistre les données il n'arrive pas à inserer les données dans la base de donnée.
voici mon model
model/DbTable

require_once "TdxioDbTable.php";

class Interpretation extends TdxioDbTable {

    protected $_name = 'Interpretation';
    protected $_primary='interpretation_id';

    protected $_referenceMap = array (
        'Interpretation' => array (
            'refColumns'=> array('id')
            'refTableClass'=>'work',
            'columns'=>array('work_id'),
        )
    );
}

?>
<?php
// application/models/DbTable/OriginalSentence.php

require_once "TdxioDbTable.php";
class OriginalSentence extends TdxioDbTable
{
    protected $_name    = 'OriginalSentence';
    public $idcol       = array(work_id,number);

    protected $_referenceMap = array (
        'OriginalSentence' => array (
           
            'refColumns'=> array('id')
            'refTableClass' =>'Work',
            'columns'=> array('work_id'),
        )
    );
}

<?php
class Tdxio extends Zend_Db_Table_Abstract {

    public $idcol='id';
    public $contentcol='name';

    function getName() {return $this->_name;}

    function __construct($table_name=null,$idField=null,$contentField=null) {
        parent::__construct();
        if (!is_null($table_name)) {
            $this->_name=$table_name;
        }
        if (!is_null($idField)) {
            $this->idcol=$idField;
        }
        if (!is_null($contentField)) {
            $this->contentcol=$contentField;
        }
    }
       // verification de la table s'il existe dans la base de données
      
       public function insertion($contentcol)
       {
         if(!empty($contentcol))
         {
          $table=array($contencol);
          $database->insert($table);
          return parent::$database; }
          if(!$table) throw new Exception("erreur d'enregistrement de la table".$contentcol);
          
        }
    /**
     * Clean insert/update data
     *
     * Ensure only field from the table is included in the data array.
     *
     * @param  array $data
     * @return array
     * @throws Exception
     */
    protected function cleanData($data,$includeKeys=false) {
        $fields = $this->info(Zend_Db_Table_Abstract::METADATA);
        $this->log($this->info(),"fields");
        if (!is_array($this->idcol))
            $keys=array($this->idcol);
        else $keys=$this->idcol;
        foreach ($data as $field => $value) {
            if (!array_key_exists($field, $fields)
            || ($includeKeys && in_array($field,$keys))) {
                $this->log($data[$field],"column $field was found in data, but isn't part of $this->name table");
                unset($data[$field]);
            } else {
                $this->log($fields[$field]['NULLABLE'],"$field nullable");
                $this->log(in_array($fields[$field]['DATA_TYPE'],array('work','varchar')),"$field is text");
                if ($value==='') {
                    if ($fields[$field]['NULLABLE']) {
                        $data[$field]=null;
                        $this->log("null empty value");
                    } else if (!in_array($fields[$field]['DATA_TYPE'],array('work','varchar'))) {
                        $this->log("unset empty value");
                        unset($data[$field]);
                    }
                }
            }
        }
        $this->log($data,"cleaned data");
        return $data;
    }

    protected $_logger=null;
    protected function log($message='',$title=null,$priority=1) {
        if (!$this->_logger) {
            global $logger;
            $this->_logger=$logger;
        }
        if (is_null($message)) {
            $message="{NULL}";
        } elseif (is_bool($message)) {
            $message="{".($message ? 'TRUE':'FALSE')."}";
        } elseif (is_array($message) || is_object($message)) {
            $message=print_r($message,true);
        }
        if (null !== $title) $message="[$title] : ".$message;
        $message=
        $this->_logger->log($message,$priority);
    }


}

?>

<?php
// application/models/DbTable/Tag.php

class Tag extends Zend_Db_Table_Abstract
{
    public $idcol=array('genre_id','user_id');

    /** Table name */
    protected $_name    = 'tag';

    protected $_referenceMap = array (
        'Tdxio' => array (
            'refColumns'=> array('id')
            'refTableClass'=>'Tdxio'
            'columns'=>array('taggable_id'),
           
        )
    );
}

<?php
// application/models/DbTable/Work.php

require_once "TdxioDbTable.php";

class Work extends TdxioDbTable {

    protected $_name = 'Work';
   
}

?>

voici pour le controller:

class TdxioController extends Zend_Controller_Action {
    protected $_model=null;
    protected $_modelname=null;

    protected $_logger=null;
    protected function log($message='',$title=null,$priority=1) {
        if (!$this->_logger) {
            global $logger;
            $this->_logger=$logger;
        }
        if (is_null($message)) {
            $message="{NULL}";
        } elseif (is_bool($message)) {
            $message="{".($message ? 'TRUE':'FALSE')."}";
        } elseif (is_array($message) || is_object($message)) {
            $message=print_r($message,true);
        }
        if (null !== $title) $message="[$title] : ".$message;
        $this->_logger->log($message,$priority);
    }

 
    protected function _getModel($classname=null)
    {
        if (null!=$classname) {
            $classname=$classname.'Model';
            require_once APPLICATION_PATH . '/models/'.$classname.'.php';
            return new $classname();
        } else {
            $classname=$this->_modelname.'Model';
            if (null === $this->_model) {
              //require_once APPLICATION_PATH . '/models/'.$classname.'.php';
               //$this->_model = new class_name();
            }
            return $this->_model;
        }
    }

}

?>

pour workController:

<?php
// application/controllers/workController.php

require_once "TdxioController.php";

class WorkController extends TdxioController {
    protected $_modelname;

    public function indexAction() {
    return $this->_helper->redirector->gotoSimple('home','work');
        $model=$this->_getModel();
        $entries=$model->fetchEntries('id is NULL',1);
        $this->view->entries=$entries;
    }

    public function homeAction() {
        $model=$this->_getModel();
       $entries=$model->fetchEntries('id is NULL',1);
        $originalsentence=array();
        $interpretation=array();
        $work=array(-1=>array('title'=>'No Author'));
        foreach ($entries as $entry) {
            if (isset($entry['id'])) {
                $work=$entry['id'];
                if (!isset($originalsentence[$interpretation])) {
                    $originalsentence[$interpretation]=array();
                }
                if (!isset($work[$work])) {
                    $work[$work]=$entry['id'];
                }
                  i
        }
        $this->view->work=$work;
        $this->view->originalsentence=$originalsentence;
    $this->view->home=true;
    }

    public function readAction() {
        $request = $this->getRequest();
        $id = $request->getParam('id');
        $model=$this->_getModel();
      //  if (!$id || !($work=$model->fetchEntry($id))) {
           // throw new Zend_Controller_Action_Exception(sprintf('work ub Id "%d" does not exist.', $id), 404);
       // }
       // $this->view->work=$this->_work->find($id)->current();
    }

    public function depositAction() {
        $auth=Zend_Auth::getInstance();
        $this->view->needAuth=true;
        $request = $this->getRequest();
        $form = $this->_getWorkDepositForm();
        if ($this->getRequest()->isPost()) {
            if (!$auth->hasIdentity()) {
                $this->_helper->redirector('index','login');
            }

            if ($form->isValid($request->getPost())) {

                $model = $this->_getModel();
                $data=$form->getValues();
                $this->log($data);
                unset($data['id']);
               // unset($data['id']);
                //$newId=$model->save($data);

                return $this->_helper->redirector->gotoSimple('read',null,null, array('id'=>$newId));
            }
        }

        $this->view->form=$form;

    }

    public function editAction() {
        $request = $this->getRequest();
        $this->view->needAuth=true;
        $id=$request->getParam('id');
        $model=$this->_getModel();
        if ($id && ($work=$model->fetchEntry($id))) {
            if ($work['id']) {
                $this->log('init form translation');
                $form = $this->_getWorkEditForm('translation');
            } else {
                $form = $this->_getWorkEditForm();
            }
            if ($this->getRequest()->isPost()) {

                if (!$auth->hasIdentity()) {
                    $this->_helper->redirector('index','login');
                }
                if ($form->isValid($request->getPost())) {

                    $model = $this->_getModel();
                    $data=$form->getValues();
                    $this->log($data);
                    $newId=$model->update($data,$id);

                    return $this->_helper->redirector->gotoSimple('read',null,null, array('id'=>$id));
                }
            }
            $form->setDefaults($work);
            $this->view->form=$form;
            $this->view->work=$work;
        } else {
            throw new Zend_Exception("Couldn't find text $id");
        }

    }

    /**
     * This method is essentially doing the same thing for the Form that we did
     * above in the protected model accessor.  Same logic applies here.
     *
     * @return Form_workDeposit
     */
    protected function _getWorkDepositForm()
    {
        require_once APPLICATION_PATH . '/forms/WorkDepositForm.php';
        $form = new WorkDepositForm();
        return $form;
    }

    /**
     * This method is essentially doing the same thing for the Form that we did
     * above in the protected model accessor.  Same logic applies here.
     *
     * @return Form_workEdit
     */
    protected function _getWorkEditForm($type=null)
    {
        require_once APPLICATION_PATH . '/forms/WorkEditForm.php';
        $form = new WorkEditForm($type);
        return $form;
    }

}

?>

vraiment aider parceque mon problème se base sur le controller work. sur la function HomeAction.
je suis apprenti sur zend pour l'insertion aide moi s'il vous palit

Hors ligne

 

#5 14-10-2009 09:03:49

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: affichage des données

Tu veux pas lire les réponses complètement ?

s'il te plais utilise le bbtag [ code][ /code] pour afficher ton code ça sera plus lisible

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#6 14-10-2009 13:29:45

ubald
Membre
Date d'inscription: 20-09-2009
Messages: 15

Re: affichage des données

c'est à dire oui je voix ce que vous dites mais bbtag je ne connais pas comment sa fonctionne.
s'il vous plait si vous pourriez me donne un exemple de ce script.
je suis un amateur sur zend.
Merci pour la bonne compréhension.
Cordialement

Hors ligne

 

#7 14-10-2009 13:34:37

aelyta1
Membre
Lieu: Rouen
Date d'inscription: 29-06-2009
Messages: 98

Re: affichage des données

Eh bien avant de commencer à écrire du code tu écris la première balise et quand tu as fini tu écris la seconde pour fermer !


veni, vidi, riendi
Vive les lapins-antilopes !

Hors ligne

 

#8 14-10-2009 13:50:08

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: affichage des données

le bbcode c'est un peu comme de l'html avec des crochets [ ou ] à la place des < et >.

il faut mettre la balise [ code] et [ /code] autour de ton code, sans les espaces après les crochets.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#9 14-10-2009 16:35:15

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: affichage des données

pour ce qui est de bbtag tu met [ code ] sans espace avant ton code et [/ code ] à la fin dans tes post sur le forum

pour le font de ta question je t'ai répondu

tu fait un foreach sur $this->work
alors que dans ton controlleur tu n'affecte pas de valeur à
$this->view->work

$this->work dans ta vue est donc vide

c'est pourtant clair non ?
A+JYT

Hors ligne

 

#10 17-10-2009 20:59:10

ubald
Membre
Date d'inscription: 20-09-2009
Messages: 15

Re: affichage des données

Slt a tous,
j'ai bien ce que vous m'aviez dit à faire mais il m'affiche des erreurs voici quels erreurs :

Warning: Invalid argument supplied for foreach() in /home/ephrem/public_html/application/views/scripts/work/home.phtml on line 11

Warning: Invalid argument supplied for foreach() in /home/ephrem/public_html/application/controllers/WorkController.php on line 32

page de controllers:
<?php
// application/controllers/WorkController.php

require_once "TdxioController.php";

class WorkController extends TdxioController {
    protected $_modelname='Work';

    public function indexAction() {
    return $this->_helper->redirector->gotoSimple('home','Work');
        $model=$this->_getModel();
        $entries=$model->fetchEntries('id is NULL',1);
        $this->view->entries=$entries;
        }

    public function homeAction() {
        $model=$this->_getModel();
     $entries=$model->fetchEntries('author',1);
       $sort=array();
       $langs=array();
        $work=array(-1=>array('work'=>'No work'));
       foreach ($entries as $entries) {
            if (isset($entry['work'])) {
                $lang=$entry['work'];                 
                 if (!isset($sort[$lang])) {
                    $sort[$lang]=array();
                }
                if (!isset($langs[$lang])) {
                    $langs[$lang]=$entry['Language'];
                }
                if (!isset($entry['work']) || $entry['work']==='' || $entry['work']['name']==='') {
                    $entry['work']=-1;
                }
                    $work=$entry['work'];
                    if (!isset($sort[$lang][$work])) {
                        $sort[$lang][$work]=array();
                    }
                    if (!isset($work[$work])) {
                        $works[$work]=$entry['work'];
                    }
                    $sort[$lang][$work][]=$entry;
            }
        }
        $this->view->entries=$sort;
        $this->view->langs=$langs;
        $this->view->work=$work;
    $this->view->home=true;
    }

    public function readAction() {
        $request = $this->getRequest();
        $id = $request->getParam('id');
        $model=$this->_getModel();
        if (!$id || !($work=$model->fetchEntry($id))) {
            throw new Zend_Controller_Action_Exception(sprintf('Text Id "%d" does not exist.', $id), 404);
        }
        $this->view->work=$work;
    }

    public function depositAction() {
        $auth=Zend_Auth::getInstance();
        $this->view->needAuth=true;
        $request = $this->getRequest();
        //$form = $this->_getWorkDepositForm();
        if ($this->getRequest()->isPost()) {
            if (!$auth->hasIdentity()) {
                $this->_helper->redirector('index','login');
            }

            if ($form->isValid($request->getPost())) {

                $model = $this->_getModel();
                $data=$form->getValues();
                $this->log($data);
                unset($data['wor_id']);
                unset($data['id']);
                $newId=$model->save($data);

                return $this->_helper->redirector->gotoSimple('read',null,null, array('id'=>$newId));
            }
        }

        $this->view->form=$form;

    }

    public function editAction() {
        $request = $this->getRequest();
        $this->view->needAuth=true;
        $id=$request->getParam('id');
        $model=$this->_getModel();
        if ($id && ($work=$model->fetchEntry($id))) {
            if ($work['id']) {
                $this->log('init form translation');
                $form = $this->_getWorkEditForm('translation');
            } else {
                $form = $this->_getWorkEditForm();
            }
            if ($this->getRequest()->isPost()) {

                if (!$auth->hasIdentity()) {
                    $this->_helper->redirector('index','login');
                }
                if ($form->isValid($request->getPost())) {

                    $model = $this->_getModel();
                    $data=$form->getValues();
                    $this->log($data);
                    $newId=$model->update($data,$id);

                    return $this->_helper->redirector->gotoSimple('read',null,null, array('id'=>$id));
                }
            }
            $form->setDefaults($work);
            $this->view->form=$form;
            $this->view->work=$work;
        } else {
            throw new Zend_Exception("Couldn't find text $id");
        }

    }

   
    protected function _getWoirkDepositForm()
    {
        require_once APPLICATION_PATH . '/forms/WorkDepositForm.php';
        $form = new WorkDepositForm();
        return $form;
    }

    protected function _getWorkEditForm($type=null)
    {
        require_once APPLICATION_PATH . '/forms/WorkEditForm.php';
        $form = new WorkEditForm($type);
        return $form;
    }

}

?>

pour le models

<?php
// application/models/WorktModel.php


require_once "TdxioModel.php";

class WorkModel extends TdxioModel {
    protected $_tableClass='Work';

    protected $_metadata_category = array(
            'Author'=>array('table'=>'authors','field'=>'author','content_field'=>'name'),
            'Book'=>array('table'=>'books','field'=>'book','content_field'=>'title'),
            'Genre'=>array('table'=>'genres','field'=>'genre','content_field'=>'name'),
            'Period'=>array('table'=>'periods','field'=>'period','content_field'=>'name'),
            'Language'=>array('table'=>'languages','field'=>'language','content_field'=>'ref_name','noedit'=>true,'addfields'=>array('rtl'))
        );
    protected $_metadata_work = array('Release Date'=>'release');

    protected $_translation_metadata = array('Language','Author','Release Date');

       public function save(array $data)
    {
        $table  = $this->_getTable();
        foreach ($this->_metadata_category as $metadata=>$details) {
            $contentField=$details['content_field'];
            $metafield=$details['field']."_content";
            if (isset($data[$metafield])) {
                $metamodel=$this->_getModel($metadata,null,$contentField);
                if ($row=$metamodel->fetchByContent($data[$metafield])) {
                    $metaid=$row['id'];
                } else {
                    $metaid=$metamodel->save(array('#content'=>$data[$metafield]));
                }
                $data[$details['field']]=$metaid;
                unset($data[$metafield]);
            }
        }
        $id=$table->insert($data);
        if (!isset($data['id'])) {
            $this->update(array('id'=>$id),$id);
        }
        $contents=$this->_getCutter()->getOriginalSentence($data['copyrightnotice']);
        $contentModel=$this->_getcontentModel();
        $contentModel->bulkSave($new_id,$contents,true);
        return $new_id;
    }

    public function update(array $data,$id)
    {
        $table  = $this->_getTable();
        foreach ($this->_metadata_category as $metadata=>$details) {
            $contentField=$details['content_field'];
            $metafield=$details['field']."_content";
            if (isset($data[$metafield]) && $data[$metafield]) {
                $metamodel=$this->_getModel($metadata,null,$contentField);
                if ($row=$metamodel->fetchByContent($data[$metafield])) {
                    $metaid=$row['id'];
                } else {
                    $metaid=$metamodel->save(array('#content'=>$data[$metafield]));
                }
                $data[$details['field']]=$metaid;
            } else {
                unset($data[$details['field']]);
            }
            unset($data[$metafield]);
        }
        $table->update($data,$table->getAdapter()->quoteInto('id = ?',$id));
        if (isset($data['copyrightnotice'])) {
            $contents=$this->_getCutter()->getOriginalSentence($data['copyrightnotice']);
            $contentModel=$this->_getcontentModel();
            $contentModel->bulkSave($id,$contents,true);
        }
        return $new_id;
    }

    protected $_cutter;
    protected function _getCutter() {
        if (null === $this->_cutter) {
            require_once "helpers/CutterHelper.php";
            $this->_cutter=new CutterHelper();
        }
        return $this->_cutter;
    }

    protected function _getcontentModel() {
        static $model=null;
        if (null == $model) {
            require_once 'OriginalSentenceModel.php';
            $model=new OriginalSentenceModel();
        }
        return $model;
    }

    protected function keepValues($row) {
        //$this->log($row,'keepvalues');
        $this->keepValue($row,'language');
        $this->keepValue($row,'work','id');
        //$this->keepValue($row,'work','original_text');
        foreach ($this->getMetadata('category',$type) as $metadata=>$details) {
            $this->keepValue($row,$metadata,$details['field']);
        }
    }

    protected function _extend($row,$recursive=1) {
        $langmodel=$this->_getModel('Language');
        if ($this->values_to_fetch['language']) {
            //$this->log($this->values_to_fetch['language'],'values to fetch language');
            $langmodel->fetchMultipleEntries($this->values_to_fetch['language']);
            $this->values_to_fetch['language']=array();
        }
        if ($recursive && $this->values_to_fetch['work']) {
            //$this->log($this->values_to_fetch['text'],'values to fetch text');
            $this->fetchMultipleEntries($this->values_to_fetch['work'],0);
            $this->values_to_fetch['work']=array();
        }
        foreach ($this->getMetadata('category') as $metadata=>$details) {
            $this->log($this->values_to_fetch[$metadata],'values to fetch '.$metadata);
            if ($this->values_to_fetch[$metadata]) {
                $metamodel=$this->_getModel($metadata,null,$details['content_field']);
                $metamodel->fetchMultipleEntries($this->values_to_fetch[$metadata]);
                $this->values_to_fetch[$metadata]=array();
            } else {
                $this->log("no fetch");
            }
        }
        $row['Language']=$langmodel->fetchEntry($row['language']);
        if ($recursive) {
            if ($row['id']) {
                $row['srcInterpretation']=$this->fetchEntry($row['work_id'],0);
                $type='translation';
                if (!$row['work_id']) {
                    throw new Zend_Exception('Problem with original text 1');
                }
                if ($row['work_id'] == $row['id']) {
                    throw new Zend_Exception('Problem with original text 2');
                }
                $row['OriginalText']=$this->fetchEntry($row['work_id'],0);
            }
        }
        $row['metadata']=array();
        foreach ($this->getMetadata('category') as $metadata=>$details) {
            $contentField=$details['content_field'];
            $metamodel=$this->_getModel($metadata,null,$details['content_field']);
            if (null==$metamodel) $this->log("model null");
            if (isset($row[$details['field']])){
                $entry=$metamodel->fetchEntry($row[$details['field']]);
                if ($entry) {
                    $row[$metadata]=$entry;
                    $metafield=$details['field']."_content";
                    $row[$metafield]=$entry[$contentField];
                    $row['metadata'][$metadata]=$entry[$contentField];
                } else {
                    $this->log("no entry");
                }
            } else {
            }
        }
        foreach ($this->getMetadata('work',$type) as $metadata=>$field) {
            if (isset($row[$field])) {
                $row['metadata'][$metadata]=$row[$field];
            }
        }
        if ($recursive) {
            $contentModel=$this->_getcontentModel();
            $row['contents']=$contentModel->fetchWorkcontents($row['id']);
            $row['DirectTranslation']=$this->fetchEntries(array('work_id = ?'=>$row['id']),$recursive-1);
            $row['Translations']=$this->fetchEntries(array('work_id = ?'=>$row['id'],'id <> ?'=>$row['id']),$recursive-1);
            $row['work']=implode("",$row['contents']);
            if ($row['work']!=$row['copyrightnotice']) {
                $this->log('work differ !!!!');
            }
        }
        return $row;
    }

    /*protected function _toArray($row,$recursive=1) {
        $row=parent::_toArray($row);
        return $this->_extend($row,$recursive);
    }*/

    function getMetadata($type="category",$restrict=null) {
        $var="_metadata_".$type;
        if (isset($this->$var)) {
            $data=$this->$var;
            if ($restrict) {
                $restrictvar='_'.$restrict.'_metadata';
                if (isset($this->$restrictvar)) {
                    $return=array();
                    foreach ($this->$restrictvar as $meta) {
                        if (isset($data[$meta])) {
                            $return[$meta]=$data[$meta];
                        }
                    }
                    return $return;
                }
            }
            return $this->$var;
        }
        return array();
    }

    function getMetadataFields($restrict=null) {
        $fields=array();
        foreach ($this->getMetadata('category',$restrict) as $caption=>$details) {
            $fields[$details['field']]=$caption;
        }
        $fields=array_merge($fields,array_flip($this->getMetadata('work',$restrict)));
        return $fields;
    }


}
?>

pour TdxioModel

<?php
// application/models/TdxioModel.php


class TdxioModel {

    protected $_table;

    function __construct($class_name=null,$idField=null,$contentField=null) {
        if (!is_null($class_name)) {
            //$this->log($class_name,'class_name_construct');
            require_once "DbTable/TdxioDbTable.php";
            $this->_table=new TdxioDbTable(strtolower($class_name).'s',$idField,$contentField);
        }
    }

   
    public function save(array $data)
    {
        $table  = $this->_getTable();
        if (isset($data['#content'])) {
            $data[$table->contentcol]=$data['#content'];
            unset($data['#content']);
        }
        $id=$table->insert($data);
        return $id;
    }

        public function update(array $data,$id) {
        $table  = $this->_getTable();
        return $table->update($data,$table->getAapter()->quoteInto('"'.$table->idcol.'" = ?',$id));
    }

     /*
    public function fetchEntries($where='true',$recursive=1) {
        // we are gonna return just an array of the data since
        // we are abstracting the datasource from the application,
        // at current, only our model will be aware of how to manipulate
        // the data source (dbTable).
        $rowset=$this->_getTable()->fetchAll($where);
        //$this->log("entering fetch entries ".$this->_getTable()->getName()." $where ".$recursive);
        $entries=array();
        while ($rowset->valid()) {
            $row=$rowset->current();
            $entry=$row->toArray();
            //$this->keepValues($entry);
            $entry=$this->_toArray($row,$recursive);
            if (isset($entry[$table->idcol])) {
                $this->_putInCache($entry[$table->idcol],$recursive,$entry);
            }
            $entries[]=$entry;
            $rowset->next();
        }
        //$this->
        /*foreach ($entries as $k=>$entry) {
            $entry=$this->_extend($entry,$recursive);
            if (isset($entry[$table->idcol])) {
                $this->_putInCache($entry[$table->idcol],$recursive,$entry);
            }
        }*/
       // return $entries;
    //}

    public function fetchMultipleEntries($ids,$recursive=1) {
        if (!$ids) return array();
        $table=$this->_getTable();
        $db=$table->getAdapter();
        $vals=array();
        $entries=array();
        foreach ($ids as $id) {
            //if (!$this->_isInCache($id,$recursive)) {
                $vals[]=$db->quote($id);
            /*} else {
                $entries[]=$this->_getFromCache($id,$recursive);
            }*/
        }
        if ($vals) {
            $where=$table->idcol.' IN ('.implode($vals,',').')';
            $entries=array_merge($entries,$this->fetchEntries($where,$recursive));
        }
        //$this->log($where);
        return $entries;
    }

    public function fetchEntriesAssoc($where='true',$recursive=1) {
        return $this->_makeAssoc($this->fetchEntries($where,$recursive));
    }

    public function fetchMultipleEntriesAssoc($ids,$recursive=1) {
        return $this->_makeAssoc($this->fetchMultipleEntries($ids,$recursive));
    }

    protected function _makeAssoc($entries) {
        $entriesAssoc=array();
        $table=$this->_getTable();
        foreach ($entries as $entry) {
            $entriesAssoc[$entry[$table->idcol]]=$entry;
        }
        return $entriesAssoc;
    }

      protected $_cache=array();

    protected function _putInCache($id,$recursive,$value) {
        $this->log("caching id $id ($recursive) for table ".$this->_getTable()->getName());
        $this->log($this->_cache);
        if (!isset($this->_cache[$id])) {
            $this->_cache[$id]=array();
        }
        $this->_cache[$id][$recursive]=$value;
    }
    protected function _isInCache($id,$recursive) {
        return isset($this->_cache[$id]) && isset($this->_cache[$id][$recursive]);
    }
    protected function _getFromCache($id,$recursive) {
        if ($this->_isInCache($id,$recursive)) {
            //$this->log("getting id $id ($recursive) from cache for table ".$this->_getTable()->getName());
            return $this->_cache[$id][$recursive];
        } else {
            $this->log("!!!!! could't find $id ($recursive) from cache for table ".$this->_getTable()->getName());
            return null;
        }
    }

    public function fetchEntry($id,$recursive=1)
    {
        $table = $this->_getTable();
        if (!$this->_isInCache($id,$recursive)) {
            $this->log("not using cache for table ".$table->getName()." and id ".$id);
            //$where=$table->getAdapter()->quoteInto($table->idcol.' = ?', $id);
            $select = $table->select()->where($table->idcol.' = ?', $id);
            $result = $table->fetchRow($select);
            if ($result) {
                $result=$this->_toArray($result,$recursive);
                $this->_putInCache($id,$recursive,$result);
            }
            return $result;
        } else {
           $this->log("using cache for table ".$table->getName()." and id ".$id);
        }
        return $this->_getFromCache($id,$recursive);
    }

    public function fetchByContent($content) {
        $table=$this->_getTable();
        $condition=$table->select()->where($table->contentcol.' = ?',$content);
        $result = $table->fetchRow($condition);
        if ($result) $result=$this->_toArray($result,$recursive);
        return $result;
    }

    protected $values_to_fetch=array();
    protected function keepValue($row,$type,$field=null) {
        if (is_null($field)) $field=$type;
        if (!isset($this->values_to_fetch[$type])) $this->values_to_fetch[$type]=array();
        if (isset($row[$field]) && !is_null($row[$field]) && $row[$field]!=='' && !in_array($row[$field],$this->values_to_fetch[$type])) {
            $this->values_to_fetch[$type][]=$row[$field];
            //$this->log($this->values_to_fetch[$type],'keeping value '.$row[$field].' for '.$type);
        } else {
            //$this->log($this->values_to_fetch[$type],'not keep value '.$type.' '.$field.' '.$row[$field]);
        }
    }

    protected function keepValues($row) {
    }

    protected function _extend($row,$recursive=1) {
        return $row;
    }

    protected function _toArray($row,$recursive=1) {
        return $this->_extend($row->toArray(),$recursive);
    }

    protected static $_models=array();
    protected function _getModel($classname,$idField=null,$contentField=null) {
        if (!isset(self::$_models[$classname])) {
            if (!is_null($classname)) {
                $modelname=$classname.'Model';
                if (file_exists(dirname(__FILE__).'/'.$modelname.'.php')) {
                    require_once $modelname.'.php';
                    self::$_models[$classname]=new $modelname();
                } else {
                    self::$_models[$classname]=new TdxioModel($classname,$idField,$contentField);
                    $this->log(array_keys(self::$_models),'added a new model');
                }
            } else {
                throw new Zend_Exception('pb class null');
            }
        }
        return self::$_models[$classname];
    }

    protected function _getTable() {
        if (null === $this->_table) {
            // since the dbTable is not a library item but an application item,
            // we must require it to use it
            require_once 'DbTable/'.$this->_tableClass.'DbTable.php';
            $this->_table = new $this->_tableClass();
        }
        return $this->_table;
    }

    protected $_logger=null;
    protected function log($message='',$title=null,$priority=1) {
        if (!$this->_logger) {
            global $logger;
            $this->_logger=$logger;
        }
        if (is_null($message)) {
            $message="{NULL}";
        } elseif (is_bool($message)) {
            $message="{".($message ? 'TRUE':'FALSE')."}";
        } elseif (is_array($message) || is_object($message)) {
            $message=print_r($message,true);
        }
        if (null !== $title) $message="[$title] : ".$message;
        $message=
        $this->_logger->log($message,$priority);
    }

}
?>

pour le home:

<?php $this->headScript()->appendFile($this->makeUrl('/js/close-ul.js')); ?>
<table class="home">
<tr><td>
<div class="logo"><img src="<?php echo $this->makeUrl('/images/traduxio_home_logo.jpg'); ?>">
<div class="citation">Du point de vue de la communaut&eacute;, le langage n'est pas seulement un fait social , [...] il est par l'alt&eacute;rit&eacute; [...] le fondement de toute association humaine.<span class="work">Eugenio Coseriu</span></div>
<div class="site-title"><?php echo _('Translating cultural texts') ?></div>
</div>
                       </td><td class="work-list">
<ul>
<?php
foreach ($this->$work as $key=>$work ) { ?>
          <li class='work'><?php echo $this->strlen('copyrightnotice'); echo $this->work[$work]['copyrightnotice'];?>
          <ul class='work'>
<?php     foreach ($work as $work=>$work) { ?>
              <li class='work closed'><?php echo $this->work[$work]['work'];?>
              <ul class='work'>
<?php         foreach ($work as $work) { ?>
                 <li class='work'><a href="<?php echo $this->url(
            array('controller'=>'work','action'=>'read','id'=>$work['id'])) ?>">
                         <?php echo $work['title']; ?></a> (<?php echo streln($work['Translations']) ?> translations)</li>
<?php         } ?>
                </ul></li>
<?php     } ?>
          </ul></li>
<?php  } ?>
                  </ul>
</td></tr></table>


vraiment aidez je veux afficher les données qui se trouve dans ma classe work  je suis un amateur sur zend
Cordialement

Dernière modification par ubald (17-10-2009 21:07:25)

Hors ligne

 

#11 17-10-2009 21:39:59

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: affichage des données

bon AFFICHEZ VOTRE CODE AVEC LA BALISE [CODE] SUR CE FORUM

ça deviens insupportable

si vous savez pas comment ça fonctionne il y a un lien BBcode en bas de cette page

A+JYT

Hors ligne

 

#12 26-10-2009 02:25:52

ubald
Membre
Date d'inscription: 20-09-2009
Messages: 15

Re: affichage des données

Bonjour
j'ai un soucis sur une erreur que j'ai du mal à reparée .pour recupere les données:
voici l'erreur qu'il m'affiche :

Message: Primary key column(s) (id) are not columns in this table ()
Stack trace:

#0 /usr/share/php5/Zend/Db/Table/Abstract.php(846): Zend_Db_Table_Abstract->_setupPrimaryKey()
#1 /usr/share/php5/Zend/Db/Table/Select.php(99): Zend_Db_Table_Abstract->info()
#2 /usr/share/php5/Zend/Db/Table/Select.php(77): Zend_Db_Table_Select->setTable(Object(Work))
#3 /usr/share/php5/Zend/Db/Table/Abstract.php(881): Zend_Db_Table_Select->__construct(Object(Work))
#4 /usr/share/php5/Zend/Db/Table/Abstract.php(1140): Zend_Db_Table_Abstract->select()
#5 /home/ephrem/public_html/application/models/TdxioModel.php(64): Zend_Db_Table_Abstract->fetchAll('id is NULL')
#6 /home/ephrem/public_html/application/controllers/WorkController.php(28): TdxioModel->fetchEntries('id is NULL', 1)
#7 /usr/share/php5/Zend/Controller/Action.php(503): WorkController->homeAction()
#8 /usr/share/php5/Zend/Controller/Dispatcher/Standard.php(285): Zend_Controller_Action->dispatch('homeAction')
#9 /usr/share/php5/Zend/Controller/Front.php(934): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#10 /home/ephrem/public_html/public/index.php(59): Zend_Controller_Front->dispatch()

mais l'erreur 64 est :  $rowset=$this->_getTable()->fetchAll($where); de ma fonction est celle ci:
public function fetchEntries($where='true',$recursive=1) {
        // we are gonna return just an array of the data since
        // we are abstracting the datasource from the application,
        // at current, only our model will be aware of how to manipulate
        // the data source (dbTable).
        $rowset=$this->_getTable()->fetchAll($where);
        //$this->log("entering fetch entries ".$this->_getTable()->getName()." $where ".$recursive);
        $entries=array();
        while ($rowset->valid()) {
            $row=$rowset->current();
            $entry=$row->toArray();
            //$this->keepValues($entry);
            $entry=$this->_toArray($row,$recursive);
            if (isset($entry[$table->idcol])) {
                $this->_putInCache($entry[$table->idcol],$recursive,$entry);
            }
            $entries[]=$entry;
            $rowset->next();
        }
        //$this->
        /*foreach ($entries as $k=>$entry) {
            $entry=$this->_extend($entry,$recursive);
            if (isset($entry[$table->idcol])) {
                $this->_putInCache($entry[$table->idcol],$recursive,$entry);
            }
        }*/
        return $entries;
    }
vraiment s'il vous plait s'il ya quelqu'un qui peux m'aide.
Cordialement

Hors ligne

 

#13 26-10-2009 08:48:07

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: affichage des données

On en est à 6 réponses dans ce thread te demandant de mettre des balises [ code] autour de ton code.
Je considère qu'un nouveau code sans balise c'est de la provocation. Je ferme ce thread.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages