Comment gérer fichier texte en tant que base de données en javascript ?

Bonjour,

J’ai créé une page HTML contenant les mini-fiches du personnel d’une entreprise.
Actuellement ça fonctionne presque comme je veux. :slight_smile:

Chaque mini-fiche comprend 3 parties :

1- partie “Nom” :
http://image.clubic.com/00A7007700048544-photo-photo.jpg

  • contient le nom de la personne,
  • pointe vers une page html contenant la fiche détaillée de la personne,
  • affiche, en infobulle, les informations générales sur cette personne.

2- partie “Vignette” :
http://image.clubic.com/00A7007700048546-photo-photo.jpg

  • contient une vignette de la photo de la personne,
  • pointe vers la photo en taille originelle,
  • affiche, en infobulle, les informations générales sur cette personne.

3- partie “Catégorie” :
http://image.clubic.com/00A7007700048548-photo-photo.jpg

  • contient la catégorie de personnel de la personne,
  • pointe vers une page html décrivant cette catégorie,
  • affiche, en infobulle, la liste des stages de cette personne.

Les infobulles sont gérées par un JS que j’ai récupéré sur le Net.

Il risque d’y avoir beaucoup de changements et ces mises à jour doivent pouvoir se faire assez facilement.

Le problème vient du fait que je voudrais ne pas utiliser PHP…
Je pensais donc à un simple fichier texte (ou mieux pour moi : un fichier Excel) contenant toutes les données (données des fiches et données des infobulles) et du code JavaScript allant chercher les données pour créer autant de mini-fiches qu’il y a de lignes dans le fichiers texte pour les afficher dans la page HTML.

Est-ce réalisable ainsi ou faut-il obligatoirement utiliser PHP/SQL ?

Thématique sélectionnée : Création de site Internet
Edité le 24/07/2012 à 03:58

Sans php/sql ?

Je vois une solution autre, qui s’appelle XML+XSLT. L’avantage, c’est que tu peux faire une formule Excel pour générer du code XML. L’inconvénient, c’est que tu as besoin d’un processeur XSLT (Saxon, …) car ceux intégrés dans les navigateurs sont en général à la ramasse.

Remarque, même avec le truc standard des navigateurs, tu dois pouvoir faire des trucs sympas avec des CSS, mais tu vas pécher sur les fonctionnalités avancées et néanmoins utiles de XSLT2.

J’ai du mal à comprendre ce que tu veut dire… Par contre le coup du fichier texte avec javascript, en php c’est possible et bien plus simple couplé à du xml. Par contre pour l’entrée des données, c’est le couple php + sql qui va te prendre la tête, surtout qu’il faut faire plein de verif de sécurité et tout le tralala.

Ou sinon, tu peut aussi utiliser un framework ou un cms, et crée un module c’est assez simple

Ce que je voudrais en fait, c’est créer une page html (car lisible facilement sur tout PC et autres), mais sans utiliser PHP qui nécessiterait obligatoirement l’installation d’un serveur du genre Apache sur la machine devant lire le fichier.

En effet, ce fichier n’est pas voué à être sur le Net et doit pouvoir être lu par toute machine comme un simple fichier HTML.
Il peut y avoir du JS puisque le JS s’exécute sur la machine en question et non sur un serveur.

Je parle de JavaScript car je crois savoir que c’est un langage de programmation et il serait donc capable de récupérer des données dans un fichier, comme on peut le faire dans une macro VBA sous Excel par exemple.
Si vous voyez une autre solution répondant à mes critères, alors ça me va tout aussi bien. :wink:

Est-ce plus clair ?
Edité le 24/07/2012 à 22:12

Je me répète donc : xml+xslt. Tu peux générer du contenu statique avec. C’est ce que je fais pour générer des pages web avec mes derniers mangas :slight_smile: (du coup, je visionne ça sur le smartphone, sans avoir besoin d’une connexion 3G).

Et en fait, même avec php, tu peux faire ça.
L’idée d’avoir besoin d’un serveur pour faire du php et faussement répandue : tu peux très bien avoir un script php, utilisant une base mysql locale (ou sqllite, et n’importe quel truc embarqué ET simple), générant des fichiers HTML à partir d’une base de données.

