Ce tutoriel explique comment créer un calendrier mobile basé sur HTML5 pour suivre les conférences et les événements organisés sur des téléphones iOS et Android à l'aide d'une version mobile de dhtmlxScheduler (open source, GPL). À la fin, les utilisateurs pourront ajouter et modifier des événements, sélectionner l'emplacement de la conférence sur Google Maps et voir les événements sous forme de vues par jour, par mois ou par liste..
La démo finale inclut le calendrier des événements (nous l'appellerons également planificateur) qui affiche les événements dans trois vues standard: liste, jour et mois. Alors que l'utilisateur final ajoute, supprime ou édite des événements, l'application Calendrier enregistre les modifications apportées au serveur et met à jour la base de données. La démonstration détecte également automatiquement les paramètres régionaux utilisés et adapte l'interface du calendrier en conséquence. L’utilisateur final peut définir le lieu de l’événement sur Google Maps de deux manières: en tapant l’adresse ou en la pointant sur Google Maps..
Tout d’abord, téléchargez le dernier package de la version mobile de dhtmlxScheduler. Il est basé sur le framework DHTMLX Touch et distribué sous une licence open source (GNU GPL).
Le planificateur DHTMLX mobile a une architecture dite multi-vues. Il affiche un ensemble d'écrans qui basculent entre eux. Chaque écran est une vue unique où vous pouvez ajouter n’importe quel contenu. Par défaut, le planificateur contient les vues suivantes:
Les vues prédéfinies sont personnalisables (vous pouvez trouver les définitions par défaut dans la documentation). En outre, il est possible d’ajouter de nouvelles vues personnalisées..
Commençons par les fichiers de code requis pour afficher le planificateur mobile sur une page: dhxscheduler_mobile.js et dhxscheduler_mobile.css.
Ajoutez le code suivant à votre page:
dhx.ready (function () dhx.ui.fullScreen (); dhx.ui (vue: "ordonnanceur", id: "ordonnanceur"););
Voici ce que font ces lignes de code:
dhx.ready ()
function garantit que le code placé à l'intérieur est appelé après l'analyse complète de la page, ce qui la protège des erreurs potentielles. C'est optionnel mais je vous encourage à l'utiliser.dhx.fullScreen ()
active le mode plein écran.dhx.ui ()
est un constructeur d'objet pour le planificateur (utilisé dans la bibliothèque DHTMLX Touch).vue: "ordonnanceur"
- définit le composant à rendre ('ordonnanceur' est le nom codé en dur de l'ordonnanceur mobile).identifiant
est un paramètre facultatif qui définit l'ID d'objet. Nous avons spécifié ce paramètre comme nous allons nous référer à cet objet plus tard.Après avoir inclus les fichiers requis et ajouté le code ci-dessus, le calendrier est affiché sur une page:
Le planificateur a une interface utilisateur nette et simple pour que vous puissiez l'utiliser telle quelle. Il est suffisamment flexible pour que vous puissiez configurer son apparence pour répondre à vos besoins de conception, si vous le souhaitez..
Pour charger des données dans le calendrier, nous allons utiliser le charge()
méthode. Comme nous allons charger les données du serveur, nous devrions définir le seul paramètre (le chemin du script du serveur)..
Pour permettre la sauvegarde des données sur le serveur, nous devons définir un paramètre supplémentaire dans le constructeur d'objet. - enregistrer
. Nous devons également spécifier le même script côté serveur que celui spécifié dans charge()
méthode.
dhx.ui (view: "ordonnanceur", id: "ordonnanceur", enregistrer: "data / data.php"); $$ ("ordonnanceur"). load ("data / data.php");
Pour faire référence au planificateur par son identifiant, nous utilisons le $$ ("ordonnanceur")
record.
Pour faire référence aux vues du planificateur (ou éléments de vues), vous devez écrire une chaîne d'héritage de propriété de dépendance complète: $$ ('ordonnanceur "'). $$ ('view_id'). $$ ('viewElement_id')…
Vous pouvez vérifier les identifiants d'éléments dans la documentation associée.
le data.php Le fichier contient la logique de communication client-serveur à intégrer avec le côté serveur. Pour définir la logique, nous allons utiliser un assistant spécial, dhtmlxConnector, qui implémente toute la routine (il existe des versions pour Java, .NET, PHP et ColdFusion, et il est libre de l'utiliser avec les widgets de l'interface utilisateur dhtmlx). Vous pouvez obtenir plus de détails sur l’utilisation de dhtmlxConnector ici.
Nous allons utiliser la version PHP et créer le code suivant dans le data.php fichier:
render_table ("events_map", "event_id", "start_date, end_date, event_name, details, location_event, lat, lng"); ?>
Les lignes du code font ce qui suit:
Dans le package de démonstration ci-joint, vous pouvez trouver le fichier de vidage de la base de données 'schedulertest'.
À la fin de cette étape, nous avons un calendrier contenant nos données de démonstration:
Avec cette étape, nous ferons en sorte que notre calendrier puisse s’adapter à une langue et à une région.
Tout d’abord, nous devons spécifier un objet de paramètres régionaux (dans la bibliothèque, il porte le nom codé en dur). - 'lieux') qui définira toutes les étiquettes utilisées dans le calendrier.
Nous allons créer un objet dans un fichier séparé pour ne pas "surcharger" le fichier .html principal. Le fichier ressemblera à ceci:
var locales = "de": …, "en": …,…
Pour voir la version complète du 'lieux' objet, ouvrez le locales.js fichier inclus dans le dossier 'codebase' du package de téléchargement. Dans notre démo, nous avons inclus les paramètres régionaux pour seulement deux langues (anglais et allemand) à titre d'exemple. Si nécessaire, vous pouvez ajouter les paramètres régionaux de toute autre langue dans ce fichier..
Ensuite, nous incluons le locales.js fichier sur la page:
Ensuite, ajoutez le code suivant au fichier html:
// place ce code au tout début de la page et non dans la fonction dhx.ready () var locale = (navigator.language || navigator.systemLanguage || navigator.userLanguage || 'en'). substr (0, 2) .toLowerCase (); if (! locales [locale]) locale = 'en'; scheduler.locale.labels = locales [locale]; dhx.Date.Locale = locales [locale] .calendar;
Les lignes du code font ce qui suit:
scheduler.locale.labels
définit les paramètres régionaux pour les étiquettes communes dans le planificateur.dhx.Date.Locale
définit les paramètres régionaux pour les calendriers utilisés dans le planificateur.Le calendrier avec des paramètres régionaux allemands ressemble à ceci:
Ne serait-il pas formidable que les utilisateurs puissent voir l'endroit où se déroule un événement? Voici la liste des étapes nécessaires pour offrir une telle opportunité dans votre application:
Nous commençons par créer une vue Cartes. Pour notre première étape, nous inclurons un fichier supplémentaire sur la page:
Ensuite, nous devons ajouter une nouvelle vue qui affichera Google Maps. La bibliothèque DHTMLX Touch possède le 'Google Map' composant qui facilite l'intégration avec Google Maps (documentation connexe).
Voici notre vue Google Maps:
scheduler.config.views.push (id: "locationView", lignes: [vue: "barre d'outils", css: "dhx_topbar", éléments: [vue: 'bouton', entréeWidth: 100, css: "annuler" , étiquette: scheduler.locale.labels.icon_back, cliquez sur: "$$ ('ordonnanceur'). $$ ('vues'). back ()"], view: "googlemap", id: "mymap" ]);
Quelques explications sur le code ci-dessus:
scheduler.config.views.push
commande ajoute une nouvelle vue à la collection multi-vues du planificateur existante.lignes: []
organise les éléments verticalement. Chaque objet est une ligne séparée. La vue consiste en une barre d’outils et Google Maps.$$ ('ordonnanceur'). $$ ('vues')
fait référence à un objet à vues multiples. La méthode back () bascule la vue multiple vers la vue précédemment active.La vue Carte ressemblera à ceci:
Nous devons maintenant ajouter un bouton dans la barre d’outils. La vue la plus appropriée est celle qui affiche les détails de l'événement sélectionné..
// place ce code après le bloc 'localisation' (étape 4) scheduler.config.selected_toolbar = [view: 'button', inputWidth: scheduler.xy.icon_back, css: "cancel", id: "back", aligner : "left", étiquette: scheduler.locale.labels.icon_back, view: 'button', width: 100, id: "location", aligner: "right", étiquette: scheduler.locale.labels.label_location, cliquez sur : "showLocation", // notre nouveau bouton view: 'button', largeur: 70, id: "edit", align: "right", label: scheduler.locale.labels.icon_edit];
Le code ci-dessus est la définition par défaut de la barre d’outils (vous le trouverez dans la documentation de la bibliothèque) et notre nouveau bouton nommé Emplacement.
Lorsque nous localisons notre application, tous les libellés que nous ajoutons doivent être nommés d’une manière ou d’une autre et ajoutés à la liste. locales.js fichier. Par exemple, nous allons maintenant ajouter un bouton portant le nom "Emplacement". Donc, dans le locales.js fichier on ajoute un paramètre label_location: "Lieu"
puis définissez l'étiquette d'attribut du bouton sur scheduler.locale.labels.label_location
valeur.
L'attribut click définit le nom d'une fonction de gestionnaire qui sera appelée lors d'un clic sur un bouton..
Voici à quoi devrait ressembler l’écran avec les détails de l’événement, maintenant que nous avons ajouté le paramètre Emplacement bouton:
Avant de passer au code principal, ajoutons à la page une variable nommée "marqueur" et affectons-la à l'instance de marqueur Google Maps. Nous définissons cette variable comme globale car nous n'avons besoin que d'un seul marqueur sur la page (nos événements ne doivent avoir qu'un seul emplacement)..
// place ce code au tout début de la page var marker = new google.maps.Marker ();
La fonction exécutable, ou le gestionnaire 'onClick', contient le code suivant:
function showLocation () if (marker! = null) / * affiche la vue multiview * / $$ ("ordonnanceur"). $$ ("locationView"). show (); / * nécessaire pour redimensionner google map * / $$ ("planificateur"). $$ ("locationView"). resize (); / * données d'événement * / var eventId = $$ ("ordonnanceur"). getCursor (); var item = $$ ("planificateur"). item (eventId); / * LatLng point * / var point = new google.maps.LatLng (item.lat, item.lng); var map = $$ ("ordonnanceur"). $$ ("mymap"). map; map.setZoom (6); map.setCenter (point); google.maps.event.clearListeners (map, "click"); marqueur.position = point; marker.map = map; marker.title = item.event_location; marker.setMap (carte); ;
Encore une fois, laissez-moi vous expliquer ce que font ces lignes de code:
getCursor ()
La méthode retourne l'élément actuellement sélectionné. Il existe une seule exception: lorsque vous supprimez un événement, le planificateur supprime la sélection mais conserve le curseur et pointe sur l'événement inexistant. Attention à ça!$$ ("ordonnanceur"). $$ ("mymap")
fait référence à la vue 'googlemap'. La propriété "map" renvoie l'objet de Google Maps.Pour ajouter des informations de localisation à l'écran de prévisualisation, nous devons redéfinir le modèle d'écran par défaut. Pour que nous n'ayons pas à réécrire le modèle entier (qui est plutôt volumineux), nous allons utiliser un truc:
var default_temp = scheduler.templates.selected_event; scheduler.templates.selected_event = fonction (obj) var html = default_temp (obj); if (html! = "") html = html.replace (/<\/div>$ /, ""); html + = ""+ scheduler.locale.labels.label_location +""; html + =""+ obj.event_location +""; html + ="
Voici ce que nous avons fait avec le code ci-dessus:
default_temp
variable contient le modèle par défaut de l'écran.'event_text'
est la classe CSS prédéfinie utilisée dans le modèle par défaut, elle est utilisée pour uniformiser les informations d’événement affichées..scheduler.locale.labels.label_location
est l'étiquette que nous avons ajoutée à l'étape précédente ('Location', dans les paramètres régionaux anglais).Maintenant, l’écran d’aperçu ressemble à ceci (avec les informations de localisation ajoutées):
Maintenant, notre application peut afficher l'emplacement d'un événement. Mais qu'en est-il de la modification de l'emplacement de l'événement ou de la définition de l'emplacement pour de nouveaux événements??
Nous devons maintenant permettre aux utilisateurs de définir / modifier le lieu de l'événement et fournir deux manières différentes de taper l'adresse dans la saisie de texte et de pointer directement sur la carte. Voici ce que nous devons faire:
Nous devrions ajouter au moins deux contrôles au formulaire de modification d'événement: l'un est une entrée de texte pour taper l'adresse de l'événement et le second contrôle peut être un bouton, de sorte qu'en cliquant dessus, l'utilisateur peut ouvrir la carte et définir le point à droite. Sur la carte.
Nous allons prendre le formulaire d'édition par défaut, puis ajouter les éléments mentionnés (la liste des contrôles disponibles):
scheduler.config.form = [vue: "texte", libellé: scheduler.locale.labels.label_event, id: "texte", nom: 'texte', vue: "texte", libellé: scheduler.locale. labels.label_details, id: 'details', view: "datetext", libellé: scheduler.locale.labels.label_start, id: 'date_début', nom: 'date_début', dateFormat: scheduler.config.form_date, view: "datetext", étiquette: scheduler.locale.labels.label_end, id: 'date_fin', nom: 'date_fin', dateFormat: scheduler.config.form_date, vue: "bascule", id: 'allDay', label: "", options: [valeur: "0", label: scheduler.locale.labels.label_time, valeur: "1", label: scheduler.locale.labels.label_allday], aligner: "droite" , valeur: "0", // sections 'view' personnalisées view: "text", libellé: scheduler.locale.labels.label_location, id: "event_location", view: 'button', id: "setLocation ", libellé: scheduler.locale.labels.label_locate, cliquez sur" setLocation ", view:" text ", libellé:" Latitude ", id:" lat ", caché: true, view:" text ", label: "Longitude", id: 'lng', caché: true];
Nous venons d'ajouter cinq nouveaux éléments au formulaire de modification d'événement:
id: "event_location".
id: "setLocation"
). L'élément a l'attribut 'click' qui nous permet de lui attribuer une fonction de gestionnaire d'événements 'onclick' (nous l'avons nommé "setLocation").id: "détails"
). C'est un champ entièrement optionnel. Nous l’ajoutons simplement pour donner aux utilisateurs la possibilité d’ajouter des notes sur les événements à venir. Le champ contient le paramètre prédéfini associé dans l'objet de paramètres régionaux..Nous avons maintenant un formulaire d’ajout / modification d’événement comme celui-ci:
Avant de spécifier la fonction exécutable pour l’entrée, nous devons définir un événement qui déclenchera l’appel de la fonction. La bibliothèque nous permet d’utiliser des événements intégrés ou n’importe quel événement HTML natif. Nous avons choisi le 'onFocusOut'
événement qui se produit après qu'un élément perd le focus.
Pour attacher l’événement à l’entrée, nous allons ajouter la commande suivante au dhx.ready (function () …
une fonction:
dhx.event ($$ ('ordonnanceur'). $$ ("emplacement_événement"). $ view, "focusout", setPlaceCoordinates);
dhx.event
est un assistant qui attache une fonction de gestionnaire d'événements pour un élément HTML.$$ ('ordonnanceur'). $$ ("emplacement_événement")
fait référence à l'entrée. $ voir
renvoie l'objet de vue.setPlaceCoordinates ()
la fonction prendra une adresse saisie par l'utilisateur, détectera ses coordonnées (pour la sauvegarder dans le DB) et affichera le marqueur d'adresse sur la carte.le setPlaceCoordinates ()
function a l'implémentation suivante:
fonction setPlaceCoordinates () if (marqueur! = null) var eventId = $$ ("ordonnanceur"). getCursor (); var geocoder = new google.maps.Geocoder (); var address = $$ ('scheduler'). $$ ("event_location"). getValue (); if (adresse! = "") geocoder.geocode ('adresse': adresse, fonction (résultats, statut) si (statut == google.maps.GeocoderStatus.OK) $$ ('programmateur'). $$ ("lat"). setValue (résultats [0] .geometry.location.Xa); $$ ("ordonnanceur"). $$ ("lng"). setValue (résultats [0] .geometry.location.Ya ); else dhx.alert ("Malheureusement, votre position n’est pas trouvée."); if ($$ ('ordonnanceur'). $$ ("lat") == "") $$ ("ordonnanceur" ). $$ ("lat"). setValue (51.477840); $$ ("scheduler"). $$ ("lng"). setValue (-0.001492); $$ ("scheduler"). $$ ("event_location ") .setValue (" Avenue Blackheath Londres, Greenwich, Grand Londres SE10 8XJ, Royaume-Uni "); else if (eventId! = null) var item = $$ (" scheduler "). item (eventId); $$ ('ordonnanceur'). $$ ("emplacement_événement"). setValue (item.event_location);); ;
Considérons l’ordre dans lequel l’interprète parcourt le code du gestionnaire:
$$ ("ordonnanceur"). getCursor ()
commande, l'interprète obtient l'objet de l'événement que le formulaire d'édition est ouvert pour.L'expression conditionnelle root if-else vérifie la valeur du champ de texte "Location":
if ($$ ('ordonnanceur'). $$ ("lat") == "") sinon
L'expression conditionnelle permet de vérifier si l'événement en question est stocké dans la base de données ou s'il s'agit d'un nouvel événement (car s'il s'agit d'un événement nouveau, l'interpréteur ne pourrait pas extraire ses coordonnées de la base de données et une erreur se produirait). Si l'événement est nouveau et que la recherche n'a pas été terminée, l'application attribue les coordonnées de l'événement de l'observatoire royal de Greenwich..La fonction exécutable, ou un gestionnaire 'onClick' qui se produit lorsque l'utilisateur clique sur le bouton 'Localiser sur la carte', contient le code suivant:
function setLocation () if (marker! = null) / * affiche la vue multiview * / $$ ("ordonnanceur"). $$ ("locationView"). show (); / * nécessaire pour redimensionner google map * / $$ ("planificateur"). $$ ("locationView"). resize (); var point; var eventId = $$ ("scheduler"). getCursor (); if (eventId! = null) var item = $$ ("ordonnanceur"). item (eventId); / * LatLng point * / point = new google.maps.LatLng (item.lat, item.lng); marker.title = item.event_location; else point = new google.maps.LatLng (51.477840, -0.001492); // les coordonnées de l'observatoire royal de Greenwich marker.title = "Blackheath Avenue London, Greenwich, Grand Londres SE10 8XJ, UK"; var map = $$ ("ordonnanceur"). $$ ("mymap"). map; map.setZoom (6); map.setCenter (point); marqueur.position = point; marker.map = map; marker.setMap (carte); google.maps.event.addListener (map, "click", function (e) var request = emplacement: e.latLng, radius: '1'; service = new google.maps.places.PlacesService (map); service.search (demande, fonction (résultats, statut) if (statut == google.maps.places.PlacesServiceStatus.OK) this.service.getDetails (référence: résultats [0] .reference, fonction (détails, status) if (status == google.maps.places.PlacesServiceStatus.OK) $$ ('ordonnanceur'). $$ ("lat"). setValue (details.geometry.location.Xa); $$ (' planificateur '). $$ ("lng"). setValue (details.geometry.location.Ya); marker.title = details.formatted_address; marker.position = e.latLng; marker.map = map; marker.setMap (map ); $$ ('scheduler'). $$ ("event_location"). setValue (marker.title);););); ;
Les lignes du code font ce qui suit:
$$ ("ordonnanceur"). $$ ("mymap")
fait référence à la vue 'googlemap'. La propriété map renvoie l'objet de Google Maps.google.maps.event.addListener ()
Cette commande associe une fonction permettant de gérer les clics effectués par l’utilisateur sur la carte. Voir les détails de l'API utilisée dans les services Web de l'API Google Mas..Un dernier point à mentionner: à cette étape, nous ajouterons une fonction permettant de gérer les clics sur les cartes. Mais si l'utilisateur ne visualise que l'emplacement d'un événement, il ne devrait pas avoir la possibilité de le modifier (étape 5). Donc, avec l'ajout du listener 'click' dans la fonction setLocation, nous allons le désactiver pour le mode 'preview' (la fonction showLocation).
Ajoutez cette commande au code existant du showLocation ()
une fonction:
function showLocation () google.maps.event.clearListeners (map, "click");…;
C'est la fin de ce tutoriel! Maintenant, vous pouvez télécharger le dernier package de démonstration pour voir comment tout fonctionne et s’intègre dans le calendrier des événements que nous avons créé..
Avec l'utilisation croissante des téléphones mobiles, il n'est pas nécessaire de dire à quel point il est important de disposer d'une version mobile d'un site Web ou d'une application. Si vous avez besoin d'un calendrier pouvant être visualisé et modifié en ligne sur vos téléphones, alors la version mobile de dhtmlxScheduler peut vous faire gagner beaucoup de temps, car elle offre une interface utilisateur prête à l'emploi et un ensemble de fonctionnalités de base. La licence open source GNU GPL vous permet d’utiliser le planificateur gratuitement sur des sites Web et des applications internes..