Bonjour, je réalise une refonte de mon petit CMS pour l'ensemble de mes projets récurrents et je souhaiterais ajouter une fonctionnalité dans l’ajout et l’édition des Posts
(Articles), en effet l’ensemble des Posts possède la plupart du temps un Titre et un Contenu, mais parfois ces posts possèdes d’autres propriétés comme, une date de début et une date de fin, ou une carte google maps avec une latitude et une longitude…
Je souhaiterais donc réfléchir avec vous à une organisation de code, pour ajouter lors de l'ajout / modification d’un « Post » un Type
de post qui ajouterais des champs.
Ensuite dans ma vue Template/Posts/view.ctp
j’imagine bien inclure un Template/Element/xxx.ctp
en fonction du type du post qui contiendrai la logique d’affichage / mise en page.
Table posts
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| category_id | int(11) | YES | | NULL | |
| type_id | int(11) | YES | | NULL | |
| title | varchar(90) | YES | | NULL | |
| slug | varchar(255) | YES | | NULL | |
| body | text | YES | | NULL | |
| online | tinyint(4) | YES | | NULL | |
| created | datetime | YES | | NULL | |
| modified | datetime | YES | | NULL | |
+-------------+------------------+------+-----+---------+----------------+
En revanche, pour la table types
je n’ai pas trop idées, enfin je pense sauvegarder les données avec serialize()
pour ne pas avoir de limitation dans les champs.
Avez vous une idée d’organisation ou autre pour structurer proprement la champs dynamiques des types de posts.
Sinon on peut s'inspirer de ce que fait wordpress en imaginant une nouvelle table post_meta
qui stocke id, post_id, meta_key, meta_value
ce qui te permettrai d'ajouter autant de champs que tu le souhaite
Merci pour ta réponse Grafikart, je vais regarder la structure MySQL
de Wordpress
plus en detail.
Un post
se retrouve donc avec plusieurs types
(postemeta) et les types contiennent des fields.
En meta_key
je defini le nom du champ ex: start_date
, et en meta_value
la valeur.
Je reviens vers vous après avoir fait deux trois test d’implémentations pour détailler mon organisation.
Alors après avoir regardé Wordpress j’aime bien ce fonctionnement, j’aimerais néanmoins avoir un éclaircissement.
En somme je souhaiterais :
Créer des Types
de posts :
Actu
start_at : datetime
end_at : datetime
tpl_back : /path/to/tpl/back.ctp
tpl_front : /path/to/tpl/front.ctp
partners
latitude : DECIMAL(10, 8)
longitude : DECIMAL(11, 8)
tpl_back : /path/to/tpl/back.ctp
tpl_front : /path/to/tpl/front.ctp
[…]
Ces Types de posts ont des champs mais qui sont propre au post sélectionné, ce sont de types que je créer en fonction du projet.
Ensuite dans l’édition des ces posts en backoffice, j’aurais un fichier .ctp (ou stocké un imput en base de données) qui m’afficherais les champs à compléter propre au post.
Si je comprend bien je dois avoir la key type_id
dans la table posts
pour qu’un post ai un type puis les types doivent avoir une table metas
qui elle contient les champs des types par posts ?
Quelle de relation dois-je utiliser pour bien structurer cette fonctionnalité ?
Tu va voir
post
- id
- content
- type ('post', 'partner', 'point'....)
post_meta
- id
- post_id
- meta_key (lattitude, longitude...)
- meta_value
Les méta disponible par "type" de post seront géré dans ton code et la relation est Post hasMany PostMeta