Au pire, tu dois aussi pouvoir le faire en Visual Basic, quoique là, je laisse ton côté masochiste faire :wink:

Braiffe :slight_smile: à toi de voir ce que tu connais le mieux.
J’opterais personnellement pour XSLT, puisque c’est finalement assez puissant; mais il faut connaître, et c’est pas forcément synonyme de plaisir de bosser avec.
Si tu connais PHP, essaye en mode statique (ie: un script php, avec smarty pour tes templates HTML), et ça devrait également le faire.

:ouch: Ne faut-il pas obligatoirement un serveur pour interpréter le PHP ?
Ce n’est pas le navigateur qui va l’interpréter et générer la page HTML.

Comment fais-tu pour faire tourner PHP sans serveur (Apache ou autre) ???

Je ne connais… rien ! :frowning: Ni XSLT, ni PHP, ni tout ce dont tu me parles. :peur:

Au fait, j’ai oublié ci-dessus : merci à vous deux pour vos réponses. :oui:

Bah tout comme tu as VisualBasic pour Excel (client), et VisualBasic pour .Net (serveur), tu peux utiliser PHP en ligne de commande.
En gros, tu utilises php.exe (un exécutable classique avec ses dépendances) en lui passant le fichier php d’entrée :


php -f foobar.php

Ensuite, que foobar.php écrive du texte sur la sortie standard ou sur erreur, ou dans un ou plusieurs fichiers, c’est toi qui voit.

Je m’en sert personnellement pour générer du code XML à partir de code PHP généré par une formule dans LibreOffice Calc. Ce même XML est transformé grâce à XSLT via Saxon et Maven (en gros, la grosse artillerie :))

Ensuite, pour le reste, le faire en PHP sera peut-être plus simple pour toi, vu qu’il y a plein de tutoriels.

[edit] par ailleurs, l’utilisation en ligne de commande (ie: php.exe) c’est ce qui est fait si tu installes php en mode cgi-bin.
Edité le 25/07/2012 à 07:35

Oui c’est tout à fait clair !

Mais tes utilisateurs pour avoir les fichiers, ils devront faire quoi ? Si c’est un truc important, ils vont devoir le mettre à jours pour le consulter, et donc le récupérer quelques part ( réseau ? ). Si c’est le cas, autant faire un serv web local. Pour le coup du php, tu peut aussi prendre un combo portable, et mettre tout à jours d’un coup.

Php peut très bien générer des fichier html, des images, etc.

Ils devront simplement me demander de leur donner les fichiers en question (par exemple sur clef USB).

Actuellement c’est : un dossier avec les photographies en taille normale, un dossier avec les vignettes, le JS pour afficher les infobulles et le fichier HTML qui actuellement contient toutes les données bêtement entrées à l’aide de Notepad++.

Je pensais donc qu’il serait possible de donner tout cela, mais avec un fichier HTML différent (ne contenant pas les données), plus un fichier TXT contenant ces données et un JS permettant de générer le fichier HTML complet c’est-à-dire avec les données dedans.

Certes, je pense même que son but premier était de générer des pages HTML.
Mais le code PHP doit forcément être interprété pour générer cette page HTML donc, pour moi, il était évident qu’il fallait forcément installer un “interpréteur”.
Edité le 25/07/2012 à 18:23

Bonjour,

Donc, tu vas donner par mail/clé USB/… les données aux utilisateurs.
A quoi sa sert d’avoir une BDD dans un fichier texte alors?

Pourquoi ne pas te créer un programme complet (avec la BDD complète), qui te permettra de générer des fichiers html statiques de tes fiches.

Enfin, je sais pas trop à quoi sa va servir, mais une appli réseau / web permettra aux utilisateurs d’être indépendant et pas te demander les données. Couplée à une connexion, tu pourras même gérer leur accès.
Edité le 25/07/2012 à 18:25

C’est parce que j’ai déjà un fichier Excel qui contient une bonne partie de ces données. :wink:

Il est vrai que c’est aussi un peu ce que je suis en train de me dire… :icon_biggrin:

Mais là aussi il y a problème : je n’ai jamais réussi à écrire le moindre programme en VB depuis qu’il y a la version .Net (j’étais déjà bien paumé avec la version 6…), sinon c’est sans doute la solution la plus adaptée en effet. :oui:


