[SPIP Zone] Comment étendre le système de logo à un nouvel objet (évènement de agenda 2 par exemple) ?

Bonjour,

Je pense que ça doit pas être bien compliqué mais là je sèche. Si quelqu’un peut me mettre sur la piste… Evenement étant un objet il devrait avoir droit à son ptit logo non ?

Ca doit être possible puisque cette balise #LOGO_EVENEMENT que j’aimerai utiliser est en fonction sur le trac de magraine.net (mais je vois pas comment…) ? http://souk.magraine.net/browser/souk/squelettes/mpp/inclure/evenements.html?rev=1335&desc=1

Merci pour toute aide / piste

On 30/03/2010 17:36, Guy Cesaro wrote:

Bonjour,

Je pense que ça doit pas être bien compliqué mais là je sèche. Si
quelqu'un peut me mettre sur la piste... Evenement étant un objet il
devrait avoir droit à son ptit logo non ?

Ca doit être possible puisque cette balise #LOGO_EVENEMENT que j'aimerai
utiliser est en fonction sur le trac de magraine.net
<http://magraine.net> (mais je vois pas comment...) ?
http://souk.magraine.net/browser/souk/_squelettes_/mpp/inclure/evenements.html?rev=1335&desc=1

Héhé... c'est un truc de fourbe (dans ce cas si)

