Dans le framework Gantry nous utilisons le terme Feature pour signifier un morceau spécifique de fonctionnalité. Les Features sont suffisamment souples pour qu'ils puissent être utilisés pour exécuter presque n'importe quel type de fonctionnement logique dont vous auriez besoin. La classe d'origine GantryFeature contient des méthodes qui peuvent être implémentées pour contrôler comment votre fonctionnalité se comporte.

Ces méthodes sont:

  • isEnabled() - par défaut il récupère son état (d'activation) par l'interrupteur dans l'admin.  Vous pouvez surcharger cette option pour forcer l'activation d'une fonctionnalité sans aucune interaction de l'interface utilisateur.
    Returns - boolean [true | false]
  • getPosition() - Par défaut, cela devient sa position à partir de l'élément position dans l'admin. Encore une fois, vous pouvez remplacer cette valeur pour forcer une position sans aucune interaction de l'interface utilisateur.
    Returns - string [nom de la position actuelle]
  • isInPosition([string $position]) - une méthode pour déterminer si l'élement est situé dans une position donnée.
    Argument - [facultatif] string [le nom de position à être comparé avec la position actuelle du feature] Returns - boolean [true | false] si la position actuelle est identique à l'argument
  • isOrderable() - une méthode qui vaut true par défaut, mais qui peut être remplacée si l'ordre de cette position n'est pas importante.
    Returns - boolean [true | false]
  • setPrefix(string $prefix) - définit un préfixe pour gérer les champs préfixés comme les éléments chaînés.
    Argument - string [préfixe - habituellement le nom de la chaîne principale param]
  • get($param [, $prefixed = true]) - Obtient un paramètre de configuration de la fonctionnalité. Pouvez aussi prendre un préfixe pour plus de spécificité. Argument - string [nom du champ] Argument - [facultatif] boolean [true | false] Returns - mixed [la valeur actuelle du champ]
  • init() - par défaut vide. Est la première méthode appelée lors de l'initialisation d'une fonction. Utilisé pour la configuration ou l'initialisation
  • render() - par défaut vide. Utilisé pour restituer le rendu dans une position particulière
  • finalize() - par défaut vide. Appelée à la fin de la fonction

Toutes les fonctionnalités de base et toute fonctionnalité personnalisée que vous créez, devrait améliorer cette classe GantryFeature. Pour créer une nouvelle fonctionnalité de votre choix, vous devrez simplement créer un nouveau fichier dans votre dossier features/ qui a étendu la classe libraries/gantry/core/gantryfeatures.class.php. Il sera automatiquement repris par le framework gantry et sera traité. Le meilleur moyen de voir ce qu'une fonction peut faire pour vous est d'examiner quelques-unes des caractéristiques de base situées dans le dossier libraries/gantry/features/ .

Fonction ToTop

Premièrement, penchons-nous sur l'une des caractéristiques fondamentales appelés totop.php. Comme vous pouvez imaginer la fonctionnalité totop est destinée à afficher un lien au bas de votre page et de fournir un défilement glissant vers le haut de la page. La partie la plus importante de votre fonction réside dans votre fichier PHP feature utilisé.  Les fonctionnalités de base sont situées dans le dossier libraries/gantry/features/ . Ceux-ci ne doivent jamais être touchés ou modifiés. Si vous souhaitez surcharger le comportement d'une fonction principale, Il suffit de copier la fonctionnalité de base dans votre dossier /templates/[VOTRE_TEMPLATE]/features . Gantry prendra automatiquement votre version du fichier et l'utilisera plutôt que la version par défaut si vous en avez créé un avec le même nom. L'autre partie d'une fonction et qui est totalement facultatif est la section de configuration. Comme avec d'autres parties de Gantry, la configuration est gérée dans template-options.xml. Pour la fonction totop la partie dans template-options.xml ressemble à ceci:

    <fields name="totop" type="chain" label="TOTOP" description="TOTOP_DESC">
    <field name="enabled" type="toggle" default="0" label="SHOW"/>
    <field name="position" type="position" default="copyright-b" label="POSITION"/>
    <field name="text" type="text" default="Back to Top" label="TEXT" class="text-long" />
    </fields>

Ce qui signifie que, dans l'interface administrateur, il va y avoir trois champs fournis. L'un est un interrupteur qui contrôle l'état 'enabled' et le deuxième est un élément de position qui contrôle la position dans laquelle le feature est renvoyé. Le troisième champ est un champ de texte qui vous permet d'entrer dans un texte personnalisé. En exposant ces éléments dans le XML, nous permettons l'interaction avec l'utilisateur. Si vous voulez ajouter de nouveaux éléments dans cette section XML, vous pouvez, et ils vous seront disponibles afin de les utiliser dans la définition de votre fonction PHP.

Ensuite, penchons-nous sur le PHP de cette fonctionnalité:

<?php
/**
 * @version   $Id: totop.php 5520 2012-11-29 17:37:42Z djamil $
 * @author    RocketTheme http://www.rockettheme.com
 * @copyright Copyright (C) 2007 - 2013 RocketTheme, LLC
 * @license   http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
 *
 * Gantry uses the Joomla Framework (http://www.joomla.org), a GNU/GPLv2 content management system
 *
 */
defined('JPATH_BASE') or die();
gantry_import('core.gantryfeature');
/**
 * @package     gantry
 * @subpackage  features
 */
class GantryFeatureToTop extends GantryFeature
{
	var $_feature_name = 'totop';
	function init()
	{
		/** @var $gantry Gantry */
		global $gantry;
		JHTML::_('behavior.framework', true);
		if ($this->get('enabled')) {
			$gantry->addScript('gantry-totop.js');
		}
	}
	function render($position)
	{
		ob_start();
		?>
	<div class="clear"></div>
	<div class="rt-block">
		<a href="#" id="gantry-totop" rel="nofollow"><?php echo $this->get('text'); ?></a>
	</div>
	<?php
		return ob_get_clean();
	}
}

Comme vous pouvez le voir, il y a deux méthodes implémentées dans la définition PHP de la fonction. La première surcharge la méthode par défaut init() et ceci est utilisé pour configurer la fonction. Dans ce cas, nous allons tout simplement l'utiliser pour ajouter un peu de JavaScript qui fournira le défilement régulier. La seconde méthode qui est utilisée est render(). Cette méthode fait actuellement un rendu du lien et du champ texte personnalisé tel que défini dans l'interface administration. Les autres méthodes issues de la classe de base GantryFeature ne sont pas surchargées. Cela signifie que les méthodes standard pour obtenir l'état activé, position, etc sont utilisées et obtiennent leurs données du XML et des paramètres de l'administration. Vous pouvez voir comment les champs XML comme text sont facilement disponibles et sont préfixés par le nom de la fonction, de sorte que vous pouvez simplement utiliser get->("text") pour récupérer la valeur de champ de la chaîne.

 

Jetez un coup d'œil à toutes les fonctionnalités par défaut livrées avec Gantry pour voir comment nous avons obtenu une grande variété de fonctionnalités avec ces caractéristiques.