Nous allons partir d'un exemple pour l'explication.
Ajoutons un champ Source
pour un billet de blog, qui permettra de renseigner une URL externe ayant produit le contenu original.
ALTER TABLE `nos_blog_post` ADD `post_source` VARCHAR(255);
Deux possibilités :
- Déclarer la nouvelle colonne dans les
properties
du model. - Activer le système de cache des
properties
des models.
Pour déclarer votre nouvelle colonne nous allons écouter l'événement qui charge le fichier de configuration du model.
<?php
Event::register_function('config|noviusos_blog::model/post', function(&$config) {
$config['properties']['post_source'] = array(
'default' => null,
'data_type' => 'varchar',
'null' => false,
);
});
- Créez le fichier
local/config/config.php
à partir du fichierlocal/config/config.php.sample
si ce n'est pas encore fait. Décommentez la ligne (ou créez la) ayant la clé
cache_model_properties
et lui assignertrue
:<?php return array( //... 'novius-os' => array( //... 'cache_model_properties' => true, //... ), );
Une fois activé, le système va mettre toutes les properties
des models en cache dans le répertoire local/cache/fuelphp/model_properties/
. Quand une colonne est ajoutée et non déclarée, au premier appel à get()
ou à set()
pour cette colonne, les properties
seront mise à jour avec une requête en base pour lister les colonnes du model.
Warning
Ce mécanisme n'est possible qu'avec les drivers MySQL et MySQLi.
La documentation sur la configuration de Novius OS <api:php/configuration/software>
.
Le formulaire d'ajout / édition d'un billet de blog est définit dans sa configuration CRUD. Pour l'étendre, nous allons utiliser un évènement !
Dans le fichier local/bootstrap.php
(créez-le si nécessaire) :
<?php
Event::register_function('config|noviusos_blog::controller/admin/post', function(&$config) {
// Ajout du champ 'post_source' de type 'text'
$config['fields']['post_source'] = array(
'label' => 'Source originale :',
'form' => array(
'type' => 'text',
'placeholder' => 'http://',
),
);
// Affichage du champ dans le formulaire
// Nous créons une entrée intitulée 'Source' dans le menu de droite
$config['layout']['menu']['Source'] = array('post_source');
});
Le formulaire possède désormais un champ éditable supplémentaire, comme vous pouvez le voir ci-dessous :
Pour la vue, nous créer le fichier local/views/apps/noviusos_blognews/front/post/content.view.php
<?php
// On inclut le fichier d'origine (qui affiche le contenu)
include APPPATH.'/applications/noviusos_blognews/views/front/post/content.view.php';
// On rajoute la source à la fin
if (!empty($item->post_source)) {
?>
<p class="blognews_source">
<?= __('Source:') ?>
<a href="<?= htmlspecialchars($item->post_source) ?>">
<?= htmlspecialchars($item->post_source) ?>
</a>
</p>
<?php
}