#1 08/03/2008 10:11:55

VincentAlex
Modérateur
Lieu: Massy (91)
Date d'inscription: 01/10/2007
Messages: 1224

Organisation des pages d'administration de la NB4

Ce sujet à pour vocation d'expliquer comment fonctionne les pages d'administration de la NB4.

Le rendu final des pages www d'administration est réalisé avec Clearsilver intégré dans Fastcgi.

Fonctionnement de ClearCilver :

C'est très simple : Ensemble de donnée + masque Clearsilver => html final

Et c'est le moteur Clearsilver qui se charge de créer le html final, renvoyé au navigateur, à partir de l'ensemble de donnée et du masque.

On retrouve dans :
- l'ensemble de donnée : est un ensemble de chaine de carctère ordonnées plus ou moins hiérarchiquement. L'ensemble de donnée est généralement statique, ce sont les fichiers .hdf, mais peut aussi être enrichi dynamiquement,
- le masque Clearsilver correspond à du code HTML enrichi par des instructions ClearSilver identifiées par la balise suivante <?cs ... ?>

En parcourant le masque, le moteur Clearsilver va généralement subsituer les instructions ClearSilver par le contenu d'une donnée présente dans l'ensemble de donnée. Mais il y a en fait beaucoup plus d'instruction, elles permettent non seulement des subsitutions, mais aussi de réaliser des tests conditionnels, des itérations et même des macros.

Exemple de substitution :
Ensemble de donnée (.hdf) :

Code:

Name.Title = Titre de la page
Name.Aide = Aide de la page truc muche

Masque (.cst) :

Code:

<H1><?cs var:Name.Title ?></H1>
<BR>
<?cs var:Name.Aide ?>

Va donner, une fois le moteur Clearsilver appliqué :

Code:

<H1>Titre de la page</H2>
<BR>
Aide de la page truc muche

Implatation dans la NB4 :

Dans la NB4, on va retrouver :
- l'ensemble des données dans le répertoir /www/fcgiroot/hdf,
- les masques ClearSilver dans le répertoir  /www/fcgiroot/cst,
- le moteur clearsilver est intégré dans le fastcgi présant dans /www/fcgiroot


Intégration de Clearsilver dans fastcgi :
Il faut au préalable avoir installé dans sa toolchain fastcgi, clearsilver et la zbib (elle est nécessaire pour linker clearsilver).

Exemple de code :

Code:

#include <ClearSilver.h>
#include <string.h>
#include <fcgi_stdio.h>
#include <stdlib.h>
#include <stdarg.h>

/* Intégration clearsilver dans fastcgi (ou l'inverse !) */
static int read_cb(void *ctx, char *buf, int buf_len)
{
  return FCGI_fread (buf, sizeof(char), buf_len, FCGI_stdin);
}

static int writef_cb(void *ctx, const char *buf, va_list args)
{    
  FCGI_vprintf(buf, args);
  
  return 0;
}

static int write_cb(void *ctx, const char *buf, int buf_len)
{
  return FCGI_fwrite((void *)buf, sizeof(char), buf_len, FCGI_stdout);
}


int main(int argc, char **argv, char **envp)
{
  unsigned char *query;
  unsigned char fileName[FILENAME_MAX];
  unsigned char *tmp;
  NEOERR *csError;
  
  while (FCGI_Accept() >= 0)
    {
      /* Récupération requette*/
      query = strstr(getenv("REQUEST_URI"), "/openbox4/"); 

      if (query)
    {
      /* On se place derrière /openbox4/ */
      query = query + strlen("/openbox4/");

      if (query[0])
        {
          HDF *hdf = NULL;
          CGI *cgi = NULL;
          
          /* Initialisation structure hdf */
          hdf_init(&hdf);
          
          /* Initialisation cgi */
          cgi_init(&cgi, hdf);
          
          /* Initialisation du wrapping cgi de Clearsilver avec les fonctions */
          /* définies précémdent */
          cgiwrap_init_std(argc, argv, envp);
          cgiwrap_init_emu(NULL, read_cb, writef_cb, write_cb, NULL, NULL, NULL);
          
          /* Ouverture du fichier .hdf correspondant à celui demandé */
          strcpy(fileName, "/www/fcgiroot/hdf/"); 
          strcat(fileName, query);
          strcat(fileName, ".hdf");
          
          csError = hdf_read_file(cgi->hdf, fileName);

          if (!csError)
          {
        strcpy(fileName, "/www/fcgiroot/cst/"); 
        strcat(fileName, query);
        strcat(fileName, ".cst");

            cgi_display(cgi, fileName);
          }
          /* Supression */
          cgi_destroy(&cgi);    
        }
    }
    }
  return 0;
}

