|
classGenerator -> méthode insert ne fonctionne pas |
|
Aspirant 
Inscrit: 04/02/2003 05:02
De Toulouse, France
|
Est-ce que quelqu'un a déjà eu ce soucis avec des classes générées par ce module ?
Là , après 2 jours, j'ai un début de réponse mais je sèche totalement ... en attendant, je passe par une fonction mais j'ai un gros soucis ... toutes mes instances générées avec la méthode get voient la valeur de isNew mise à true.
Du coups, aucun insert ne marche puisque l'insert se fait avec INSERT au lieu de UPDATE et avec numéro d'ID ... déjà existant
Posté le : 03/08/2005 22:39
|
|
|
Re: classGenerator -> méthode insert ne fonctionne pas |
|
Semi pro 
Inscrit: 06/01/2004 09:37
De Non loin de Paris
|
Donne nous un extrait de ta classe sinon on ne pourra pas t'aider.
A+
Posté le : 03/08/2005 23:18
|
|
|
Re: classGenerator -> méthode insert ne fonctionne pas |
|
Aspirant 
Inscrit: 04/02/2003 05:02
De Toulouse, France
|
Je ne voulais pas le faire de suite vu la taille (je met tout comme ça, c'est fait) :
include_once XOOPS_ROOT_PATH.'/class/xoopsobject.php';
/**
* dbv_persons Class
*
* This class is responsible for providing data access mechanisms to the data source of Xoops dbv_persons class objects.
*
* @author Vincent Fourastié
* @package DB Volley
* @version 1.0
*/
class dbv_persons extends XoopsObject
{
function dbv_persons( $id = null )
{
$this->db =& Database::getInstance();
$this->initVar( 'persons_id', XOBJ_DTYPE_INT, null, false, 10 );
$this->initVar( 'persons_sex', XOBJ_DTYPE_INT, null, false, 10 );
$this->initVar( 'persons_surname', XOBJ_DTYPE_TXTBOX, null, false );
$this->initVar( 'persons_firstname', XOBJ_DTYPE_TXTBOX, null, false );
$this->initVar( 'persons_nicknames', XOBJ_DTYPE_TXTBOX, null, false );
$this->initVar( 'persons_country', XOBJ_DTYPE_TXTBOX, null, false );
$this->initVar( 'persons_country2', XOBJ_DTYPE_TXTBOX, null, false );
$this->initVar( 'persons_birth', XOBJ_DTYPE_TXTBOX, null, false );
$this->initVar( 'persons_height', XOBJ_DTYPE_INT,null, false, 10 );
$this->initVar( 'persons_birthwhere', XOBJ_DTYPE_TXTBOX, null, false );
$this->initVar( 'persons_picture', XOBJ_DTYPE_TXTBOX, null, false );
$this->initVar( 'persons_xoopsid', XOBJ_DTYPE_INT, null, false, 10 );
$this->initVar( 'persons_occupation', XOBJ_DTYPE_INT, null, false, 10 );
$this->initVar( 'persons_lastupdate', XOBJ_DTYPE_TXTBOX, null, false );
if ( isset( $id ) )
{
if ( is_array( $id ) )
{
$this->assignVars( $id );
}
else
{
$this->load( intval( $id ) );
}
}
else
{
$this->setNew();
}
}
function load( $id )
{
$sql = 'SELECT *
FROM '.$this->db->prefix( 'dbv_persons' ).'
WHERE persons_id = ''.$id.''';
$myrow = $this->db->fetchArray( $this->db->query( $sql ) );
$this->assignVars( $myrow );
if ( !$myrow )
{
$this->setNew();
}
}
[b][color=CC0000]...[/color][/b]
}
/**
* dbv_personshandler Class
*
* This class provides simple mechanisms for dbv_persons object
*
* @author Vincent Fourastié
* @package DB Volley
* @version 1.0
*/
class Xoopsdbv_personsHandler extends XoopsObjectHandler
{
/**
* create
*
* Create a new dbv_persons
*
* @param bool $isNew Flag the new objects as 'new' ?
*
* @return object dbv_persons
*/
function &create( $isNew = true )
{
$dbv_persons = new dbv_persons();
if ( $isNew )
{
$dbv_persons->setNew();
}
return $dbv_persons;
}
/**
* get
*
* Retrieve a dbv_persons
*
* @param int $id Id of the dbv_persons
*
* @return mixed reference to the {@link dbv_persons} object, FALSE if failed
*/
function &get( $id )
{
$sql = 'SELECT *
FROM '.$this->db->prefix( 'dbv_persons' ).'
WHERE persons_id = ''.$id.''';
if ( !$result = $this->db->query( $sql ) )
{
return false;
}
$numrows = $this->db->getRowsNum( $result );
if ( $numrows == 1 )
{
$dbv_persons = new dbv_persons($id);
$dbv_persons->assignVars( $this->db->fetchArray( $result ) );
return $dbv_persons;
}
return false;
}
/**
* insert
*
* Insert a new dbv_persons in the database
*
* @param object $dbv_persons reference to the {@link dbv_persons} object
* @param bool $force
*
* @return bool FALSE if failed, TRUE if already present and unchanged or successful
*/
function insert( &$dbv_persons, $force = false )
{
global $xoopsConfig;
if ( get_class( $dbv_persons ) != 'dbv_persons' )
{
return false;
}
if ( !$dbv_persons->isDirty() )
{
return true;
}
if ( !$dbv_persons->cleanVars() )
{
return false;
}
foreach ( $dbv_persons->cleanVars as $k => $v )
{
${$k} = $v;
}
if ( $dbv_persons->isNew() )
{
$dbv_persons = new dbv_persons();
$format = 'INSERT INTO %s
( persons_id, persons_sex, persons_surname, persons_firstname,
persons_nicknames, persons_country, persons_country2, persons_birth,
persons_height, persons_birthwhere, persons_picture, persons_xoopsid,
persons_occupation, persons_lastupdate )';
$format .= 'VALUES (%u, %u, %s, %s, %s, %s, %s, %s, %u, %s, %s, %u, %u, %s)';
$sql = sprintf( $format,
$this->db->prefix( 'dbv_persons' ),
$persons_id,
$persons_sex,
$this->db->quoteString( $persons_surname ),
$this->db->quoteString( $persons_firstname ),
$this->db->quoteString( $persons_nicknames ),
$this->db->quoteString( $persons_country ),
$this->db->quoteString( $persons_country2 ),
$this->db->quoteString( $persons_birth ),
$persons_height,
$this->db->quoteString( $persons_birthwhere ),
$this->db->quoteString( $persons_picture ),
$persons_xoopsid,
$persons_occupation,
$this->db->quoteString( $persons_lastupdate ) );
$force = true;
}
else
{
$format = 'UPDATE %s
SET ';
$format .= 'persons_id = '%u',
persons_sex = '%u',
persons_surname = '%s',
persons_firstname = '%s',
persons_nicknames = '%s',
persons_country = '%s',
persons_country2 = '%s',
persons_birth = '%s',
persons_height = '%u',
persons_birthwhere = '%s',
persons_picture = '%s',
persons_xoopsid = '%u',
persons_occupation = '%u',
persons_lastupdate = '%s'';
$format .= ' WHERE persons_id = '%u'';
$sql = sprintf( $format,
$this->db->prefix( 'dbv_persons' ),
$persons_id,
$persons_sex,
$this->db->quoteString( $persons_surname ),
$this->db->quoteString( $persons_firstname ),
$this->db->quoteString( $persons_nicknames ),
$this->db->quoteString( $persons_country ),
$this->db->quoteString( $persons_country2 ),
$this->db->quoteString( $persons_birth ),
$persons_height,
$this->db->quoteString( $persons_birthwhere ),
$this->db->quoteString( $persons_picture ),
$persons_xoopsid,
$persons_occupation,
$this->db->quoteString( $persons_lastupdate ),
$persons_id );
}
if ( false != $force )
{
$result = $this->db->queryF( $sql );
}
else
{
$result = $this->db->query( $sql );
}
if ( !$result )
{
return false;
}
if ( empty( $persons_id ) )
{
$persons_id = $this->db->getInsertId();
}
$dbv_persons->assignVar( 'persons_id', $persons_id );
return true;
}
[b][color=CC0000]...[/color][/b]
}
Post édité pour supprimer les méthodes ne posant pas de problèmes
Posté le : 03/08/2005 23:45
Edité par DaBoyz sur 04/08/2005 18:55:37
|
|
|
Re: classGenerator -> méthode insert ne fonctionne pas |
|
Semi pro 
Inscrit: 06/01/2004 09:37
De Non loin de Paris
|
Je vient de regarder ton code, mais je n'ai pas trouvé d'ou venait l'erreur, cependant, ce code est bien compliqué et n'utilise pas toutes les possibilitées de XOOPS. La version 2.2 de XOOPS introduit une nouvelle classe : XoopsPersistableObjectHandler qui simplifie grandement le travail des développeurs. Si ton module n'est pas destiné exclusivement a cette version de XOOPS, tu peut toujours copier dans un fichier qui sera inclue dans ton module cette classe. Voila un classe qui l'utilise :
class ExtcalEventmember extends XoopsObject
{
function ExtcalEventmember()
{
$this->initVar('eventmember_id', XOBJ_DTYPE_INT, null, false);
$this->initVar('event_id', XOBJ_DTYPE_INT, null, true);
$this->initVar('uid', XOBJ_DTYPE_INT, null, true);
}
}
class ExtcalEventmemberHandler extends XoopsPersistableObjectHandler
{
function ExtcalEventmemberHandler(&$db)
{
$this->XoopsPersistableObjectHandler($db, 'extcal_eventmember', 'ExtcalEventmember', array('event_id', 'uid'));
}
function createEventmember($var_arr)
{
$eventmember = $this->create();
$eventmember->setVars($var_arr);
return $this->insert($eventmember, true);
}
function deleteEventmember($key)
{
$eventmember = $this->get($key);
return $this->delete($eventmember, true);
}
function getMembers($eventId)
{
$memberHandler = xoops_gethandler('member');
$criteria = new Criteria('event_id', $eventId);
$eventMember = $this->getObjects($criteria);
$count = count($eventMember);
if($count > 0) {
$in = '('.$eventMember[0]->getVar('uid');
array_shift($eventMember);
foreach($eventMember as $member) {
$in .= ','.$member->getVar('uid');
}
$in .= ')';
$criteria = new Criteria('uid', $in, 'IN');
} else {
$criteria = new Criteria('uid', '(0)', 'IN');
}
$ret = array('memberNb'=>$count, 'member'=>$memberHandler->getUserList($criteria));
return $ret;
}
}
Cette classe est trés simple, et utilise peu XoopsPersistableObjectHandler, mais je te conseille de regarder de plus prés cette classe. Si tu a des questions n'hésite surtout pas. A+
Posté le : 04/08/2005 00:21
|
|
|
Re: classGenerator -> méthode insert ne fonctionne pas |
|
Aspirant 
Inscrit: 04/02/2003 05:02
De Toulouse, France
|
Citation : ce code est bien compliqué et n'utilise pas toutes les possibilitées de XOOPS Compliqué, sans doute mais la base est générée par le module classgenerator, je n'ai quasiment rien retouché. La complexité est plutôt due à la complexité de la classe XoopsObject et à sa compréhension ... Pour ce qui du fait que le code n'utilise pas toutes les possibilités de Xoops, pourrais-tu préciser s'il te plait ? Je reprends actuellemment tous le code pour utiliser des classes et des méthodes de l'API Xoops, donc, cela m'intéresse fortement. Pour ce qui est de Xoops 2.2, n'y étant pas encore passé (plutôt fan de la doctrine ministérielle "pour la mise à jour vers la dernière version, il est urgent d'attendre" ... mais j'avais jeté un coup d'oeil à cette nouvelle classe ... Pour le moment, je pense continuer à développer en faisant les enregistrements au travers d'une fonction mais j'avoue ne pas comprendre pourquoi ce code ne marche pas ... personne ne semble éprouver de problèmes avec des classes générées par classgenerator, d'où ma question initiale ... Merci pour ta réponse dans tous les cas 
Posté le : 04/08/2005 19:05
|
|
|
Re: classGenerator -> méthode insert ne fonctionne pas |
|
Semi pro 
Inscrit: 06/01/2004 09:37
De Non loin de Paris
|
Si tu veut utiliser l'API de XOOPS, je te conseile de copier la classe XoopsPersistableObjectHandler et de l'inclure dans ton module, elle est vraiment trés simple d'utilisation et tu ne te sert quasiment pas de la classe XoopsObject.
A+
Posté le : 04/08/2005 21:10
|
|
|
Re: classGenerator -> méthode insert ne fonctionne pas |
|
Guest_
|
salut Daboyz, Tout d'abord, je suis content de te revoir sur Xoops France  Concernant ta question, c'est vrai qu'il y a un problème avec ClassGenerator, les classes générées doivent etre systématiquent reprises pour etre corrigées. Pour ma part j'ai laissé tomber. Désolé de ne pas t'avoir donné la réponse A+ Hervé
Posté le : 05/08/2005 07:11
|
|
|
Re: classGenerator -> méthode insert ne fonctionne pas |
|
Aspirant 
Inscrit: 04/02/2003 05:02
De Toulouse, France
|
Citation :Tout d'abord, je suis content de te revoir sur Xoops France j'étais toujours présent mais non connecté ... je suivais vos activités et votre dévouement à la communauté (ce dernier n'ayant pas toujours pas faibli malgrè le temps qui passe, super). Citation :Concernant ta question, c'est vrai qu'il y a un problème avec ClassGenerator, les classes générées doivent etre systématiquent reprises pour etre corrigées. Pour ma part j'ai laissé tomber. C'est bien ce que je pensais et je vais donc, peut-être pas laisser tomber (utile de générer toutes les méthodes d'un coups) mais l'utiliser plutôt comme un générateur de modèle ... quelquechose du genre ... en attendant, je vais devoir reprendre mes classes; dommage, tout marche, sauf l'enregistrement ... Citation :Désolé de ne pas t'avoir donné la réponse Oulà , pas de soucis là dessus, tu veux rire 
Posté le : 08/08/2005 19:18
|
|
Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|