CMS Automne
http://www.automne-cms.org/forum/

Utilisation des objets polymod dans une page .php
http://www.automne-cms.org/forum/viewtopic.php?f=2&t=1010
Page 1 sur 1

Auteur:  kae [ Lun Sep 19, 2011 5:15 pm ]
Sujet du message:  Utilisation des objets polymod dans une page .php

Bonsoir,

Je souhaites automatiser l'insertion des données dans un module polymod à partir d'un script PHP.

Est ce qu'il est possible de remplir les champs d'un objet puis d'enregistrer ce dernier sans passer par le formulaire d'ajout /modification d'un élément d'objet?

Si c'est possible et si vous avez un exemple de code source; cela m'avancerai dans la compréhension de la solution.

Merci pour votre réponse par avance.

Auteur:  Frank [ Lun Sep 19, 2011 5:35 pm ]
Sujet du message:  Re: utilisation des objets polymod dans une page .php

Salut,

L'import de données n'est pas encore dispo par défaut dans Automne, c'est prévu pour la 4.3
http://www.automne-cms.org/web/fr/477-b ... php?id=544

J'ai pas de code source sous la main là désolé ;)

Auteur:  kae [ Mar Sep 20, 2011 10:08 am ]
Sujet du message:  Re: utilisation des objets polymod dans une page .php

J'ai identifié record.php, est qu'il est exploitable dans un script php?
J'ai également identifié que je pouvais récupérer un module, puis les objets du modules et enfin les champs d'un module.

Comment est ce que je peux référencer ces classes pour exploiter les objets ....

Je veux pouvoir utiliser certaine données des objets du module pour générer un PDF.

Auteur:  jeremie [ Mar Sep 20, 2011 1:11 pm ]
Sujet du message:  Re: utilisation des objets polymod dans une page .php

Il est tout à fait possible de travailler directement en PHP pour lister, éditer et supprimer des objets polymod.
Cependant cela demande une connaissance de PHP.
Voici rapidement quelques exemples :

Pour récupérer un objet seul, on peut utiliser :
Code :
$myPolyObject = CMS_poly_object_catalog::getObjectByID($itemID, $returnDefinition = false, $public = false);


Pour effectuer une recherche :
Code :
$search = new CMS_object_search(new CMS_poly_object_definition($objectID),true); // Instanciation
$search->addWhereCondition($fieldID, $myValue); // Recherche par valeur
$search->addWhereCondition('item', $itemID); // Recherche par id
$search->addOrderCondition($fieldID, 'asc'); // Ordonner les résultats en ASC
$search->setAttribute('itemsPerPage', 10); // Limiter les résultats par page
$items = $search->search(); // Renvoie des objets polymod par défaut. Un paramètre permet de spécifier le type de données à retourner. Il existe des types moins gourmands en mémoire. Par exemple retourner uniquement les IDs des objets.


Pour insérer des valeurs à des champs, et enregistre l'objet :
Code :
$myPolyObject = CMS_poly_object_catalog::getObjectByID($itemID, $returnDefinition = false, $public = false); // Instanciation
$myPolyObject->setValues($fieldID, array($fieldID.'_0' => $statusToSet), ''); // Insère une valeur dans le champ. Retourne false en cas d'échec.
$myPolyObject->writeToPersistence(); // Enregistre l'objet. retourne false en cas d'échec.
// Attention, il faut vérifier le fonctionnement de ces fonctions en regardant leur fonctionnement dans les classes. Certains paramètres ou syntaxes sont particulières.


Ceci n'est qu'un aperçu des possibilités via PHP. Il est possible de faire beaucoup mieux...

Auteur:  kae [ Mar Sep 20, 2011 1:21 pm ]
Sujet du message:  Re: utilisation des objets polymod dans une page .php

Merci pour cette explication.

Cependant pour accéder à ces objets, je dois inclure des scripits php des classes qui définissent toutes le méthodes que tu utilise dans ton exemple.

C'est la ou je ne visualise pas bien le concept.

Pour mon test, j'ai créé une page php dans le répertoire
Citer:
\web\test\test.php
et je voudrais pouvoir accéder et manipuler les objets d'un module polymod.

Qu'est ce que je référence pour pouvoir manipuler les objets du module ?
Est ce qu'il y a un fichier php particulier à inclure dans mon php?

Merci pour ta réponse.

Auteur:  Frank [ Mar Sep 20, 2011 3:05 pm ]
Sujet du message:  Re: utilisation des objets polymod dans une page .php