Makefile :

Code:

MIPSDIR=/opt/toolchains/uclibc-crosstools/mips-linux
MIPSPREFIX=
CC=$(MIPSDIR)/bin/$(MIPSPREFIX)gcc
AR=$(MIPSDIR)/bin/$(MIPSPREFIX)ar
RANLIB=$(MIPSDIR)/bin/$(MIPSPREFIX)ranlib
STRIP=$(MIPSDIR)/bin/$(MIPSPREFIX)strip
STRIPFLAGS= -s
SSTRIP=$(MIPSDIR)/bin/$(MIPSPREFIX)sstrip
CP=cp
LDFLAGS = -lfcgi -lneo_utl -lneo_cs -lneo_cgi -lneo_utl -lneo_cs -lz -lm -L$(MIPSDIR)/lib
CFLAGS = -static -Os -W  -Wall -Wstrict-prototypes 
CFLAGS +=-I.  -I$(MIPSDIR)/include -I$(MIPSDIR)/include/ClearSilver

EXEC1 = ob4fcgi
OBJS1 = ob4fcgi.o

all: $(EXEC1)

$(OBJS1): *.c  
$(EXEC1) : *.c  

.c.o:
    $(CC) -c $(CFLAGS) $<

$(EXEC1): $(OBJS1)
    $(CC) $(CFLAGS) -o $(EXEC1) $(OBJS1) $(LDFLAGS)
    $(CP) -f ./$(EXEC1) ./$(EXEC1)_unstripped
    $(STRIP) $(STRIPFLAGS) -o ./$(EXEC1)_stripped ./$(EXEC1)
    $(SSTRIP) ./$(EXEC1)

clean:
    -rm -f $(EXEC1)  *_unstripped *_stripped *.o core

Explication : Ce code va lire l'ensemble de donnée et le masque correspondant à ce qu'il y a tout à la fin de la requette, après openbox4 et réaliser le rendu. C'est-à-dire pour une requette http://192.168.1.1/openbox4/test, ce fastcgi va ouvrir l'ensemble de donnée /www/fcgiroot/hdf/test.hdf et le masque /www/fcgiroot/cst/test.cst pour effectuer le rendu final.

Les instructions intéressantes dans ce code, outre l'intégration de ClearSilver dans Fastcgi, sont :  hdf_read_file qui lit un .hdf et cgi_display qui effectue le rendu en lisant un .cst.



Voila pour un premier début !

La suite plus tard !!!

Dernière modification par VincentAlex (14/05/2009 23:58:19)


Environnement de développement : MacOsX/Fedora 12/

Hors ligne

 

#2 08/03/2008 10:25:40

cuagn
Bricoleur de add-on et tatillon GPL
Lieu: Pernes les Fontaines (84)
Date d'inscription: 30/08/2007
Messages: 1927
Site web

Re: Organisation des pages d'administration de la NB4

Et bien on attend la suite avec plaisir.

Je vais de ce pas mettre en oeuvre ce qui est déjà décrit. Merci

PS :

VicentAlex a écrit:

Intégration de Clearsilver dans fastcgi :
Il faut au préalable avoir installé dans sa toolchain fastcgi, clearsilver et la zbib (elle est nécessaire pour linker clearsilver).

