Nous sommes le Ven 26 Avr, 2024 11:26
Supprimer les cookies

Présentation sur le web, des évènements en cours et à venir.

Pour une tâche précise, pour remplacer un logiciel propriétaire donné...

Lun 20 Juil, 2015 10:22

Bonjour,
Je souhaite mettre en ligne un support aux habitants de ma commune pour savoir ce qu’il s’y passe.
L’idée est toute simple lister les événements (nom / date-horaire / cible / lieu / organisateur) dans un premier temps de mon association, et si ça fonctionne pas trop mal, des autres assos qui voudront bien s’y mettre.
Avant de creuser et pour ne pas réinventer la poudre, j’aimerais que l’on m’aiguille dans mes recherches. Quel type de technologie/logiciel essayer ? Je ne pense pas être le seul à avoir eu ce type de besoin… il doit bien exister des choses proche de ce que je veux faire. (je vais tenter de fouiller du côté de SPIP, mais la dernière fois que j’ai essayé, je m’y suis perdu).

L’idée est que le site se présente sous la forme d’une page synoptique présentant les événements de la semaine et du mois, et que l’on puisse s’abonner pour recevoir les nouveautés (avec des filtres ad hoc, sous quelle forme ??? news ? mail ?).
Ensuite, en naviguant il sera sans doute possible de filtrer sur différents critères et/ou de regarder plus précisément ce dont il s’agit pour chacun de ces événements (cours de musique, spectacle de fin d’année, compétition sportive etc), lieu (salle, stade...) etc.

Forcément je serai partie prenante, mais il faudrait que chacune des assos puisse créer ses propre événements… d’où un fonctionnement collaboratif (mais je pense qu’il faudra que ça soit ultra simple pour les autres que moi, si je veux que la mayonnaise prenne)

Autre chose, je n’ai jamais rien regardé quant à la portabilité sur téléphone et/ou tablette… il faudra que cela fonctionne. Car la première brique élémentaire à laquelle je pense est vraiment minimaliste : présentation de ce qui se passe dans la semaine. Il y a un intérêt certain pour que cela soit accessible facilement sur un téléphone.

Forcément si ça prend on demandera à ce que ça fasse papa et maman… donc si la fiabilité est au rendez-vous cela pourra devenir aussi un support au suivi des inscrits (alertes mails aux inscrits sur changement d’horaire etc… mais là on tombe sur quelque chose d’une tout autre ampleur avec la gestion des liste de mail).

Bref, si vous avez quelques mots clés pour que je puisse avancer dans mes recherche… ou même un solution clés en main :-P

Bonne journée,

JiDul
JiDul

Messages : 16

Mar 21 Juil, 2015 10:22

Un simple CMS peut suffire.
Je pencherais pour qqchose comme Pluxml ou CMSimple, qui s'installent facilement, qui n'ont pas besoin de base de données et qui fonctionnent bien.
Un simple tableau dans une page ou un article conviendra. Je propose que cette page soit celle qui ouvre le site (mise en avant à la Wordpress). Les anciennes pages rejoindront ensuite l'historique.
PatrikGC

Avatar de l’utilisateur
Messages : 87
Géo : France - Nord - Dechy

Jeu 23 Juil, 2015 11:01

Bonjour,
Personnellement, j'opterai pour Wordpress. À mon avis, c'est plus simple. Cet outil est plus pratique pour des idées de ce genre. Même si on n'est pas expert en programmation, on peut facilement réaliser un site ou blog avec ce support. De plus, les documents de formation en ligne Wordpress sont nombreux à être gratuits sur le net. Inspirez-vous des différentes informations que vous trouveriez sur le net afin de pouvoir concrétiser ce projet facilement.
kiki_25

Messages : 3

Ven 24 Juil, 2015 23:53

Merci.
Je vais me renseigner de ce côté.
JiDul

Messages : 16

Dim 26 Juil, 2015 13:23

Premièrement : Faites ce que vous voulez.

Mais puis. Je ne comprends pas ce qui est « simple » avec un CMS. C'est une technologie qui génère de la technologie. Et si quelque chose ne marche pas, il faut trouver ... déjà ce qui ne marche pas, puis pourquoi.

Pour une *application simple*, de plus s'il s'agit de produire *1* (une) page web, je préférais d'exclure le monstre d'un CMS du départ mais d'opter pour quelque chose qui, justement, produit *1* (une) page web. En fait, j'ai écris un petit script pour la gestion d'un calendrier de réservations d'un logement. Il faut une liste de dates avec description et le résultat est une page web (*1* page) avec le sommaire des réservations par qui et pourquoi. Seul contraint est le format des dates, ddMMyyyy pour qu'il soit extrait de la liste fournis par ... par qui veut, en fait.

