BonjourJe sais qu il n est pas possible malheureusement...

cancel
Showing results for 
Search instead for 
Did you mean: 
seraphon
Member II

BonjourJe sais qu il n est pas possible malheureusement...

Bonjour

Je sais qu il n est pas possible malheureusement de changer le "look" d Alfresco sauf a travers de template mais cela ne change pas le look general.
Par contre est il possible de recuperer des donnees d'Alfresco pour les utiliser dans une page html?
En recuperant peut etre l adresse des nodes Alfresco et ainsi donner des liens vers les fichiers stockes dans Alfresco mais organises et affiches d une maniere differente dans la page HTML personnalisee?
Mon employeur fait le difficile et trouve que Alfresco n est ni intuitif, ni user friendly et me demande de faire une html user friendly. Je pense personnellement que ce n est pas faisable(ou bien trop difficile pour etre interressant), car si ca l etait je pense qu il y aurait un module pour cela (et WCM ne me semble pas etre ce module) mais je prefere demander l avis de la communaute avant de dire que je ne peux pas le faire.

Cordialement
Seraphon
14 Replies
rivarola
Active Member

Re: BonjourJe sais qu il n est pas possible malheureusement...

Bonjour,

Il y a plein de manière de créer une interface conviviale à partir d'Alfresco. Il est vrai que modifier la webapp pour la relooker est très lourd car les styles ne sont pas externalisés dans des CSS.
Il reste d'autres solutions :
- les web scripts qui sortent dans la version 2.1 (aujourd'hui ?) permettent de faire des interfaces vraiment sexy dans Alfresco. Tu obtiens donc un mix de l'interface usuelle d'Alfresco et de vues customisées très puissantes
- on peut aussi créer sa propre application qui utilise le repository Alfresco et pas leur webapp. Ca veut dire redévelopper entièrement une GUI, avec n'importe quelle techno (Java, PHP, Groovy, Ruby, …) et appeler les API Java ou les web services Alfresco pour toute interaction avec les données du repository
- on peut enfin redévelopper des pans entiers de la webapp Alfresco en gardant par exemple les frameworks d'actions, de boites de dialogue et de wizards qui sont très puissants, mais en refaisant les vues principale type browse.jsp

Chez Knowings on refait entièrement une interface graphique plus "user friendly" à partir de la webapp Alfresco. C'est un travail lourd et technique, mais le résultat est vraiment différenciant.
seraphon
Member II

Re: BonjourJe sais qu il n est pas possible malheureusement...

Bonjour

Merci pour la reponse rivarola.
Pour la version 2.1 je le savais deja qu'il y avait des ameliorations dans ce sens (par contre je ne savais pas pour les interfaces sexy …… interressant) mais vu que le relooking d'Alfresco est mon travail du moment je ne peux pas me permettre de me tourner les pouces en attendant cette oh attendu Alfrescov2.1 (quoique ce n'est pas l'envie de me les tourner, mes pouces, qui me manque).
Pour les deux dernieres options je n etais pas vraiment sur que cela soit possible. J'aurais une preference pour la deuxieme et utiliser du java.
Quelqu'un peut-il me conseiller sur le choix des outils, avec l'obligation d'etre opensource et donc gratuit car je n ai aucun budget en tant que stagiaire, a utiliser pour faire une joli GUI? Je suis plus a l aise avec du java. Et existe t-il une docu ou wiki qui donne des conseils sur comment faire de tel GUI et qui decrit les API java et web service utilise par Alfresco.

Une derniere chose, quelqu'un peut il me dire s'il est possible que je fasse quoique ce soit d'interressant avec la deuxieme option avant que ne sorte Alfrescov2.1 en sachant que je suis le seul de mon entreprise a travailler sur Alfresco et que je n ai plus que 2 mois (Donc le travail lourd et technique risque de ne pas etre possible).

Cordialement
Seraphon qui sent qu'il va faire une overdose d'Alfresco dans les 2 mois a venir
michaelh
Active Member

Re: BonjourJe sais qu il n est pas possible malheureusement...

Très sincèrement, je conseille de miser dès maintenant sur la techno webscripts si tu veux quelque chose de simple à mettre en oeuvre et très efficace.
Voir le lien contenu dans l'annonce de la 2.1 release candidate pour un démo des capacités.
Pas d'inquiétude à avoir en ce qui concerne une quelconque attente. Tout ce que tu feras sur la base de la 2.1 RC sera réutilisable dans la version finale, et ne sera pas perdu.

Après si tu veux vraiment faire du Java pur jus, il faut passer par :
http://wiki.alfresco.com/wiki/Developer_Guide#Developing_against_the_Alfresco_Repository
http://wiki.alfresco.com/wiki/Web_Client_Customisation_Guide
http://wiki.alfresco.com/wiki/Scripting_and_Templating_Guide

Mais attention, la courbe d'apprentissage n'est pas franchement la même … et 2 mois ça passe très vite !
D'autant que si tu ne fais pas tout dans les règles de l'art, tu vas aboutir à une version spécifique d'Alfresco que personne ne pourra mettre à jour.
seraphon
Member II

Re: BonjourJe sais qu il n est pas possible malheureusement...

Bonjour

Je pense que je vais plutot me mettre aux webscripts car je pense que du dev pur en java est au del de mes competences.
Pour ce qui est des webscripts j'ai essaye en premier lieu de deplacer les fichiers qui implementent le webscripts myspaces car je pense que c est une bonne base pour creer une GUI perso et user friendly. Je pensais mettre ces fichiers dans l espace webscript extension/org/alfresco/sample/test (test etant un espace cree dans le seul but de contenir mes scripts de test).
J ai deplace les fichiers en rajoutant un 2 a la fin
myspaces2.get.desc.xml
myspaces2.get.html.ftl
myspaces2.js
myspaces_preview_panel2.ftl
myspacespanel2.get.desc.xml
myspacespanel2.get.html.ftl
myspaces-webscript2.jsp
j ai ensuite mis a jour les noms des fichiers au sein de ces dits fichiers du genre
  <shortname>My Spaces2</shortname>
  <description>Generate the My Spaces2 portlet page</description>
  <url>/sample/myspaces2?f={filter?}&p={path?}</url>
dans myspaces2.get.desc.xml

Je vais ensuite dans la page http://localhost:8080/alfresco/service/ puis mise a jours des scripts et j obtiens un message comme quoi le nombre de script passe de 40 a 42.
Lorsque je vais a http://localhost:8080/alfresco/wcs/sample/myspaces2 j obtiens bien la page myspace sauf que le script myspace2.js ne se declenche pas et on ne voit donc aucune icone.

Cela provient certainement du fichier myspaces2.get.html.ftl ou j ai du mettre un mauvais chemin
<script type="text/javascript" src="/org/alfresco/sample/test/myspaces2.js"></script>
Quelqu un sait ce qu il faut mettre?
J ai essaye de nombreux chemin different et j ai lu et relue le wiki mais je ne sais pas quel est le chemin d un fichier qui est a l interieur d un espace Alfresco.

Il semble de plus que deux des exemples fournit ne marchent pas directement http://wiki.alfresco.com/wiki/Web_Scripts_Examples#Introduction

Quand on rentre http://<host>:<port>/alfresco/service/sample/avm/path/main–admin/www
ou http://<host>:<port>/alfresco/service/sample/folder/Company%20Home
on obtient une erreur de type 404 (celle definit dans les fichiers .js)
Est-ce normal ou ai-je manque quelque chose?

Cordialement
Seraphon
seraphon
Member II

Re: BonjourJe sais qu il n est pas possible malheureusement...

Bon apres quelques reponses recues dans le forum anglais j ai compris quelques choses et je vais donc reformuler mes questions qui semblent ils rentrent dans la categorie non intelligente, bien que j ai essayer de comprendre mon probleme et de rechercher des solutions.

Ma question est simple. Vu qu il semble qu il soit inutile de mettre des templates (des fichiers de type .jsp) ou des javascripts dans les espaces Alfresco, car on ne peut pas mettre de path reconnu par Alfresco ensuite, n'y a t'il aucun autre moyen de rajouter des javascripts customise que de les mettrent dans webapps/scripts/ajax? ou des templates customise dans webapps/alfrescoWEB-INFclassesalfrescotemplatesclient ?
Je n'arrice toujours pas a comprendre pourquoi certains fichiers peuvent etre mis dans le repertoire tomcat/shared/extension pour etre ensuite pris en compte par Alfresco et ainsi permettre de la customisation propre alors que pour d autre fichiers on ne peut pas le faire.

De ce que j ai compris de l implementation de myspaces, toutes les fonctionnalites interressantes sont implemente grace au javascripts et template.

Je m excuse pour ces questions un peu directe et semblerait il absente de toutes reference technique mais meme apres avoir lu des wiki et autres tutoriaux sur le net, les notions sur les chemins url, REST, et autres restent floux a mes yeux.
J avoue qu a chaque qu il faut relier un fichier dans Alfresco je sais rarement quel chemin mettre.

Je voudrais ajouter que rajouter que je sais qu il semble possible de rajouter des classes java et du javascript directement a l interieur d une librairie a l interieur de Alfresco.war mais je ne sais toujours pas faire un build propre et qui marche

Cordialement
Seraphon qui compte toujours chercher et s excuse pour ses lacunes techniques
seraphon
Member II

Re: BonjourJe sais qu il n est pas possible malheureusement...

Bonjour

me revoila apres avoir jouer un petit peu avec les webscripts.
Je suis pour l instant en train de travailler sur une copie du portlet myspaces auquel j ai ajoute quelque petite chose, notamment la possibilite de faire du drag and drop lorsqu il n y a pas trop de fichiers.
J ai fait deux posts a ce sujet dans le forum anglais mais vu que pour l instant il semble indisponible je ne peux pas vous donner de lien.
Sinon voila la raison pour ce nouveau post: j ai des difficultes a implementer ce drag and drop notamment pourn ce qui est de l aspect javascript.
Pour information j utilise pleinement les methodes de mootools (deja inclus dans alfresco et dans le portlet myspaces).
J arrive a faire du drag and drop mais j ai des problemes pour avoir plusieurs cible de "drop"
Je peux facilement identifier une zone ou l on peut faire du drag and drop mais pas avec plusieurs zones.
J ai initialement suivi le code trouve ici: http://demos.mootools.net/Drag.Cart

voici le code en javascript que j ai et qui debut vers la ligne 100 dans le fichier myspaces.js:

parseSpacePanels: function()
   {
      var spaces = $$('#spacePanel .spaceRow');
      var items = $$('#spacePanel .spaceItem');
      var infos = $$('#spacePanel .spaceInfo');
      var details = $$('#spacePanel .spaceDetail');
      var icons = $$('#spacePanel .spaceIcon');
      var imgs = $$('#spacePanel .spaceIconImage');
      var imgs64 = $$('#spacePanel .spaceIconImage64');
      var resources = $$('#spacePanel .spaceResource');
     var types = $$('#spacePanel .spaceType');
…….
…….
spaces.each(function(space, i)
      {
         var item = items[i],
          icon = icons[i],
             info = infos[i],
             detail = details[i],
          type = types[i],
             img = imgs[i],
          dzone = new Array(),
          nzone = 0;
             resource = resources[i];
…….
……
      spaces.each(function(ic, i)
      {
         if (types[i].getProperty('alt')=="space")
         {
         dzone[nzone]=spaces[i];
         nzone++;
         }
         });

$('spacePanel').addEvent('domready', function() {
   

 
if (type.getProperty('alt')=="fichier"){
icon.addEvent('mousedown', function(e) {
      e = new Event(e).stop();

      var clone = this.clone()
         .setStyles(this.getCoordinates()) // this returns an object with left/top/bottom/right, so its perfect
         .setStyles({'opacity': 0.4, 'position': 'absolute' })
                  
         .addEvent('emptydrop', function() {
            this.remove();
         //   spaces[3].removeEvents();
      //   spaces[4].removeEvents();
            for( var l = 0; l < nzone; l++ ) {
            dzone[l].removeEvents();
            }
         }).inject(document.body);
         
   

         for( var y = 0; y < nzone; y++ ) {
         dzone[y].addEvents({
         'drop': function() {
         
         for( var k = 0; k < nzone; k++ ) {
            dzone[k].removeEvents();
            }
            clone.remove();
            item.clone().inject(dzone[y]);
            
         },
         'over': function() {
            
         },
         'leave': function() {
            
         }
      });
         };
         
/*         
spaces[3].addEvents({
         'drop': function() {
         
         spaces[3].removeEvents();
         spaces[4].removeEvents();
            clone.remove();
            item.clone().inject(spaces[3]);
            
         },
         'over': function() {
            
         },
         'leave': function() {
            
         }
      });
spaces[4].addEvents({
         'drop': function() {
         
         spaces[4].removeEvents();
         spaces[3].removeEvents();
            clone.remove();
            item.clone().inject(spaces[4]);
            
         },
         'over': function() {
            
         },
         'leave': function() {
            
         }
      });*/      

      var drag = clone.makeDraggable({
         droppables: dzone
                      //droppables: [spaces[3],spaces[4]]
      }); // this returns the dragged element

      drag.start(e); // start the event manual
   });
   }
});
Une petite explication sur mon code
Les premieres variables icons et types ont ete ajoute par moi. La variable icon englobe toutes les icones des fichiers, et types me permet de voir si la ligne analyse contient un espace ou un fichier. Pour cela il suffit de rajouter dans le fichier myspacespanel.get.html.ftl  et ce apres la classe spacerow ce simple code
   <div style="display:none"><img class="spaceType" alt="space" ></div>
sans oublier de donner une def CSS dans myspaces.get.html.ftl


sinon le tableau dzone est cense contenir les space ou ligne qui contiennent des espaces.
Or quand je test mon code j arrive bien a faire du drag and drop mais lorsque je drop un fichier dans un espace j obtiens les messages d erreurs suivant dans firebug
el.appendChild is not a function
inject(false, undefined)mootools.v1.1.js (line 28)
drop()myspaces2.js (line 337)
returns()mootools.v1.1.js (line 21)
create(undefined)mootools.v1.1.js (line 21)
fireEvent(function())mootools.v1.1.js (line 48)
fireEvent("drop", [div.spaceIcon, Object options=Object element=div.spaceIcon droppables=[2]], undefined)mootools.v1.1.js (line 48)
checkAgainst()mootools.v1.1.js (line 70)
implement()mootools.v1.1.js (line 9)
returns()mootools.v1.1.js (line 21)
create(mouseup clientX=0, clientY=0)mootools.v1.1.js (line 21)
[Break on this error] default:el.appendChild(this);}
Par contre si j ajoute manuellement les evenements drop (car je fais des tests sur un petit nombre de fichiers et d espace) tout marche sans probleme. J ai un beau drag and drop et lorsque je drop un fichier sur un espace on a le nom du fichier qui s insiere dans la ligne contenant l espace.

Je me doute que mon explication semble un peu incomplete et qu il doit etre difficile pour quelqu un ne s y etant pas mis dedans de comprendre ce que je fais, mais au cas ou un demi dieu du javascript passe par la et vois ou est mon erreur…..

Cordialement
Seraphon

edit: voila le sujet dans le forum anglais et qui est un peu plus fourni, au cas ou ca interesse quelqu un (bah ce n est pas interdit de rever….)   http://forums.alfresco.com/viewtopic.php?t=7304
seraphon
Member II

Re: BonjourJe sais qu il n est pas possible malheureusement...

Bonjour

me voila de retour avec une animation de drag and drop correcte et qui semble ne pas trop bugger.
Mais je viens de rencontrer un obstacle de taille: je ne vois pas trop comment recuperer un node et le deplacer vers l espace ou il a ete droppe. Je peux aisement recuperer les noderef ou path du node que je veux deplacer et l espace cible, mais je ne sais pas quoi en faire.
D apres ce que j ai compris mon fichier customise myspaces.js est de type client et agis avec le navigateur internet et pour agir sur un node il me faut faire appel a du javascript de type serveur qui va faire une requete de type GET et recuperer le dit node.
Je pense avoir saisi a peu pres la theorie de la chose mais quelqu un peut il me detailler le cote pratique ? Car la je ne vois pas trop.
Il semblerait que l on utilise la methode
YAHOO.util.Connect.asyncRequest(
            "POST",
            getContextPath() + '/ajax/invoke/PortletActionsBean.deleteItem',
            {
               success: function(response)……….
qui provient du fichier yahoo-min.js mais je ne voit pas trop comment l utiliser…
que faut il mettre apres getContextPath() pour obtenir un node dont on a le nodeRef?

Et une fois recupere, ce node se trouve t il dans reponse? et peut on alors utilise l API propre a Alfresco et aux nodes a l interieur de la fonction success:function(response) ?

Je me rend compte que cela fait pas mal de question et qu en plus peu de personne (ou aucune?) ne s interresse a mon probleme, mais la documentation pour utiliser les appels GET ou POST a partir du javascript est, me semble t il, assez peu fourni(je n en ai pas trouve en tout cas).


Cordialement
Seraphon qui espere avoir une reponse meme si c est pour lui dire de chercher tout seul…..
seraphon
Member II

Re: BonjourJe sais qu il n est pas possible malheureusement...

Bonjour

j aimerais revenir a ma discussion avec rivarola sur les differentes facons de faire des GUI personnalises et user friendly si cela ne le gene pas trop.

J ai bien essaye de developper quelque chose avec webscript, mais cela est bien plus ardu que je ne le pensais. Mais j avoue ne pas etre un developpeur proffessionnelle et j ai juste fait un petit webscript pour faire une demonstration des possibilites du webscript. Je pense de toute facon que pour creer une bonne GUI necessite une equipe de devoloppeur solide et une bonne periode de travail quelque soit le moyen utilise..
Par contre comme je ne vois pas trop comment developper une GUI avec java par exemple, ou bien modifier la webapp d Alfresco, j aimerais ecouter les temoignages de personnes s ayant lance dans ces voies.

Cordialement
Seraphon
rivarola
Active Member

Re: BonjourJe sais qu il n est pas possible malheureusement...

Bonjour Seraphon,

Et bien pour modifier/étendre la GUI initiale en Java, c'est encore plus compliqué qu'avec les Webscripts !
Il est relativement facile de modifier un jsp pour faire apparaître un champ supplémentaire ou personnaliser l'écran de login, mais il faut une solide connaissance de Java et de JSF pour faire quelque chose de plus poussé.
C'est d'ailleurs la lourdeur de JSF qui pousse les gens d'Alfresco à fournir d'autres moyens de customisation, comme les Webscripts ou PHP.
Je pense que les exemples de webscripts fournis par Alfresco sont une bonne base. Des gens proposerons aussi probablement des webscripts custom via la forge ou les forums. C'est à mon sens le meilleur moyen de customiser la GUI Alfresco actuellement pour quelqu'un qui n'est pas expert Java (peut-être PHP aussi mais je n'ai pas creusé de ce côté là).