Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Discussion fermée
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é, le langage n'est pas seulement un fait social , [...] il est par l'altérité [...] 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
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)
if (is_array($this->work) foreach (....
A+JYT
Hors ligne
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
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
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
Hors ligne
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
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 !
Hors ligne
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
Hors ligne
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
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é, le langage n'est pas seulement un fait social , [...] il est par l'altérité [...] 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
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
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
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
Hors ligne
Discussion fermée
Pages: 1