Pour avoir accès aux classes d'Automne il te faut inclure cette ligne en haut de ton script PHP
Code :
require_once($_SERVER["DOCUMENT_ROOT"]."/cms_rc_frontend.php");


Afin de t'assurer que ton script ne puisse être lancé que par un admin Automne, tu peux aussi ajouter ce snippet de code :
Code :
if(!isset($cms_user) || !is_a($cms_user, 'CMS_profile_user') || !$cms_user->hasAdminClearance(CLEARANCE_ADMINISTRATION_EDITVALIDATEALL)){
   header("Location: /403.php");
   exit;
}

Auteur:  jeremie [ Mar Sep 20, 2011 3:31 pm ]
Sujet du message:  Re: utilisation des objets polymod dans une page .php

Citer:
if(!isset($cms_user) || !is_a($cms_user, 'CMS_profile_user') || !$cms_user->hasAdminClearance(CLEARANCE_ADMINISTRATION_EDITVALIDATEALL)){
header("Location: /403.php");
exit;}


Ce code redirige tout visiteur qui n'est pas administrateur vers une 403. Je ne pense pas que cela soit utile ici.

Auteur:  kae [ Mar Sep 20, 2011 3:42 pm ]
Sujet du message:  Re: utilisation des objets polymod dans une page .php

merci pour ces précisions.
Je vais faire mes tests.

Auteur:  kae [ Mar Sep 27, 2011 9:36 am ]
Sujet du message:  Re: [résolu]utilisation des objets polymod dans une page .ph

Bonjour,
Je ne comprend pas très bien le code source Pour insérer des valeurs à des champs, et enregistrer l'objet :
mon objet Adresse avec les champs qui le compose.
Code :
5 Adresse
   |--26 Rue
   |--27 Code Postal
   |--28 Ville
   |--29 Téléphone
   |--30 Télécopie

Je demande une instance, je remplis les champs de base puis j'enregistre comme suit :
Code :
$PolyObject = CMS_poly_object_catalog::getObjectByID(5, $returnDefinition = false, $public = false); // Instanciation
   $PolyObject->setValue('Rue','198 Rue Exemple');
   $PolyObject->setValue('Code Postal','31000');
   $PolyObject->setValue('Ville','TOULOUSE');
   PolyObject->writeToPersistence();

A l'exécution j'ai l'erreur suivant :
Fatal error: Call to a member function setValue() on a non-object in /var/www/html/web/test/test.php on line 47
Ligne 47 étant la ligne de la Rue dans le fichier test.php

Auteur:  jeremie [ Mar Sep 27, 2011 9:51 am ]
Sujet du message:  Re: Utilisation des objets polymod dans une page .php

Le code devrait plutôt ressembler à ceci :

Code :
<?php
$PolyObject = CMS_poly_object_catalog::getObjectByID(5, false, false); // Instanciation de l'élément $PolyObject. Les deux derniers paramètres sont optionnels
$PolyObject->setValue(26, array('26_0' => '198 Rue Exemple'), ''); // Enregistrement de la valeur pour le champ 26
$PolyObject->setValue(26, array('27_0' => '31000'), ''); // Enregistrement de la valeur pour le champ 27
$PolyObject->setValue(26, array('28_0' => 'TOULOUSE'), ''); // Enregistrement de la valeur pour le champ 28
$PolyObject->writeToPersistence(); // Enregistrement de l'élément $PolyObject
?>


En supposant que les champs 26, 27 et 28 soient des champs "chaîne de caractère".
La syntaxe peut en effet sensiblement varier selon les types de champs.

Auteur:  jeremie [ Mar Sep 27, 2011 9:58 am ]
Sujet du message:  Re: Utilisation des objets polymod dans une page .php

A noter que la fonction writeToPersistence() renvoie un booléen : true si l'enregistrement s'est bien passé, false dans le cas contraire.
On peut ainsi effectuer cette vérification :
Code :
if($PolyObject->writeToPersistence()){
echo 'Enregistrement OK';
} else {
echo 'Enregistrement KO';
}


La fonction setValue() retourne également un booléen. false si la valeur du champ n'est pas correcte et ne peut pas être enregistrée.
De la même manière :
Code :
if($PolyObject->setValue(26, array('26_0' => '198 Rue Exemple'), '')){
echo 'Champ 26 : OK';
} else {
echo 'Champ 26 : KO';
}


Il faut savoir que l'enregistrement retournera false si l'utilisateur ne possède pas les droits suffisants.
On peut consulter le journal d'erreurs d'Automne pour avoir des précisions.