une procédure efficace serait utile... wink

Dernière modification par cuagn (08/03/2008 10:28:41)


Desktop : Windows 7 pro
Aspire 1350 : Linux version 2.6.26-2-686 (Debian 2.6.26-21lenny4)

Hors ligne

 

#3 08/03/2008 12:13:49

VincentAlex
Modérateur
Lieu: Massy (91)
Date d'inscription: 01/10/2007
Messages: 1224

Re: Organisation des pages d'administration de la NB4

Ah, tu bloques sur l'ajout de fastcgi, clearsilver et zlib dans la toolchain. Je vais ouvrir un nouveau sujet, pour ne pas poluer celui ci.
J'ai déjà mis à jour le premier message, avec le makefile utilisé pour compiler

Dernière modification par VincentAlex (08/03/2008 12:19:56)


Environnement de développement : MacOsX/Fedora 12/

Hors ligne

 

#4 08/03/2008 13:51:52

cuagn
Bricoleur de add-on et tatillon GPL
Lieu: Pernes les Fontaines (84)
Date d'inscription: 30/08/2007
Messages: 1927
Site web

Re: Organisation des pages d'administration de la NB4

VincentAlex a écrit:

Ah, tu bloques sur l'ajout de fastcgi, clearsilver et zlib dans la toolchain. Je vais ouvrir un nouveau sujet, pour ne pas poluer celui ci.
...

Je ne suis pas encore bloqué.
Mais il est utile de toujours savoir la version qui est intégrée et si le comment est décrit, c'est un gain de temps.

J'ai téléchargé :

fcgi-2.4.0.tar.tar
clearsilver-0.10.5.tar.gz
zlib-1.2.3.tar.gz


Desktop : Windows 7 pro
Aspire 1350 : Linux version 2.6.26-2-686 (Debian 2.6.26-21lenny4)

Hors ligne

 

#5 08/03/2008 14:28:00

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 3174
Site web

Re: Organisation des pages d'administration de la NB4

merci VincentAlex pour cette explication !

tu as signalé que les datasets peuvent être statiques ou dynamiques

voici une petite précision sur comment ça se passe

les fichiers HDF contiennent des datasets, qui sont statiques

on peut les importer en mémoire avec la fonction hdf_read_file comme tu l'as fait remarquer

une fois en mémoire, on peut travailler dessus pour ajouter, supprimer, modifier,... des entrées

on peut également créer un dataset directement en mémoire et le remplir

et finalement on peut exporter le dataset en mémoire vers un fichier avec hdf_write_file

Hors ligne

 

#6 08/03/2008 14:38:39

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 3174
Site web

Re: Organisation des pages d'administration de la NB4

VincentAlex a écrit:

- le masque Clearsilver correspond à du code HTML enrichi par des instructions ClearSilver identifiées par la balise suivante <?cs ... ?>

j'appellerai plutôt ça un template, je ne connais pas de traduction en français qui exprime bien le concept wink

CST = ClearSilver Template

VincentAlex a écrit:

Code:

<H1><?cs var:Name.Title ?></H1>
<BR>
<?cs var:Name.Aide ?>

il est préférable d'utiliser le XHTML maintenant, les principales différences sont des noms de balises en minuscules, et toute balise doit être fermée (<BR> -> <br />)

ça donne alors :

Code:

<h1><?cs var:Name.Title ?></h1>
<br />
<?cs var:Name.Aide ?>

Hors ligne

 

#7 08/03/2008 14:54:53

psolyca
Futur dictateur fou
Lieu: Tours pour août...
Date d'inscription: 30/08/2007
Messages: 798

Re: Organisation des pages d'administration de la NB4

Merci VincentAlex j'avais compris le début mais l'intégration logicielle (fastcgi) me laissait froid vu que je ne suis pas programmeur.


Amorphe sur le développement depuis... pfiou
Veut faire le bêta testeur d'fxmx86... vive la facilité ^^;

