Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Bonjour,
Je voudrais permettre à l'utilisateur du thème de choisir une image de la médiathèque. J'arrive à afficher la popup pour le choix du fichier, mais je ne parviens pas à insérer dans media-item.php le code javascript nécessaire pour que les boutons "Sélectionner" et "Annuler" fonctionnent.
Après avoir regardé les plugin dcCKEditor et dcLegacyEditor, je tente de reproduire leur fonctionnement. J'essaie donc d'utiliser le behavior adminPopupMedia appelé dans media-item.php comme le font ces plugins pour ajouter leur code dans la popup
J'ai ajouté dans le prepend.php de mon thème les behaviors suivants
$core->addBehavior('adminPageHTMLHead', ['tplGrayscaleThemeAdmin', 'adminPageHTMLHead']);
$core->addBehavior('adminPopupMedia', ['tplGrayscaleThemeAdmin', 'adminPopupMedia']);
class tplGrayscaleThemeAdmin
{
public static function adminPageHTMLHead()
{
if ($GLOBALS['core']->blog->settings->system->theme != 'grayscale') {
return;
}
$grayscale_admin_js = $GLOBALS['core']->blog->settings->system->themes_url."/".$GLOBALS['core']->blog->settings->system->theme."/js/admin.js";
echo '<script src="' . $grayscale_admin_js . '" ></script>';
}
public static function adminPopupMedia($editor = '')
{
if (empty($editor) || $editor != 'admin.blog.theme') {
return;
}
$theme_url = $GLOBALS['core']->blog->settings->system->themes_url."/".$GLOBALS['core']->blog->settings->system->theme;
return dcPage::jsLoad($theme_url . '/js/popup_media.js');
}
}
Le premier fonctionne correctement, mais pas le second qui n'injecte pas le javascript dans la popup.
Pour afficher la popup, j'ai un bouton sur la page de configuration et ce code javascript pour la page
$(function () {
$('#default-image-selector').on('click', function (e) {
window.open('media.php?plugin_id=admin.blog.theme&popup=1&select=1', 'dc_popup', 'alwaysRaised=yes,dependent=yes,toolbar=yes,height=500,width=760,' + 'menubar=no,resizable=yes,scrollbars=yes,status=no');
e.preventDefault();
return false;
});
});
Ce qui ouvre bien la popup, permet de choisir une image, mais je suis ensuite coincé pour l'insérer dans mon formulaire
Sauriez-vous me dire ce que je fais de travers ?
PS : le thème est ici sur Github
Dernière modification par Philippe (2021-06-15 17:36:39)
Hors ligne
Jette un œil à ce commit : https://git.dotclear.org/dev/dotclear/c … 1957de94b6
C'est celui où j'ai implémenté le choix d'un billet/d'une page pour le mode statique. En particulier ce qu'il y a dans admin/js/_blog_pref_popup_posts.js qui s'occupe de mettre en place dans la page parent le choix effectué dans le popup.
Mais c'est vrai que d'une manière générale spa très bien documenté ce genre de sorcellerie :-)
Dotclear addicted since 2004
Hors ligne
Merci franck, je comptais d'ailleurs bien m'inspirer de ça.
Mais ce n'est pas le code lui-même qui me gêne, c'est l'inclusion de ce javascript dans la page media-item
Hors ligne
Alors jette un œil sur inc/admin/class.dc.blog_pref.php (dans le même commit), il se charge de charger le js kivabien via un behaviour ;-)
Dotclear addicted since 2004
Hors ligne
Oui, justement, dans ce fichier tu utilises le behavior adminPopupPosts qui est appelé par popup_posts.php, pour ajouter dans la popup ton fichier javascript
De la même manière, je cherche à utiliser le behavior adminPopupMedia qui est appelé par media-item.php, pour ajouter mon code dans la popup.
D'où l'ajout du behavior adminPopupMedia dans mon fichier prepend.php ci-dessus (comme le font les éditeurs dcLegacy et CKEditor). Mais il semble que le behavior ne soit pas appelé
Hors ligne
Dans le code que j'ai posté en #1 il y a deux behaviors : adminPageHTMLHead et adminPopupMedia. Le premier fonctionne, pas le second.
Serait-il possible que cela vienne du fait que c'est un thème et non pas un plugin ?
Hors ligne
Ah oui c'est bien possible, cela dit tu fournis le plugin_id dans l'URL d'ouverture de la popup, du coup je vois pas pourquoi le behavior n'est pas appelé !
Dotclear addicted since 2004
Hors ligne
Il faut faire un ticket ? (gros espoir)
Hors ligne
Hors ligne
le thème est ici sur Github
Hors ligne
J'ai forké et fait une première PR, mais spa fini, y'a encore des trucs qui ne fonctionnent pas…
Mais pas ce soir :-)
Je continue demain…
Dotclear addicted since 2004
Hors ligne
J'ai intégré ta PR. Entre temps j'avais modifié admin.js qui marche maintenant à peu près comme je le voulais. Si ça gêne que je fasse des modifications en même temps, dis-le moi j'arrête tout de suite :D
Hors ligne
Bon, ça va être plus compliqué que prévu, le _prepend.php du thème n'est pas chargé quand on affiche une popup média. Du coup les behaviours ne sont pas connus.
Va falloir que je regarde les conséquences de prévoir ça avant d'aller plus loin…
Dotclear addicted since 2004
Hors ligne
Merci. Je suis un peu rassuré de voir que j'étais sur la bonne piste...
Hors ligne
Bon, ça sera à partir de la 2.19 (cf https://git.dotclear.org/dev/dotclear/c … d174a8a56), en attendant masque le bouton "Changer"
Avec ce commit, j'ai droit à une alerte "Bonjour !" :-)
Ça sera peut-être pas suffisant mais c'est un début ; il faudra peut-être un behaviour supplémentaire du côté de media.php, un peu équivalent à celui appelé dans media_item.php (adminPopupMedia).
Dotclear addicted since 2004
Hors ligne
Merci beaucoup ! Si tu as droit au "Bonjour", c'est un grand progrès. Je vais copier tes changements des fichiers de dotclear chez moi
Yapuka de mon côté écrire le code et voir si j'arrive à récupérer le window.opener comme je l'espère
Hors ligne
Ça marche parfaitement, merci encore. Il me reste à trouver comment passer un paramètre pour savoir quel bouton a été cliqué, mais je devrais me débrouiller maintenant.
Le thème sortira pour la version 2.19 de dotclear ;)
Hors ligne
Ça marche parfaitement, merci encore. Il me reste à trouver comment passer un paramètre pour savoir quel bouton a été cliqué, mais je devrais me débrouiller maintenant.
Le thème sortira pour la version 2.19 de dotclear ;)
\o/
Dotclear addicted since 2004
Hors ligne
Vous n'êtes pas identifié(e).