[<div class="#EDIT{logo}">(#LOGO_EVENEMENT||image_reduire{160,160}
|sinon{[(#LOGO_ARTICLE||image_reduire{160,160})]})</div>]

Tout est dans le #EDIT{logo} : on est dans une boucle évènement, du coup, si j'édite avec Crayons le logo (qui est par défaut celui de l'article), c'est le logo évènement qui sera créé.

Sinon, on avait aussi fait un formulaire #EDITER_LOGO ou quelque chose comme ça, dans un plugin... heu... le plugin AjaxForms : Connexion · GitLab

Suffit de mettre ce formulaire dans une boucle Évènement.

/me va aller empêcher google d'indexer mon trac !

--
MM.

Merci Matthieu ! 2 pistes pour le prix d’une (et les deux fonctionnent!) ! désolé d’avoir poster l’adresse de ton trac, j’ai cru que tu mettais à dispo… Pas très sympa de ma part…

Au final, je m’en tire pas trop mal avec ajaxforms (qui mériterait une ptite page sur spip contrib ? Pas trouvé). Pour afficher la boite à gauche, j’ai changé dans agenda 2/exec/evenement_edit ~~ligne 53 :
$contexte = array(‹ id_evenement ›=>$id_evenement);
$gauche = recuperer_fond(« prive/navigation/evenements_edit », $contexte);
echo pipeline(‹ affiche_gauche ›,array(‹ args ›=>array(‹ exec ›=>‹ evenements_edit ›,‹ id_evenement ›=>$id_evenement,‹ id_article ›=>$id_article),‹ data ›=>$gauche));

En ayant pris soin de mettre un ptit evenements_edit.html dans /agenda2/prive/navigation/
avec #FORMULAIRE_EDITER_LOGO{evenement,#ENV{id_evenement}}

C’est surement pas très propre mais ça fonctionne très bien. Du coup pour ajouter le formulaire de documents joints, j’ai testé très rapidement ça semble parfait sauf la suppression, mais je pense que je peux trouver en fouillant un peu.

Par contre, lorsque un doc est cité dans un article/rubrique, si l’article/rubrique est consulté ou édité (ou alors est-ce un spip_cron ?) et que le doc n’était pas lié à l’article dans spip_documents_liens, l’insertion du lien se fait.
Pour reproduire ça avec un objet evenement, vers quoi je doit regarder ?

Le 30 mars 2010 17:53, Matthieu Marcillaud <marcimat@rezo.net> a écrit :

On 30/03/2010 17:36, Guy Cesaro wrote:

Bonjour,

Je pense que ça doit pas être bien compliqué mais là je sèche. Si
quelqu’un peut me mettre sur la piste… Evenement étant un objet il
devrait avoir droit à son ptit logo non ?

Ca doit être possible puisque cette balise #LOGO_EVENEMENT que j’aimerai
utiliser est en fonction sur le trac de magraine.net

<http://magraine.net> (mais je vois pas comment…) ?

http://souk.magraine.net/browser/souk/squelettes/mpp/inclure/evenements.html?rev=1335&desc=1

Héhé… c’est un truc de fourbe (dans ce cas si)

[

(#LOGO_EVENEMENT||image_reduire{160,160}
|sinon{[(#LOGO_ARTICLE||image_reduire{160,160})]})
]

Tout est dans le #EDIT{logo} : on est dans une boucle évènement, du coup, si j’édite avec Crayons le logo (qui est par défaut celui de l’article), c’est le logo évènement qui sera créé.

Sinon, on avait aussi fait un formulaire #EDITER_LOGO ou quelque chose comme ça, dans un plugin… heu… le plugin AjaxForms : http://zone.spip.org/trac/spip-zone/browser/plugins/ajaxforms

Suffit de mettre ce formulaire dans une boucle Évènement.

/me va aller empêcher google d’indexer mon trac !

–
MM.

Salut,

Le 31/03/2010 17:45, Guy Cesaro a écrit :

Au final, je m'en tire pas trop mal avec ajaxforms (qui mériterait une ptite
page sur spip contrib ? Pas trouvé). Pour afficher la boite à gauche, j'ai
changé dans agenda 2/exec/evenement_edit ~~ligne 53 :

Ha ben super, maintenant que tu l'as utilisé et que tu le trouve sympa tu pourrais rédiger un article de présentation (même sommaire) sur contrib ?

Merci d'avance :slight_smile:

++
b_b

On 31/03/2010 17:45, Guy Cesaro wrote:

Merci Matthieu ! 2 pistes pour le prix d'une (et les deux fonctionnent!)
! désolé d'avoir poster l'adresse de ton trac, j'ai cru que tu mettais à
dispo... Pas très sympa de ma part...

Bah, c'est pas grave, il est en accès libre, mais autant éviter de faire ramer le serveur avec les robots ! Le voilà désindéxé de google maintenant. Na !

Au final, je m'en tire pas trop mal avec ajaxforms (qui mériterait une
ptite page sur spip contrib ? Pas trouvé).

C'est un plugin très confidentiel, mais si tu veux le faire naître, n'hésite pas à le documenter sur Contrib !

  Pour afficher la boite à

gauche, j'ai changé dans agenda 2/exec/evenement_edit ~~ligne 53 :
     $contexte = array('id_evenement'=>$id_evenement);
     $gauche = recuperer_fond("prive/navigation/evenements_edit",
$contexte);
     echo
pipeline('affiche_gauche',array('args'=>array('exec'=>'evenements_edit','id_evenement'=>$id_evenement,'id_article'=>$id_article),'data'=>$gauche));

Tu peux faire proprement avec le pipeline afficher_gauche appelé en dessous, sans modifier le code d'origine donc.

[...] Du coup

pour ajouter le formulaire de documents joints, j'ai testé très
rapidement ça semble parfait sauf la suppression, mais je pense que je
peux trouver en fouillant un peu.

Tu parles de l'autre formulaire du plugin ajaxforms ? On l'a utilisé nous pour lier des docs à des articles. Pas testé donc sur des évènements.

Par contre, lorsque un doc est cité dans un article/rubrique, si
l'article/rubrique est consulté ou édité (ou alors est-ce un spip_cron
?) et que le doc n'était pas lié à l'article dans spip_documents_liens,
l'insertion du lien se fait.
Pour reproduire ça avec un objet evenement, vers quoi je doit regarder ?

Peut être marquer_doublons_documents() de inc/modifier. Sans être certain.

--
MM.

Le 31/03/2010 18:19, Matthieu Marcillaud a écrit :

C'est un plugin très confidentiel, mais si tu veux le faire naître,
n'hésite pas à le documenter sur Contrib !

C'était pas pour tester les nouveaux formulaires CVT ce plugin au départ ?

Vu qu'au final ça concerne essentiellement document/logo, ça serait peut-être mieux d'intégrer ça dans la médiathèque non ? En tout cas pas laisser ça dans un truc "ajaxforms" super vague, si ça doit être documenté.

M'enfin j'dis ça...

--
RastaPopoulos

Bon j’arrive tout juste à faire ce que je veux obtenir. Et j’ai peur d’avoir écrit des horreurs. Je suis volontaire pour faire une présentation d’ajaxforms, je voudrais utiliser un exemple simple en reprenant mon cas particulier : permettre d’affecter un logo à un évènement dans la boite de gauche.

Matthieu, quand tu disais d’utiliser le pipeline ‹ affiche_gauche › pour ne pas modifier le code de agenda. Je suppose que ça voulait dire en créant un microplugin utilisant agenda et ajaxforms. J’ai tenté, voici ce que ça donne :

plugins.xml

Logo_evenement_ajaxforms 0.1 logo_evenement_ajaxforms dev affiche_gauche

logo_evenement_ajaxforms_pipelines.php




logo_evenement_ajaxforms_pipelines.php

<?php function logo_evenement_ajaxforms_affiche_gauche($flux){ if ($flux['args']['exec'] == 'evenements_edit'){ if ($id_evenement= intval(_request('id_evenement'))) { $flux['data'] .= debut_cadre_relief('',true,'', _T('logo_evenement_ajaxforms:logo_evenement')) . recuperer_fond('prive/navigation/logo_evenements_edit', array('id_evenement'=>$flux['args']['id_evenement'])). fin_cadre_relief(true); } } return $flux; } ?>

/prive/navigation/logo_evenements_edit.html
#FORMULAIRE_EDITER_LOGO{evenement,#ENV{id_evenement}}

/lang/logo_evenement_ajaxforms_fr.php

<?php if (!defined("_ECRIRE_INC_VERSION")) return; $GLOBALS[$GLOBALS['idx_lang']] = array( 'logo_evenement' => "Logo de cet évènement" ); // ?>

avant d’utiliser cet exemple pour présenter ajaxforms, pouvez vous me dire si c’est à peu près propre & standard « spip » ? (autant au niveau des nommages, que de l’écriture…). Parce que ça marche, ok, mais c’est propre, ça j’en doute ?

@RastaPopoulos
Si il est intégrer à la mediathèque, comment on peut l’utiliser sur des nouveaux objets ? Désolé, mon niveau de compréhension est limité…

Le 31 mars 2010 21:48, RastaPopoulos <rastapopoulos@spip.org> a écrit :

Le 31/03/2010 18:19, Matthieu Marcillaud a écrit :

C’est un plugin très confidentiel, mais si tu veux le faire naître,
n’hésite pas à le documenter sur Contrib !

C’était pas pour tester les nouveaux formulaires CVT ce plugin au départ ?

Vu qu’au final ça concerne essentiellement document/logo, ça serait peut-être mieux d’intégrer ça dans la médiathèque non ? En tout cas pas laisser ça dans un truc « ajaxforms » super vague, si ça doit être documenté.

M’enfin j’dis ça…

–
RastaPopoulos


spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

On 01/04/2010 11:44, Guy Cesaro wrote:

Bon j’arrive tout juste à faire ce que je veux obtenir. Et j’ai peur d’avoir écrit des horreurs. Je suis volontaire pour faire une présentation d’ajaxforms, je voudrais utiliser un exemple simple en reprenant mon cas particulier : permettre d’affecter un logo à un évènement dans la boite de gauche.

Matthieu, quand tu disais d’utiliser le pipeline ‹ affiche_gauche › pour ne pas modifier le code de agenda. Je suppose que ça voulait dire en créant un microplugin utilisant agenda et ajaxforms. J’ai tenté, voici ce que ça donne :

C’est parfait à un détail près

logo_evenement_ajaxforms_pipelines.php

<?php function logo_evenement_ajaxforms_affiche_gauche($flux){ if ($flux['args']['exec'] == 'evenements_edit'){ if ($id_evenement= intval(_request('id_evenement'))) {

Non là, utiliser ce qui est donné : if ($id_evenement = $flux[‹ args ›][‹ id_evenement ›] …

$flux[‹ data ›] .=
debut_cadre_relief(‹  ›,true,‹  ›, _T(‹ logo_evenement_ajaxforms:logo_evenement ›)) .
recuperer_fond(‹ prive/navigation/logo_evenements_edit ›, array(‹ id_evenement ›=>$flux[‹ args ›][‹ id_evenement ›])).
fin_cadre_relief(true);

du coup : array(‹ id_evenement ›=>$id_evenement) ira très bien.

}
}
return $flux;
}

@RastaPopoulos
Si il est intégrer à la mediathèque, comment on peut l’utiliser sur des nouveaux objets ? Désolé, mon niveau de compréhension est limité…

1 point pour Guy :slight_smile: Tu as raison, ce n’est pas spécialement spécifique à la médiathèque…

Ce que veux dire Rasta, c’est que «ajaxForm» est pas très bien nommé, s’occupant essentiellement de logo et de documents, un autre nom lui serait préférable, ou l’intégrer à un projet qui a des ambitions identiques tel que médiathèque, ce qui n’empêcherait pas de l’utiliser dans différents nouveaux objets.

Le 1 avr. 2010 à 11:58, Matthieu Marcillaud a écrit :

On 01/04/2010 11:44, Guy Cesaro wrote:

...
@RastaPopoulos
Si il est intégrer à la mediathèque, comment on peut l'utiliser sur des nouveaux objets ? Désolé, mon niveau de compréhension est limité...

1 point pour Guy :slight_smile: Tu as raison, ce n'est pas spécialement spécifique à la médiathèque...

Là ou il y a redondance, c'est que mediatheque propose aussi un form ajax pour uploader/changer un document, ou une vignette de document (tiens un #LOGO_ traité en document !)

Et que très vite (enfin toute proportion gardé), le plugin va refondre complètement les logos pour les traiter en document, et proposera donc le formulaire adapté.
Le tout étant ensuite basculé dans les plugins du core pour se débarasser de plein de vieux code dans le core.

Cédric