Hors ligne

 

#8 08/03/2008 15:05:23

VincentAlex
Modérateur
Lieu: Massy (91)
Date d'inscription: 01/10/2007
Messages: 1224

Re: Organisation des pages d'administration de la NB4

Merci Gounloulf pour tes précisions.

Ok, j'avais traduit en français template par masque et dataset par ensemble de donnée. (je suis un peu défenceur de la langue française)

Et effectivement, on peut manipuler les datasets en mémoire. En rajouter par hdf_set_value, etc, etc. C'est assez puissant !

je voulais y venir, avec une approche didactique, mais je n'ai pas eu le temps ce matin. Tu me coupe l'herbe sous le pied Goundoulf.


Environnement de développement : MacOsX/Fedora 12/

Hors ligne

 

#9 08/03/2008 15:19:19

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 3732

Re: Organisation des pages d'administration de la NB4

une remarque déjà évoquée

Il est nécessaire d'ajouter des librairies et des includes de compléments crosscompilés.

Il faut prendre garde à ne pas les mêler avec ceux du système en faisant l'installation...ni à la toolchains car un écrasement est vite arrivé.

Pour fastcgi j'avais fait des sous directories dans la toolchains et j'ai eu des problèmes (trop de liens ou de niveaux j'ai pas approfondi) jusqu'à ce que j'utilise
/usr/local/mips/lib /usr/local/mips/include.

On avait tenté de définir pour les développeurs  une structure de fichiers commune
pour la toolchains avec des liens symboliques
/opt/toolchains/uclibc-crosstools/mips-linux/

pour les compléments  crosscompilés utiliser comme racine /usr/local/mips donc
/usr/local/mips/lib  et /usr/local/mips/include    éventuellement /usr/local/mips/bin etc...

de ce fait le Makefile devient

Code:

MIPSDIR=/opt/toolchains/uclibc-crosstools/mips-linux
MIPSPREFIX=
MIPS_APPS=/usr/local/mips
CC=$(MIPSDIR)/bin/$(MIPSPREFIX)gcc
AR=$(MIPSDIR)/bin/$(MIPSPREFIX)ar
RANLIB=$(MIPSDIR)/bin/$(MIPSPREFIX)ranlib
STRIP=$(MIPSDIR)/bin/$(MIPSPREFIX)strip
STRIPFLAGS= -s
SSTRIP=$(MIPSDIR)/bin/$(MIPSPREFIX)sstrip
CP=cp
LDFLAGS = -lfcgi -lneo_utl -lneo_cs -lneo_cgi -lneo_utl -lneo_cs -lz -lm -L$(MIPS_CROSS)/lib -L$(MIPSDIR)/lib
CFLAGS = -static -Os -W  -Wall -Wstrict-prototypes 
CFLAGS +=-I.   -I$(MIPS_CROSS)/include/ClearSilver -I$(MIPSDIR)/include
...

D'après les nouvelles règles il vaudrait mieux utiliser :
/opt/toolchains/uclibc-crosstools/bin/xxxx-gcc
avec xxxx la cible déclarée au moent du configure
./configure --target=xxxx

ou lieu de /opt/toolchains/uclibc-crosstools/mips-linux/bin/gcc

le problème c'est que tous les configure ne sont pas uniformisés
donc pour palier à tous les cas il faut faire des liens entre tous les exécutables dans
/opt/toolchains/uclibc-crosstools/bin
dans
/opt/toolchains/uclic-crosstools/mips-linux/bin
sans écraser ceux déjà présents


XP Pro/Fedora 13

Hors ligne

 

#10 08/03/2008 16:04:16

cuagn
Bricoleur de add-on et tatillon GPL
Lieu: Pernes les Fontaines (84)
Date d'inscription: 30/08/2007
Messages: 1927
Site web

Re: Organisation des pages d'administration de la NB4

Bien évidemment, tout cela ne me permet pas pour l'instant d'installer au bon endroit les librairies...

Et si on en profitait ("on" c'est ceux qui savent) pour faire un point à ce sujet qui est l'action 1.2 proposé ICI


Desktop : Windows 7 pro
Aspire 1350 : Linux version 2.6.26-2-686 (Debian 2.6.26-21lenny4)

Hors ligne

 

#11 08/03/2008 16:35:25

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 3732

Re: Organisation des pages d'administration de la NB4

Ce n'était qu'un rappel  de  http://www.neufbox4.org/forum/viewtopic … 1247#p1247

pour installer une application mips dans MIPS_APPS
il faut lancer un configure avec prefix=/usr/local/mips
exemple pour fastcgi

Code:

 ./configure --host=mips-linux  --prefix=/usr/local/mips \
 --disable-nls   \
 CC=/opt/toolchains/uclibc-crosstools/mips-linux/bin/gcc \
 CXX=/opt/toolchains/uclibc-crosstools/mips-linux/bin/g++ \
 CPPFLAGS=-I/opt/toolchains/uclibc-crosstools/mips-linux/include  \
 CFLAGS=" -Os -W -Wall -Wstrict-prototypes -Wshadow -funsigned-char -fno-builtin-strlen -fomit-frame-pointer -ffunction-sections -fdata-sections -funit-at-a-time -I/opt/toolchains/uclibc-crosstools/mips-linux/include"  \
 LDFLAGS="-lm -L/opt/toolchains/uclibc-crosstools/mips-linux/lib"  \
 RANLIB=/opt/toolchains/uclibc-crosstools/mips-linux/bin/ranlib  \
 LD=/opt/toolchains/uclibc-crosstools/mips-linux/bin/ld  \
 NM=/opt/toolchains/uclibc-crosstools/mips-linux/bin/nm  \
 AS=/opt/toolchains/uclibc-crosstools/mips-linux/bin/as  \
 STRIP=/opt/toolchains/uclibc-crosstools/mips-linux/bin/strip  \
 SIZE=/opt/toolchains/uclibc-crosstools/mips-linux/bin/size  \
 AR=/opt/toolchains/uclibc-crosstools/mips-linux/bin/ar

puis faire
(g)make
et
sudo (g)make install

J'ai proposé un cadre commun pour les références. Il est discutable..mais il faut en arrêter un


XP Pro/Fedora 13

Hors ligne

 

#12 14/03/2008 16:41:37

VincentAlex
Modérateur
Lieu: Massy (91)
Date d'inscription: 01/10/2007
Messages: 1224

Re: Organisation des pages d'administration de la NB4

La suite

Le code du fastcgi codé ci dessus permet de réinterpréter les pages déjà existantes. Par exmple http://192.168.1.1/openbox4/6_0 va retourner la page de l'onglet Application.

On peut voir que c'est pas terrible car ni les informations en haut à gauche (version firmware, adresse IP, ...) ni le menu ne sont affichées.

En regardant le source 6_0.cst, on voit qu'elle nécessite des datasets. En regardant, elles sont définie dans menu.hdf. Il faut donc rajouter dans le code précédent la lecture du dataset du menu.

Code:

hdf_read_file(cgi->hdf, "/www/fcgiroot/hdf/menu.hdf");

Le rendu est mieux, mais il manque les valeurs des versions firmware, IP, ... et l'onglet du menu sélectionne n'est pas mis en avant.

En étudiant le menu.cst on voit qu'un dataset Page.Tile est nécessaire mais n'est pas présent ni dans menu.hdf et 6_0.hdf. On va donc ajouter ce dadaset dans le fastcgi.

Code:

hdf_set_value(cgi->hdf, "Page.Name", query);

L'aspect du menu est maintenant correct. Il ne reste plus qu'a ajouter les valeurs des version firmware, IP, ... Il faut donc ajouter les dadasets suivant : Page.infos.FirmwareVersion.CurrentValue, Page.Infos.MACAdress.CurrentValue, Page.Infos.IPAdress.CurrentValue et Page.Infos.NetInfra.CurrentValue. Or, ces données ne sont pas statiques comme les autres, mais dynamique et présente dans la nvram.

L'obtention de ces informations peut s'effectuer en appelant nvram depuis notre fastcgi. Les clef correspondant aux valeurs à récupérer sont : version_mainfirmware, mac_addr, ppp_ipaddr et net_infa.

Dans l'API de Clearsilver, il y a une primitive permettant de lancer un processus externe et d'en récupérer sa sortie standard : filter_create_fd.

Le code suivant permet donc d'obtenir les valeurs de clefs :

Code:

void getNvram(char *data, char *value, int *lg)
{
  pid_t pid;
  int tube[2];
  char cmd[128];
  int i;


  pipe(tube);
  
  close(tube[1]);
  strcpy(cmd, "/bin/nvram get ");
  strncat (cmd, data, 128 - strlen(cmd));

  filter_create_fd(cmd, NULL, tube , NULL, &pid);

  *lg = read(tube[0], value, *lg);
  
  /* Attente terminaison du procesus */
  filter_wait(pid, NULL, NULL);
  
  close(tube[0]);

  /* Nettoyage chaine de caracète lue */
  for (i = 0; i < *lg; i++)
    if ((value[i]=='\r')||(value[i]=='\n'))
      value[i] = '\0';
  value[*lg] = '\0';
 
}

/* Récupération des données en nvram pour affichée dans l'entête */
void entete(HDF *hdf)
{
  char tmp[256];
  int lg;


  lg = 256;
  getNvram("version_mainfirmware", tmp, &lg);
  hdf_set_value(hdf, "Page.Infos.FirmwareVersion.CurrentValue", tmp);
  lg = 256;
  getNvram("mac_addr", tmp, &lg);
  hdf_set_value(hdf, "Page.Infos.MACAddress.CurrentValue", tmp);
  lg = 256;
  getNvram("ppp_ipaddr", tmp, &lg);  
  hdf_set_value(hdf, "Page.Infos.IPAddress.CurrentValue", tmp);
  lg = 256;
  getNvram("net_infra", tmp, &lg);  
  hdf_set_value(hdf, "Page.Infos.NetInfra.CurrentValue", tmp);
}

Une fois le code intégré dans le fastcgi précédant, l'entête de la page est maintenant correctement remplis.

Au final, le code du fastcgi est :

Code:

#include <ClearSilver.h>
#include <string.h>
#include <fcgi_stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <unistd.h>


/* Intégration clearsilver dans fastcgi (ou l'inverse !) */
static int read_cb(void *ctx, char *buf, int buf_len)
{
  return FCGI_fread (buf, sizeof(char), buf_len, FCGI_stdin);
}

static int writef_cb(void *ctx, const char *buf, va_list args)
{    
  FCGI_vprintf(buf, args);
  
  return 0;
}

static int write_cb(void *ctx, const char *buf, int buf_len)
{
  return FCGI_fwrite((void *)buf, sizeof(char), buf_len, FCGI_stdout);
}



/* Pour récupérer des datas dans la nvram */
/* data: Nom de la donnée à récupérer */
/* value: Valeur de la donnée récupérée */
/* lg: Taille de value */
void getNvram(char *data, char *value, int *lg)
{
  pid_t pid;
  int tube[2];
  char cmd[128];
  int i;


  pipe(tube);
  
  close(tube[1]);
  strcpy(cmd, "/bin/nvram get ");
  strncat (cmd, data, 128 - strlen(cmd));

  filter_create_fd(cmd, NULL, tube , NULL, &pid);

  *lg = read(tube[0], value, *lg);
  
  /* Attente terminaison du procesus */
  filter_wait(pid, NULL, NULL);
  
  close(tube[0]);

  /* Nettoyage chaine de caracète lue */
  for (i = 0; i < *lg; i++)
    if ((value[i]=='\r')||(value[i]=='\n'))
      value[i] = '\0';
  value[*lg] = '\0';
 
}

/* Récupération des données en nvram affichée dans l'entête de la page */
void entete(HDF *hdf)
{
  char tmp[256];
  int lg;


  lg = 256;
  getNvram("version_mainfirmware", tmp, &lg);
  hdf_set_value(hdf, "Page.Infos.FirmwareVersion.CurrentValue", tmp);
  lg = 256;
  getNvram("mac_addr", tmp, &lg);
  hdf_set_value(hdf, "Page.Infos.MACAddress.CurrentValue", tmp);
  lg = 256;
  getNvram("ppp_ipaddr", tmp, &lg);  
  hdf_set_value(hdf, "Page.Infos.IPAddress.CurrentValue", tmp);
  lg = 256;
  getNvram("net_infra", tmp, &lg);  
  hdf_set_value(hdf, "Page.Infos.NetInfra.CurrentValue", tmp);
}                     


int main(int argc, char **argv, char **envp)
{
  unsigned char *query;
  unsigned char fileName[FILENAME_MAX];
  NEOERR *csError;
  HDF *hdf = NULL;
  CGI *cgi = NULL;
  

  while (FCGI_Accept() >= 0)
    {
      /* Récupération requette*/
      query = strstr(getenv("REQUEST_URI"), "/openbox4/"); 

      if (query)
    {
      /* On se place derrière /openbox4/ */
      query = query + strlen("/openbox4/");

      if (query[0])
        {
          /* Initialisation structure hdf */
          hdf_init(&hdf);
          
          /* Initialisation cgi */
          cgi_init(&cgi, hdf);
          
          /* Initialisation du wrapping cgi de Clearsilver avec les fonctions */
          /* définies précémdent */
          cgiwrap_init_std(argc, argv, envp);
          cgiwrap_init_emu(NULL, read_cb, writef_cb, write_cb, NULL, NULL, NULL);
          
          /* Lecture menu.hdf */
          hdf_read_file(cgi->hdf, "/www/fcgiroot/hdf/menu.hdf");

          hdf_set_value(cgi->hdf, "Page.Name", query);

          entete(cgi->hdf);
          
          /* Ouverture du fichier .hdf correspondant à celui demandé */
          strcpy(fileName, "/www/fcgiroot/hdf/"); 
          strcat(fileName, query);
          strcat(fileName, ".hdf");
          
          csError = hdf_read_file(cgi->hdf, fileName);

          if (!csError)
          {
        strcpy(fileName, "/www/fcgiroot/cst/"); 
        strcat(fileName, query);
        strcat(fileName, ".cst");

            cgi_display(cgi, fileName);
          }
          /* Supression */
          cgi_destroy(&cgi);    
        }
    }
    }
  return 0;
}

Par ce petit exemple, on peut s'apercevoir qu'avec très peu de code il est facile de rajouter des pages d'administration à la manière n9uf car nous bénéficions de toute le structure des pages déjà réalisée (css, entête, menu et footer) pour ajouter nos propres pages.

Cela pourait être un point de départ.

Dernière modification par VincentAlex (14/05/2009 23:58:47)


Environnement de développement : MacOsX/Fedora 12/

Hors ligne

 

#13 14/03/2008 17:02:26

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 3174
Site web

Re: Organisation des pages d'administration de la NB4

je pensais à ltrace pour pouvoir suivre les appels à une lib dynamique

Hors ligne

 

#14 14/03/2008 23:26:14

VincentAlex
Modérateur
Lieu: Massy (91)
Date d'inscription: 01/10/2007
Messages: 1224

Re: Organisation des pages d'administration de la NB4

Intéressant. Mais je ne vois pas trop comment le lancer à travers lighttpd ...

Dernière modification par VincentAlex (15/03/2008 09:43:21)


Environnement de développement : MacOsX/Fedora 12/

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2008 PunBB
Traduction par punbb.fr