29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
17-02-2012 : Pétition pour une protection de l’apiculture et des consommateurs face au lobby des OGM
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / eZ Publish / Dossiers techniques / eZ Publish 4 : créer des datatypes / eZ Publish content model / Modèle de contenu de eZ Publish





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox
zero papier grâce aux catalogues et promos en ligne de bonial

eZ Publish content model / Modèle de contenu de eZ Publish

Date de publication: le dimanche 25 mai 2008 à 18h40
Dernière modification: par Pascal BOYER le mardi 22 février 2011 à 10h38
» Article suivant: Setting up files and configuration / Paramétrer les fichiers et configuration

21 May 2008 6:14  

One of the most appealing features of eZ Publish is its implementation of content classes and objects. The concept of content classes and objects in eZ Publish is borrowed from object-oriented programming: content classes are blueprints for content objects as are PHP classes for PHP objects. While PHP classes have attributes and methods, there are only attributes for content classes. Content classes can be created and modified at any time – even on production systems – without getting your hands dirty with PHP. This flexibility is possible because content classes are not hard-coded in PHP, but built from smaller pieces: datatypes.
L'une des fonctionnalités les plus intéressantes de eZ Publish est l'implémentation des classes et objets de contenu. Dans eZ Publish, le concept de classes de contenu et d'objets de contenu est emprunté à la programmation orientée objet: les classes de contenu sont destinées (???) aux objets de contenu comme les classes PHP le sont aux objets PHP. Alors que ces dernières contiennent des attributs et des méthodes, les classes de contenu ne possèdent que des attributs et peuvent être créées et modifiées à tout moment - même sur un système en production - sans devoir taper une seule ligne de PHP. Cette flexibilité est rendue possible par le fait que les classes de contenu ne sont pas codées en dur en PHP mais construites à partir de plus petites parties: les datatypes.

Attributes of PHP classes can be of different types -- either the built-in primitive types like strings, integers, and boolean values or more complex types like classes and arrays.
Les attributs des classes PHP peuvent être de différents types - soit de type primitive tel que les chaînes de caractères, les entiers, les valeurs booléennes ou de type plus complexe tel que les classes et les tableaux.

Attributes of content classes are of datatypes. Consider a product object for a small online store. An attribute of the “Text line” datatype stores the name for your product, an attribute of the “Image” datatype provides a visual representation of the product, and an attribute of the “Price” datatype stores the price. The product ID is stored in an attribute of the “Integer” datatype.
Les attributs des classes de contenus sont basés sur les datatypes. Considérons un objet produit d'un petit commerce en ligne. Un attribut basé sur le datatype Ligne de texte stocke le nom du produit, un attribut basé sur le datatype Image fournit une représentation visuelle du produit et un attribut basé sur le datatype Prix stocke le prix du produit. L'ID du produit est quant à lui stocké dans un attribut basé sur le datatype Nombre entier .

The above datatypes are among the many datatypes included in standard eZ Publish distributions, making it possible to customize many types of content. However, sometimes your site has special needs that cannot be satisfied by one of the existing datatypes.
Les datatypes cités ci-dessus font partie de la multitude de ceux disponibles par défaut dans eZ Publish permettant ainsi de personnaliser de nombreux types de contenus. Cependant, il arrive parfois que les besoins spécifiques de votre site ne puissent être satisfaits par l'un de ces quelconques datatypes existant.

At Young Media Concepts we have a library of custom datatypes that we re-use for different projects. Some examples from this library are:
Au sein de Young Media Concepts  nous disposons d'une librairie de datatypes personnalisés que nous utilisons dans le cadre de différents projets. Voici quelques exemples de cette librairie:

  • “ymcdomain” stores a domain name either with or without a subdomain. Domain names can be stored using the “Text line” datatype, but our datatype includes the functionality to validate domain strings.
    ymcdomain stocke un nom de domaine avec ou sans sous-domaine. Bien que les noms de domaines puissent être stockés par un datatype Ligne de texte, notre datatype inclut un système de validation de la chaîne de caractères constituant le nom de domaine.
  • “ymcinstantmessenger” stores users' nicknames for pre-defined IM services.
    ymcinstantmessenger stocke les surnoms des utilisateurs des services de Messagerie Instantanées.
  • “ymcuniquestring” saves a plain text string, but only accepts the string if it is unique across all objects of the same content class.
    ymcuniquestring stocke une chaîne de texte non formaté et n'accepte celle-ci que si elle est unique pour tous les objets d'une même classe de contenu.
  • “ymcenhancedselection” enables a content manager to select pre-defined content nodes under which a secondary location of the object will be automatically stored. As an example, we use this datatype to assign videos to categories, where categories are represented by nodes in the content node tree.
    ymcenhancedselection autorise la personne qui gère du contenu à sélectionner des nœuds de contenus pré-définis sous lesquels un second emplacement de l'objet sera automatiquement stocké. Nous utilisons par exemple ce datatype pour assigner des vidéos à des catégories représentées par des nœuds de l'arborescence de nœuds de contenu.

The datatype that we will create in this article will store dates together with their associated timezones. The date is represented in PHP by the DateTime extension, which comes bundled by default with PHP 5. Because PHP 4 uses 32-bit integers to store dates, it was previously not possible to enter dates before 1902 or after 2038. This limitation spurred the creation of the “ezbirthday” datatype which we actually used as a model for the new "ymcdatetime" datatype. The PHP 5 DateTime class used by our datatype not only extends the date range to many billion years by using 64-bit integers, but also stores timezone information.
Le datatype que nous allons créer dans cet article permettra de stocker des dates ainsi que le fuseau horaire qui leur sera associé. La date est représentée en PHP par l'extension DateTime présente par défaut dans PHP5. PHP4 utilisant des entiers de 32 bits pour stocker les dates, il n'était pas possible d'entrer des dates antérieures à 1902 ou postérieures à 2038. Cette limitation nous a incité à créer le datatype ezbirthday que nous avons utilisé comme modèle pour le nouveau datatype ymcdatetime. La classe PHP5 DateTime utilisée par notre datatype n'accroît pas seulement l'étendue des dates possibles à plusieurs milliards d'années, mais stocke également le fuseau horaire.

Let's take a look at the Object Edit Interface of an object containing two attributes in the screenshot below, both of our “ymcdatetime” datatype. Suppose this object was of a class for car rental bookings. The two “ymcdatetime” attributes would represent the rental period, while additional attributes represent pickup and return stations, client name and car type.
La capture d'écran ci-dessous présente l'interface d'édition des objets dans le cas d'un objet contenant deux fois l'attribut ymcdatetime. Supposons que cet objet soit une instance d'une classe permettant d'effectuer des réservations de location de voiture. Alors que les deux attributs ymcdatetime pourraient représenter la période de location, d'autres attributs pourraient représenter les agences de prise et de dépôt du véhicule, le nom du client et le type du véhicule.

 

Object Edit Interface using attributes of our datatype
L'interface d'édition d'objet utilisant des attributs de notre datatype

Both of the attributes in the screenshot have seven input fields, representing the different elements of a point in time. These input fields are not saved separately inside our content class, but represented in attributes as single DateTime objects.
Les deux attributs présentés par l'image ci-dessus ont chacun 7 champs de saisie représentant les différents éléments du temps. Ces champs de saisie ne sont pas sauvegardés séparément dans notre classe de contenu mais représentés dans des attributs en tant qu'uniques objets DateTime.

Commentaires