Comment créer des objets eZ Publish en PHP

J'ai découvert il n'y a pas très longtemps la fonction eZContentFunctions::createAndPublishObject() de l'API eZ Publish. Cette fonction bien cachée (et enfin documentée depuis la résolution de ce bug) permet de créer facilement des objets de contenus. Quand je pense que tout le travail est mâché par cette fonction, ça en fait des lignes de codes inutiles... Par exemple, pour créer un objet de la classe de contenu File, ces quelques lignes suffisent :

<?php
$params = array();
$params['parent_node_id'] = 52; // node id of /Media/Files
$params['class_identifier'] = 'file';
$params['creator_id'] = 14; // admin
$params['storage_dir'] = '/tmp/data/'; // don't forget the ended /
$params['section_id'] = 3; // section media
 
$attributesData = array();
$attributesData['name'] = 'My file';
$attributesData['file'] = 'my_file.txt';
 
$params['attributes'] = $attributesData;
$contentObject = eZContentFunctions::createAndPublishObject( $params );
?>

Chaque élément du tableau $attributesData contient les valeurs des attributs du futur objet de contenu sous le format attendu par la méthode fromString() de chaque datatype. Et voila, ce n'est pas plus compliqué que ça ! Dommage qu'il n'existe pas encore l'équivalent pour mettre à jour les objets de contenu existants.

» Commentaires

- Super méthode (#67912) par Jérôme Vieilledent le 20 Août 2009 à 08:46
Salut ! J'utilise cette méthode statique depuis un certain temps et il est vrai que c'est bien pratique... Je l'utilise notamment en filigrane de mon extension d'import, NovenImportXMLStream, que je ne devrais plus tarder à ouvrir à la communauté.
Je suis d'accord avec toi sur le fait qu'il faudrait une méthode équivalente pour mettre à jour des objets.
J'ai déjà écrit une telle méthode, pas bien compliqué, je vais donc essayer de proposer un patch histoire que ce soit intégré dans la 4.2 (on peut rêver ;-))
- Mais il y a mieux... ou pas. (#67913) par Bertrand le 20 Août 2009 à 10:32
Dans le contexte de l'ajout des tests unitaires au CMS, nous nous sommes retrouvés confrontés au quotidien à notre API un peu lourde... les tests de la partie contenu demandant un certain volume de création d'objets de contenu, nous avons fini par implémenter une surcouche du kernel qui préfigure assez bien de ce que sera la future API du CMS.

Celle-ci est malheureusement en alpha, et sujette à modifications, mais rien ne vous empêche d'y jeter un oeil.

Tout se passe dans le dossier tests, plus précisément tests/toolkit/extras/kernelwrapper.

Trois classes sont pour le moment présentes: ezpObject, ezpNode et ezpClass.

Quelques exemples:

<?php
// Manipulation de classe de contenu
$class = new ezpClass();
$name = $class->add( 'Name', 'name', 'ezstring' );
$relations = $class->add( 'Relations', 'relations', 'ezobjectrelationlist' );
$email = $class->add( 'E-mail', 'email', 'ezemail' );

$class->remove( $email );
$class->store();
?>

<?php
// Publication d'un folder
$folder = new ezpObject( "folder", 2 );
$folder->name = "Un dossier";
$folder->short_description = "123";
$folder->publish();
?>
- Vivement la nouvelle API ! (#67914) par Jérôme Vieilledent le 20 Août 2009 à 11:38
Salut Bertrand

On a pu avoir un petit aperçu de cette nouvelle API pendant la eZ Conference de juillet dernier. J'avoue être assez impatient !
- Enfin documentée (#67922) par Jérôme le 28 Août 2009 à 17:57
"(et enfin documentée depuis la résolution de ce bug)"

Le code était pas clair ? ^_^

:)
- Faciliter les déploiements... (#67925) par Nicolas Steinmetz le 31 Août 2009 à 21:25
Surtout que ça permettrait de simplifier les déploiements en les automatisants plutôt que de rejouer les modifs en prod.

A croire d'ailleurs que les devs font les modifs de base sur la base de prod pour les avoir ensuite sur leur poste de dev et faire les templates & co qui vont bien par la suite.

Pour des nouvelles classes, on peut certes passer par des ezpackages. Pour des mises à jour de classe existantes, là par contre, y a rien a priori.

Reporter des modifications de classes en BO à la main est quand même une grande source d'erreurs lors d'un déploiement en plus :-/

Ce mécanisme est une première étape. J'esprèe qu'on en verra d'autre par la suite pour faciliter les déploiements et les "migrations" de classes de contenus...
- l'édition est aussi disponible mainteant (#68006) par Jérôme le 19 Octobre 2009 à 15:25
Hello Damien,

eZContentFunctions::updateAndPublishObject() est maintenant disponible :

- http://pubsvn.ez.no/doxygen/trunk...tml#2607b8b2ebde4f590cf5f2996ebc4458
- Bonne nouvelle (#68007) par Damien le 19 Octobre 2009 à 16:00
@Jérôme : j'ai vu ça, c'est une bonne nouvelle :)
- Lenteur de cette methode (#68021) par Alex le 01 Novembre 2009 à 17:27
bonjour,

j'essaie de faire des creations de contenus avec le bout de code que tu mets dans ton article. parallelement, je fais beaucoup d'import avec data_import.

la premiere methode est 5 fois plus lente que la deuxieme sur la meme machine (windows... je sais mais c du dev) c'est a dire 30 seconde comparé a 5 secondes.
- Super (#68073) par jfsenechal le 02 Décembre 2009 à 17:28
Pile poil ce qu'il me fallait :-)

J'ai essayé avec des pdf ça va nickel

Une petite question pour l'update, j'arrive pas à indiquer la rérérence du user qui modifie, à l'instar du 'creator_id'

j'ai essayé 'modifier_id', 'creator_id', 'owner_id'
j'ai tout le temps modifié par "anonymous user" :-(
- Le test toolkit (#68242) par kalooni le 07 Mai 2010 à 08:04
Le test toolkit avec ces classes de créations d'objet, noeud et assignements est vraiment intéressant ! Dommage que cela ne soit pas présent dans les installation ez que l'on télécharge ou alors j'ai raté quelque chose.

Les commentaires sont désactivés

» Trackback

Aucun trackback

Les trackacks sont désactivés

Flux RSS des billets

Flux RSS des billets

Rechercher sur pwet.fr

À retenir

Derniers commentaires

Archives

Nuage de tags

Bioutifoul photos

Quelques liens

Licence d'utilisation

Contenu sous Licence Creative Commons By-Sa

Sauf mentions spécifiques, les billets et les photos publiés sur ce site sont placés sous la licence Creative Commons by-sa.

Pour toute utilisation dépassant le cadre de cette licence, merci de me contacter par e-mail.

Login