Icon

Partager Envoyer

(Document)

Composants pour la représentation des contenus

Plusieurs composants utiles sont disponibles pour personnaliser la représentation des contenus de l'application : ces composants sont utilisés dans les vues.

A faire : tous les exemples fournis dans ce document doivent être commentés.
 

Inclusion d'une carte (Javascript)

Les données cartographiques ou géolocalisées d'une collection peuvent être affichées sur une carte à l'aide de la bibliothèque Javascript leaflet.js. Cette bibliothèque dont le code est ouvert est disponible à l'adresse https://leafletjs.com/ et peut utiliser les tuiles du projet OpenStreetMap comme fond cartographique. Ses fichiers se trouvent dans le dossier /assets/js/vendor/leaflet/.

La biblothèque leaflet.js peut être utilisée soit à travers une bibliothèque externe pour CodeIgniter (comme celle fournie à titre d'exemple dans libraries/ qui fait office de wrapper), soit directement à l'aide de code PHP+Javascript intégré aux fichiers contrôleur et vues de l'application.

La vue par défaut des contenus (/application/views/data/view.php) contient un exemple élaboré de ce type d'intégration : la carte des données géolocailsées de la collection, centrée sur le contenu affiché, est chargée grâce à un appel AJAX de la méthode localize() du contrôleur /application/controllers/Data.php. Cette fonction charge la vue /application/views/data/localize.php et affiche sa sortie au début la balise #body-data de la page grâce à la fonction jQuery prepend().

L'appel AJAX est déclenché automatiquement au chargement de la page lorsque le datatype du contenu est un lieu (Place) ou manuellement, en cliquant sur le bouton #localizeBtn, dans les deux cas par l'ajout de code Javascript à l'en-tête de la page (variable spéciale $additionalDocumentReadyJS).

En outre, un formulaire unique d'ajout/édition des propriétés cartographiques (Latitude, Longitude et Zoom) est proposé à l'utilisateur : celui-ci est généré par la méthode edit_geo_properties() du contrôleur /application/controllers/Data.php à l'aide de la vue /application/views/data/edit_geo_properties.php.

Un exemple plus simple est fourni dans la vue inutilisée /application/views/data/Minimap.php : celle-ci affiche les marqueurs des données géolocalisées de la collection d'un contenu sur une mini-carte à côté de l'icône du contenu. La carte est générée grâce à la vue /application/views/data/small_map.php.

Veuillez noter qu'une carte générée avec Leaflet peut poser des problèmes d'affichage lorsqu'elle se trouve dans un modal.

Graphes (Javascript+JSON)

Les graphes utilisées dans l'application sont générées à l'aide de la bibliothèque de visualisation de données Open source vis.js Cette bibliothèque utilise le canevas HTML 5.
Elle est disponible sous licence MIT et Apache 2.0 à l'adresse http://visjs.org/

Pour inclure un graphe, vous devez commencer par charger les fichiers de vis dans l'en-tête :

$view_data['jsfiles']=array('vis.js');
$view_data['cssfiles']=array('vis.css');

$this->load->view('Head',$view_data);

Une fois cette opération effectuée, il reste à construire le graphe.

Il faut lui transmettre en paramètres un JSON spécialement formaté qui liste les contenus (nodes) et les relations (edges) à afficher.

Un tel JSON peut être obtenu pour une collection en faisant appel à la méthode view_as_json() du contrôleur /applications/controllers/Collections.php :

Dans le contrôleur lui-même (la méthode afifche directement le JSON en sortie) :

//Retrieve JSON of collection and assign it to $json for use in view:
ob_start();
$this->view_as_json($product->id_collection,0);
$this->view_data['json']=ob_get_contents();
ob_end_clean();

Dans une vue :

//Eviter les erreurs de certificat avec https
$arrContextOptions=array(
    "ssl"=>array(
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    ),
);
//Obtenir le JSON
$json=file_get_contents(base_url('collections/view_as_json/'.$id_collection.'/0/relations/'.$id_type_relation),false,stream_context_create($arrContextOptions));
//Eviter les erreurs dues à la présence de code HTML :
$json=strip_tags($json)


Les paramètres transmis pour construire le JSON d'une collection sont :
—l'identifiant de la collection (entier) ($id_collection)
—optionnel ; type de graphe (entier) : des relations (0) / de la hiérarchie (1)
—optionnel : objet à mettre en évidence (chaîne) (data|relations)
—optionnel : identifiant du datatype à mettre en évidence (entier) ($id_type_data)

Pour terminer, la construction d'un graphe minimal se fait dans la vue (après la balise <body>) à l'aide du code minimal suivant :

<!-- conteneur div du graphe -->
<div id="myNetwork" style="width:100%;height:475px;z-index:9999;"></div>

<script>
// Fonction à appeler quand l'API Vis.js est chargée :
function draw() {
        var nodes = null;
        var edges = null;
        var DIR = '<?=base_url();?>assets/uploads/<?=ENVIRONMENT;?>/icons/'; //Dossier des icônes à utiliser (en option)

        //Inclusion du JSON de la collection
        <?=$json;?>

        // Création et peuplement du graphe
        var container = document.getElementById('myNetwork');
        var data = {
          nodes: nodes,
          edges: edges
        };

        var options = {
          //Ajouter les options pour l'affichage du graphe ici...
        }

        myNetwork = new vis.Network(container, data, options);
}

//Affichage du graphe
draw();
</script>

 

Notez qu'une variable $json contenant le code approprié sera automatiquement disponible dans les vues personnalisées que vous créez pour une collection et dont le nom inclut hierarchy (pour une graphe de la hiérarchie) ou graph (pour une graphe des relations). Pensez à renseigner le permalien des collections concernées pour charger cette vue.

 

Graphe des relations

La construction d'une graphe des relations est similaire à celle d'une graphe de la hiérarchie, avec une valeur de 0 pour le deuxième paramètre de la méthode view_as_json(). Pour un exemple complet, consultez le code de la vue /application/views/relations/view.php qui inclut une graphe mettant en évidence la relation affichée et ses termes.
 

Graphe de la hiérarchie des contenus

La construction d'une graphe de la hiérarchie est similaire à celle d'une graphe des relations, avec une valeur de 1 pour le deuxième paramètre de la méthode view_as_json(). Consultez par exemple le code de la vue /application/views/collections/chora-documentation.php qui inclut une graphe de la hiérarchie des contenus de la collection contenant la présente documentation.

Liste des fichiers attachés

La liste des fichiers attachés est préparée dans les contrôleurs des collections, contenus, relations et événements.
Pour un exemple générique l'utilisant, référez-vous à la vue /application/views/data/view.php.
Pour un exemple complet (qui génère la liste dans la vue et formate celle-ci avec un affichage personnalisé (sous forme de vignettes), voyez /application/views/data/Product.php.
 

Liste des relations

Note : il est recommandé d'afficher la liste des contenus cible des relations, plutôt que les relations elles-mêmes (celles-ci peuvent en effet ne pas avoir de libellé, de description ou de datatype définis, ces informations étant optionnelles).

Pour un exemple d'affichage de la liste des contenus en relation, veuillez vous référer à la vue /application/views/data/view.php
 

Liste des contenus enfants

Dans l'exemple suivant, la liste des contenus enfants est générée en utilisant la vue /application/views/data/list_child_data_textonly.php :
 

<?php
$this->view_data['child']=$child=$this->DataModel->get_child($id_data);
$this->view_data['nb_children']=$nb_children=$this->DataModel->count_child($id_data);
if (isset($child) && $child!='' && $nb_children>=1) {
      echo '<div class="clear">';
      echo '<h2 id="children">'.$this->lang->line('lib_read_next');
      echo ' <small><span class="badge badge-pill badge-info" title="Number
       of child data"> '.$nb_children.' </span></small>';
      echo '</h2>';
      echo '<div class="container">';
      $this->load->view('data/list_child_data_textonly.php',$this->view_data);
      echo '<p><br/></p>';
      echo '</div>';
      echo '</div>';
}
?>

 

Liste des commentaires

La liste des commentaires d'utilisateurs est générée dans les contrôleurs des collections, contenus, relations et événements.

Chaque commentaire d'utilisateur est attaché à un objet (une collection, un contenu, une relation ou un événement), identifié par un identifiant de type d'objet (10=collection, 11=data, 12=relation, 13=événement) et un identifiant d'objet (id_collection de la collection / id_data du contenu / id_relation de la relation / id_event de l'événement).
Ce système permet d'afficher tous les commentaires enregistrés dans une collection, ou seulement ceux d'un contenu/d'une relation.

La bibliothèque interne /application/libraries/Hierarchy.php est utilisée déterminer quelle est la position du commentaire dans les fils de discussion (commentaires de premier niveau, réponses à un commentaire...)

Par défaut, les commentaires de premier niveau (qui peuvent correspondre à un nouveau fil de discussion) possèdent un titre. Les réponses à des commentaires n'en ont pas.

Enfin, la liste des commentaires est accompagnée d'un formulaire d'ajout de commentaire qui tient compte de l'authentification (le droit d'ajout de commentaire / add_comment est requis). Ce formulaire utilise AJAX lorsque cela est possible.