Il y a une chose que je n'ai pas dite. :peur: C'est que dans un deuxième temps j'envisageai de faire évoluer la page pour que l'utilisateur puisse cocher une case, dans chaque rectangle de la légende affichée en haut de page, pour ne faire apparaître que les catégories correspondantes (par exemple "Direction" et "Secrétariat"). Edité le 25/07/2012 à 18:39

Au passage, tu peux faire la plupart des trucs que tu veux rien qu’avec du statique, ie: html5+css pour l’affichage, javascript pour le dynamisme (avec jquery & co, c’est assez simple de faire de l’ajax, et récupérer du contenu XML/JSON), …

La balle est dans ton camp :slight_smile:
En tout cas, Javascript te permettra de gérer le côté évolution (ie: cocher, …)

(et puis tu as même SQLLite en javascript, si tu veux faire du SQL ^^)

OK.

Merci :jap:

:hello: Bonjour,

Pour info et si tu décides de faire un truc client / serveur sans devoir tout retapper ton fichier de données Excel dans une BDD, sache qu’il existe une librairie PHP pour lire et écrire des fichiers Excel (même les XLSX) : PHPExcel (licence LGPL).

Je la trouve assez simple d’utilisation et surtout très bien documentée.

P.S : De mémoire il me semblait que lire et écrire dans un fichier avec JS c’était pas terrible (utilisation de ActiveX), me trompe-je ?

pitinonoz : tu as le droit de charger un autre document en AJAX. Ensuite, pour écrire des données, là … peut-être qu’html5 permet de faire ça, mais ça ne sera que des modifs locales => bof.
Edité le 26/07/2012 à 16:34

Bon, j’ai tout fait comme tu m’as dit et voilà où j’en suis :

  • puisqu’on ne peut écrire dans un fichier avec du JS, la base de données est écrite indépendemment dans un fichier nommé Donnees.js,
  • la page s’affiche exactement comme je le désire grace à du CSS et grace à du JS qui scanne la BdD et génére les petites fiches,
  • grace à un formulaire j’ai bien une case à cocher dans chacun des rectangles de la légende en haut de page,
  • si dans mon code je coche des cases, je n’ai bien que les fiches des catégories correspondantes qui apparaissent lorsque j’affiche la page.

Bref, tout fonctionne parfaitement… ou presque. :frowning:

En effet, je voudrais que la page soit réactualisée immédiatement lorsque je coche ou décoche une des cases de mon formulaire.
Comment arriver à ce résultat ?

Edité le 01/08/2012 à 16:38

En continuant mes recherches, j’ai trouvé comment appeler une fonction lorsque je coche/décoche une de ces cases.

La question est donc maintenant : comment faire pour que le contenu de la page change, en tenant compte du contenu des cases (cochée ou non cochée), en gardant l’état des cases (il ne faut pas que ça réinitialise l’état des cases) ?
Edité le 02/08/2012 à 02:05

C’est un refresh du même genre que le F5 ou c’est juste d’afficher les données de tes profils sans passer par un lien ?

Si c’est pour garder un état, tu peux poser des cookies en Javascript, et tu as aussi les données locales -> www.alsacreations.com…

A toi de te démerder avec l’événement onload pour le recharger correctement (ie: recocher ce qu’il y a à cocher, etc).

Ben j’avais envisagé deux possibilités (mais je n’ai réussi avec aucune des deux) :

  • soit recharger la page mais le problème c’est qu’il ne faut pas qu’elle se recharge comme à l’origine (il faut tenir compte des cases cochées),
  • soit modifier la page (toujours dans le même but : n’afficher que les fiches correspondant aux catégories des cases cochées) avec un truc genre innerHTML.

Vu que c’est événementiel, tu peux très bien rebalancer l’événement onchange sur les checkbox avec une valeur par défaut. Pour simplifier, avec le pseudo code suivant :

document.onload = function () {
  // chargement des checkbox sélectionnées (cookie, session, etc)
  for (checkbox in checkedBox) {
    onchangeAction(checkbox);
  }
}

Avec onchangeAction() une fonction que tu appelles normalement dans l’attribute onchange de la case à cocher.

Du coup, ce que tu affiches est régénéré à partir de ce que tu as coché précédemment.