Auteur:  arnaud [ Jeu Oct 06, 2011 11:30 am ]
Sujet du message:  Re: Utilisation des objets polymod dans une page .php

Bonjour,

Je teste l'import d'éléments dans un module Polymod existant, mais ça ne fonctionne pas. (J'ai peut être tout compris de travers... Est-ce que c'est bien le but recherché par kae ?)

Voici le code que j'utilise :
Code :
require_once($_SERVER["DOCUMENT_ROOT"]."/cms_rc_frontend.php");

$fichier = "liste_centres.csv";
$fic = fopen($fichier, 'rb');

for ($ligne = fgetcsv($fic, 1024); !feof($fic); $ligne = fgetcsv($fic, 1024))
{
   $j = sizeof($ligne);
   for ($i = 0; $i < $j; $i++)
   {
      $row = explode(';',$ligne[$i]);
    
      $PolyObject = CMS_poly_object_catalog::getObjectByID(12, false, false); // Instanciation de l'élément $PolyObject, 12 étant l'ID de mon module.

      $PolyObject->setValue(30, array('30_0' => $row[0]), ''); // Enregistrement de la valeur pour le champ 30 => Nom du centre
      $PolyObject->setValue(31, array('31_0' => $row[1]), ''); // Enregistrement de la valeur pour le champ 31 => Adresse
      $PolyObject->setValue(40, array('40_0' => $row[4]), ''); // Enregistrement de la valeur pour le champ 40 => Email
      
      if($PolyObject->writeToPersistence())// Enregistrement de l'élément $PolyObject
      {
         echo 'Enregistrement OK';
      }
      else
      {
         echo 'Enregistrement KO';
      }
   }
}



À l'exécution, j'ai "Enregistrement KO", je suis donc allé dans le journal des erreurs et voici ce qui est indiqué :

    2011-10-06 11:47:58|http|/php/import_centres.php (line 19) : Unknown method 'setValue' for object CMS_poly_object in this version of Automne
    2011-10-06 11:47:58|http|/php/import_centres.php (line 20) : Unknown method 'setValue' for object CMS_poly_object in this version of Automne
    2011-10-06 11:47:58|http|/php/import_centres.php (line 25) : Unknown method 'setValue' for object CMS_poly_object in this version of Automne
    2011-10-06 11:47:58|http|CMS_poly_object->writeToPersistence (line 974) : Can't write object with error

Après vérification dans le manuel (http://www.automne-cms.org/api/), il me semble que la méthode setValue n'est pas déclarée pour la classe CMS_poly_object_catalog

Auteur:  Sébastien [ Mer Oct 12, 2011 2:00 pm ]
Sujet du message:  Re: Utilisation des objets polymod dans une page .php

Il y a des erreurs dans ton code, voila quelque chose qui devrait marcher :
Code :
require_once($_SERVER["DOCUMENT_ROOT"]."/cms_rc_frontend.php");

$fichier = "liste_centres.csv";
$fic = fopen($fichier, 'rb');

for ($ligne = fgetcsv($fic, 1024); !feof($fic); $ligne = fgetcsv($fic, 1024))
{
   $j = sizeof($ligne);
   for ($i = 0; $i < $j; $i++)
   {
      $row = explode(';',$ligne[$i]);
     
      $PolyObject = new CMS_poly_object(5); // Instanciation de l'élément $PolyObject, 5 étant l'ID du type d'objet (adresse).

      $PolyObject->setValues(30, array('30_0' => $row[0]), ''); // Enregistrement de la valeur pour le champ 30 => Nom du centre
      $PolyObject->setValues(31, array('31_0' => $row[1]), ''); // Enregistrement de la valeur pour le champ 31 => Adresse
      $PolyObject->setValues(40, array('40_0' => $row[4]), ''); // Enregistrement de la valeur pour le champ 40 => Email
     
      if($PolyObject->writeToPersistence())// Enregistrement de l'élément $PolyObject
      {
         echo 'Enregistrement OK';
      }
      else
      {
         echo 'Enregistrement KO';
      }
   }
}

Auteur:  arnaud [ Jeu Oct 13, 2011 11:17 am ]
Sujet du message:  Re: Utilisation des objets polymod dans une page .php

Bonjour Sébastien et merci pour ta réponse,

je viens de tester, ça a effectivement fonctionné ! Mes éléments ont bien été créés. Par contre, ça a créé des entrées vides (je cherche toujours pourquoi), que j'ai rapidement supprimés.

Merci pour ton aide !

Page 1 sur 1 Le fuseau horaire est UTC [Heure d’été]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/