Pour pouvoir ajouter un commentaire, l'utilisateur devra renseigner un CAPTCHA. Ce CAPTCHA est construit à partir d'une liste de questions/réponses éditables définie dans un tableau distinct pour chaque langue disponible dans l'application.
Les listes de questions-réponses se trouvent dans le fichier de configuration /application/config/captchas.php.

Pour voir un exemple complet de l'inclusion d'une liste des commentaires d'utilisateurs, vous pouvez consulter le code de la vue /application/views/data/view.php.
 

Mini-chat (Javascript)

Un mini-chat écrit en Javascript est fourni avec les profils publics d'utilisateurs.
Pour inclure celui-ci dans une vue, il suffit de charger les fichiers Javascript, Css et de démarrer la session utilisateur comme suit (avant le chargement de la vue de l'en-tête) :
 

@session_start();
if( !isset( $_SESSION['chatusername'] )  || !isset( $_SESSION['username'] )  ){
        $_SESSION['chatusername'] = $this->session->userdata('login');
        $_SESSION['username'] = $this->session->userdata('id_user');
}
$this->view_data['css_files']=array (
        base_url().'assets/css/chat/screen.css',
        base_url().'assets/css/chat/chat.css'
);
$this->view_data['js_files']=array (
        base_url().'assets/js/chat/chat.js',
);
$this->load->view('Head',$this->view_data);


Notez que la dernière ligne n'est présente que pour référence et se trouve probablement déjà dans le code de la vue que vous éditerez.

Une fois le code du mini-chat présent dans une vue, tout message adressé à l'utilisateur identifié dans la session chatusername provoquera l'affichage du mini-chat si ce dernier est entrain de consulter la page correspondante (le mini-chat est masqué par défaut).
 
Voici un exemple de bouton pour faire apparaître le mini-chat et lancer une discussion avec un autre utilisateur (ici identifié par <id_user> et dont le pseudonyme affiché dans le chat sera <usr_login>) :
<a href="#" class="btn btn-info" onclick="javascript:chatWith('<id_user>','<usr_login>');">Chat</a>

 

Script de génération d'un sommaire (Javascript)

La vue /application/views/data/view.php fait appel à un javascript qui génère un sommaire à partir des titres présents dans la description du contenu affiché.
Pour ce faire, la fonction toc.js(), présente dans le fichier /assets/js/vendor/aurorae/toc.js qui a été chargé dans l'en-tête, est appelée ainsi :

        //Build toc of content only if there is at least a h2 element
        if ($('#data').children('h2').html()!=undefined) {
            toc('toc',2,2,6,'<?=$this->lang->line('lib_table_of_contents');?>','data');
        } else {
            $('#toc').hide();
        }


Le sommaire est créé à l'intérieur de la balise identifiée par le premier paramètre transmis à la fonction : 'toc'
Cette balise doit donc être présente plus haut dans la vue :

        <div id="toc"></div>

Voici la description de la fonction de génération du sommaire :
 

toc(id, niveau du sommaire, niveau de titre min.,niveau de titre max., libellé du sommaire, identifiant DOM du conteneur à parcourir pour générer le sommaire)

Paramètres pour la génération d'un sommaire

id (toc)

Obligatoire. Chaîne de caractères (String). Valeur de l'attribut id de l'élément où sera générée la table des matières.

niveau du sommaire

Entier compris entre 1 et 6 correspondant au niveau du titre (h1, h2, h3, etc.) du sommaire.

niveau de titre min

Entier compris entre 1 et 6 correspondant au niveau supérieur des titres (h1, h2, h3, etc.) à inclure dans le sommaire. Le titre de niveau 1 h1 est réservé au contenu par défaut.

niveau de titre min

Entier compris entre 1 et 6 correspondant au niveau inférieur des titres (h1, h2, h3, etc.) à inclure dans le sommaire. Le niveau minimum est égal à 6.

libellé du sommaire

Chaîne de caractères (en principe traduite) à afficher comme titre du sommaire.

identifiant DOM du conteneur à parcourir pour générer le sommaire 

Chaîne de caractères qui correspond à l'attribut id de l'élément conteneur à parcourir pour extraire les titres du présents dans le sommaire. Par défaut, sa valeur est égale à data qui l'identifiant de la balise div stockant la description du contenu (par exemple, 'main_container' extraierait tous les titres de la page).

 


Ce document a été publié le 2019-01-10 14:27:12. (Dernière mise à jour : 2019-07-11 03:36:50.)




This website uses 'cookies' to enhance user experience and provide authentification. You may change which cookies are set at any time by clicking on more info. Accept
x