Comparez ça avec un CMS. Puis lisez la doc du CMS que vous souhaitez utiliser. Puis comparez encore une fois. Puis faites ce que vous voulez.
« Nous sommes tous Charlie » — bienvenue dans le monde de l’unanimité décrétée, et malheur aux
réfractaires. Et puis surtout célébrons la liberté de penser sous l’écrasement de tout dissensus (...) - Frédéric Lordon
verslouest_le_même

Avatar de l’utilisateur
Messages : 136

Jeu 08 Oct, 2015 15:32

Oui, un CMS ça n'est pas si simple... je m'en suis rendu compte.

Mais la solution dont vous me parler est inaccessible pour moi... preuve en ai que je ne sais que faire de votre remarque :(
JiDul

Messages : 16

Ven 09 Oct, 2015 14:34

@jiDul.
Ce que j'ai raconté plus haut est *ma* solution pour un problème spécifique mais qui ressemble beaucoup à ce que vous avez décris au début. Et le but n'était même pas de produire une solution pour vous. J'ai réagi (et je continue à réagir) seulement au croyance aveugle dans la technologie autant qu'elle est neuve (ou recyclée avec un nouveau nom).

Alors, je peux maintenant proposer ma solution et essayer de la rendre « plus accessible ». Comme je ne suis pas français et me trompe à peu près continuellement dans le choix de mes mots, ceci vas soit vous rendre suicidaire ... ou tout à fait résoudre vos problèmes. Je suis incapable de le prévoir. Mais notez obligatoirement, que ma remarque en haut ne sert qu'à critiquer la recommandation d'un CMS où une page web est demandée et suffit entièrement !

Longue explication.

Contexte : Il y a une maison en indivision. La maison est louée fréquemment par des membres de la famille et d'autres personnes. Nous avons besoin d'un calendrier pour communiquer les vacances pour que les intéressés peuvent faire leurs réservations. Je ne peux pas exiger des autres la moindre maitrise de la technologie et n'ai pas envie de passer mon temps avec la gestion.
Idée : Les locations ou les réservations sont formulées de n'importe quel manière. Soit je les reçois par mail soit je les note moi-même, rapidement et sans besoin de respecter un format quelconque autre que celui les dates. Cette notice, en texte brute (notepad, vim, DOS-edit.., UltraEdit, TextPad ... ) doit suffire pour remplir le calendrier.
Réalisation : Je me suis écris une page web pour l'affichage du « calendrier ». Là, où les réservations seront affichées, j'ai définis un « garde-place ». C'est actuellement le symbol « %= » mais ceci est configurable. Pour remplir le calendrier, j'ai un script, c'est à dire une petite routine, qui lis les notices en texte brute, extrait les dates et remplis la page web, en créant une copie où le garde-place est remplacé par la liste des réservations.
C'est beaucoup plus frugal que cette explication.., j'avoue.

Alors ici le script en Ruby et un modul « completable » qui est utilisé. Qui veut peut facilement reproduire la même chose dans d'autres languages :
Code: Tout sélectionner
#!/usr/bin/env ruby

require 'date'
require 'logger'
require_relative 'completable'

LOG = Logger.new(STDOUT)
LOG.level = Logger::DEBUG
SOURCE = "caltemplate.html"
TARGET = "calendrier.html"

SPLT = "\t"
if ARGV && ARGV.length > 0
   entries = ""
   ARGV.each do |arg|
      if(File.exist?(arg) && File.readable?(arg))
         File.open(arg) do |fl|
            lines = fl.readlines;
            fields = nil
            lines.each do |ln|
               ln.chomp!
               ln.strip!
               contents = ''
               if (!ln.empty?)
                  ln.gsub!("\n", "<br/>")
                  ln.gsub!('&', '&amp;')
                  ln.gsub!('<', '&lt;')
                  ln.gsub!('>', '&gt;')
                  fields = ln.split()
                  LOG.debug('fields is ' << fields.to_s)
                  if(fields && !fields.empty? )
                     contents << fields.collect do |fn|
                        begin
                           rg = Regexp.new(/\d\d?\.\d\d?\.\d\d\d\d/)
                           dt = nil
                           if(rg.match(fn) )
                              fn.delete!(',')
                              dt = Date.parse(fn)
                           end
                        rescue ArgumentError,TypeError => er
                           LOG.warn("Field is not a date-value: " << fn)
                           LOG.warn er.message
                        end
                        if dt
                           fn = '<span class="date">' << fn << '</span>'
                           LOG.debug('date: ' << dt.to_s)
                        end
                        fn
                     end.join(' ')
                  end
               end
               if(!contents.chomp.strip.empty?)
                  entries << "<div class=\"cal\">%s</div>" %contents
               end
            end
         end
         # entries << "<div class=\"cal\">%s</div>" %contents

         # File.open(arg, 'w') {|of| of << "<div class=\"cal\">%s</div>" %contents}

      else
         LOG.error('not a readable file: ' << arg)
      end
   end
   File.open(SOURCE, 'r') do |s|
      File.open(TARGET, 'w') do |t|
         LOG.debug(entries)
         s.extend(Completable)
         s.field_delimiter = '%='
         fc, msg = s.complete(:entries => entries, :cur_date => Date.today.strftime('%d %b %Y')) do |chunk| 
            t << chunk
         end
      end   
   end
else
   LOG.error('ERROR: no arguments!')
end


Code: Tout sélectionner
#encoding: UTF-8
=begin
/***************************************************************************
 *   Copyright © 2008-2014, Michael Uplawski <michael.uplawski@uplawski.eu>   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 3 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
=end

# Completable file-objects can treat their
# contents like a fillable form. Predefined
# fields are searched and replaced by values.

module Completable

   attr_reader :backup, :summary


   # The main function of this module.  Expects as parameters a Hash of
   # field/substitution- pairs and an optional block.  If a block is
   # given, the original file will be processed and a backup is created.

   def complete(subst_def, &b)
      @summary = Summary.new(subst_def)
      @field_count = 0
      if(self.respond_to?(:gets) )         
         if(self.respond_to?(:closed?) && !self.closed?)
            self.rewind
            if(subst_def && subst_def.respond_to?(:has_key?))
               LOG.debug('subst_def is ' << subst_def.to_s) if LOG
               cpos = 0
               if(!b)
                  @backup="#{self.path}_backup"
                  outfile = File.open(@backup, 'w'){|bf| bf.write(self.readlines() )}
                  self.rewind
               end
               while(chunk = self.gets())
                  chunk, msg = process(chunk, subst_def)
                  if(!chunk && msg)
                     return nil, msg
                  end
                  if(b)
                     b.call(chunk)
                  else
                     self.seek(cpos, IO::SEEK_SET)
                     self.write(chunk)
                  end
                  cpos = self.pos
               end
            else
               return nil, 'first parameter must be a Hash'
            end
         else
            return nil, 'completable object must at least be open for reading'
         end
      else
         return nil, 'completable object must also respond to :gets'
      end
      @field_count
   end

   # sets the character sequence, which marks
   # substitutable text
   def field_delimiter=(d)
      @field_delimiter = d
      @field_regex = Regexp.new("#{d}[^#{d}]*#{d.reverse}")
   end
   # returns the character sequence, which marks
   # substitutable text
   def field_delimiter()
      if(!@field_delimiter)
         field_delimiter=(' ')
      end
      @field_delimiter
   end

   private

   # processes one chunk of text with the given
   # map of field/substitution pairs
   def process(chunk, subst_def)
      if(@field_regex)
         # rpl = chunk.match(@field_regex)
         fields = chunk.scan(@field_regex)
         fields.each do |rpl|
            if rpl
               # offset = rpl.offset(0) if rpl
               offset = chunk.index(rpl)
               test_key = rpl.to_s.delete(@field_delimiter)
               test_key = test_key.to_sym if test_key
               if(subst_def.has_key?(test_key))
                  @summary.add_found(test_key)
                  value = subst_def[test_key]
                  chunk.gsub!(rpl.to_s, value) if value
                  @field_count += 1
               end
            end
         end
         chunk
      else
         return nil, 'field-delimiter must be set.'
      end
   end

   # a class to summarize processing results
   class Summary
      attr_accessor :fields_found

      def fields_missing
         if(@fields_found)
            @fields - @fields_found.keys 
         else
            @fields
         end
      end

      def initialize(fields)
         if fields.respond_to?(:keys)
            @fields = Array.new(fields.keys)
         elsif fields.respond_to?(:to_ary)
            @fields = Array.new(fields)
         else
            @fields = Array.new()
         end
         @fields_found = Hash.new
      end

      def add_found(field)
         count = @fields_found[field]
         count = 0 if !count
         @fields_found[field] = count + 1
      end
   end
end


Modifs : Conversions Outre Rhin/Français
« Nous sommes tous Charlie » — bienvenue dans le monde de l’unanimité décrétée, et malheur aux
réfractaires. Et puis surtout célébrons la liberté de penser sous l’écrasement de tout dissensus (...) - Frédéric Lordon
verslouest_le_même

Avatar de l’utilisateur
Messages : 136

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit