Afficher le logo du groupe

Re: Afficher le logo du groupe

par Luiggi Sansonetti,
Nombre de réponses : 16
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Titulaires du Moodle Course Creator Certificate Avatar Traducteurs

Ou si vous voulez afficher l'image du groupe comme dans les forums ici présents... ?


Moyenne des évaluations Utile (1)
En réponse à Luiggi Sansonetti

Re: Afficher le logo du groupe

par djedai djedai,

Bonjour,

Excusez moi pour mon manque de précision.

Je suis sur le thème Eguru. Je pensais le mettre dans le header (header.mustache) quand l'utilisateur est authentifié et qu'il est dans au moins un groupe.

Ca ressemble à ce que tu as fait Luiggi mais j'aimerai l'afficher sur tout le site dès lors que l'utilisateur est connecté et qu'il appartient au moins à un groupe.

La fonction print_group_picture peut s'appeler directement dans le template ?

Merci pour votre aide

En réponse à djedai djedai

Re: Afficher le logo du groupe

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs
Bonjour,

De quels groupes s'agit-il ? De groupes créés sur la page d'accueil ? Dans un cours particulier ?

Depuis le template mustache vous n'aurez pas accès aux données désirées. Le template se contente d'afficher les informations envoyées depuis le fichier PHP lui faisant appel avec la méthode render_from_template(). Si on se réfère au thème eguru et au template header.mustache que vous citez, vous avez un exemple ici :


Les données sont stockées dans le tableau associatif $templatecontext puis passées en paramètre dans render_from_template() pour être finalement affichées dans le fichier mustache.

N'hésitez pas à consulter la documentation sur les templates pour vous familiariser avec le concept.

Tout ça pour dire que... ce n'est pas trivial sourire ! Est-ce que le jeu en vaut la chandelle ?

Seb

PS : si vous modifiez directement les fichiers du thème eguru, ce n'est pas une bonne pratique car à chaque mise à jour de votre thème il faudra ré-appliquer les modifications. Si c'est le cas, jetez un œil à cette page pour en savoir plus sur les thème enfant.

En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,

Bonjour Sébastien,


Merci pour ta réponse Oui. Ce sont des groupes crées dans des cours. Ca sera donc possible que l'utilisateur soit dans plusieurs groupes portant le même nom.

Idéalement j'aimerai afficher la première image de groupe trouvé.


Est ce que dans le header.php du template  je peux tester si l'utilisateur est dans un groupe et si oui appeler la fonction print_group_picture ?

il existe une fonction pour tester l'appartenance à un groupe ?

Je peux appeler la librairie depuis le header.PHP ?


Merci

En réponse à djedai djedai

Re: Afficher le logo du groupe

par djedai djedai,

Bonjour,

J'ai essayé de passer des paramètres statiques correspondant à un groupe existant dans la fonction print_group_picture en associant une valeur img dans le tableau templatecontext depuis le header

Header.php :

require_once($CFG->libdir . '/weblib.php');
$img = print_group_picture(5,6,true,false,false);

$templatecontext = [
    'img' => $img,
    ];


dans le header.mustache j'ai ajouté :

{{img}}

mais rien ne s'affiche.


J'ai testé en passant une chaîne au lieu de la fonction dans le tableau $templatecontext mais idem rien.

Est ce que je procède mal ?

En réponse à djedai djedai

Re: Afficher le logo du groupe

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs

As-tu pensé à passer ta plateforme en mode débogage pour voir les éventuelles erreurs ?

Seb

En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,

Merci sébastien.

CA me renvoie :

<br />
<b>Notice</b>:  Trying to get property of non-object in <b>/home/www/lib/weblib.php</b> on line <b>2560</b><br />
<!DOCTYPE html>


ca correspond à la fonction d'affichage du groupe.

En réponse à djedai djedai

Re: Afficher le logo du groupe

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs

Bonjour,

Regarde attentivement les paramètres de cette fonction. Tu constateras que le premier est de type objet et dans l'exemple que tu cites, tu lui passes en paramètre un entier.

Par ailleurs, je rebondis sur ta remarque:

Ce sont des groupes crées dans des cours. Ca sera donc possible que l'utilisateur soit dans plusieurs groupes portant le même nom. Idéalement j'aimerai afficher la première image de groupe trouvé.

Comment espères-tu donc choisir quel avatar de groupe affiché si cela concerne potentiellement plusieurs cours qui contiennent chacun plusieurs groupes ?

Du coup, j'avoue ne pas trop saisir l'utilité de la chose. Pourrais-tu nous en dire plus de manière globale sur les objectifs de cet affichage et sur l'organisation "pédagogique" de ta plateforme ?


Seb

En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,

Re Sébastien,

J'utilise Moodle comme plateforme de mise à disposition de contenus scormés  en B to B pour des clients pro et grand compte sur abonnement (d'une durée d'un an).

Dans cette plateforme, je vais gérer des clients qui vont juste avoir besoin de consulter le contenu et d'autres grands comptes qui vont apprécier avoir une personnalisation notamment avec le logo de leur entreprise + un profil "inspecteur ou statisticien" pour suivre l'apprentissage des salariés.

Les contenus ne seront pas mis à jour régulièrement.

J'utilise pour cela le plugin coupon qui me semble souple car il me permet d'envoyer des coupons (avec une période) et le client les utilise quand il veut en s'occupant lui même de créer son compte.

je gère plusieurs contenus scormés. Un par cours.

Dans chaque cours, pour le "petit" client, je ne m'embête pas avec les groupes. Je génère des coupons.

Par contre, pour les grands comptes, je crée un groupe par cours (donc autant de groupe que de cours par client avec la même image dans chaque groupe) et à cela je leur crée un profil "inspecteur / statisticien".

Mon organisation te semble pertinente ?

Je te remercie pour ton aide sur la fonction. Je vais bien finir par y arriver ;=)



En réponse à djedai djedai

Re: Afficher le logo du groupe

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs

Hello Jérôme,

Je ne sais pas combien de grands comptes tu souhaites gérer à terme (autant que possible j'imagine sourire ) mais si tu souhaites une réelle personnalisation du thème pour chaque entreprise, il serait peut-être opportun de regarder du côté de l'option des thèmes de cohortes :


Tu aurais donc une cohorte par entreprise contenant l'ensemble des personnels de cette entreprise et pour chaque cohorte un thème associé. Chaque thème associé serait un thème enfant de ton thème principal. Voici comment créer un thème enfant :


Avantages :
  • personnalisation fine du thème pour chaque entreprise (couleur, logo principal, etc)
  • les mises à jour du thème principal s'appliquent sur les thèmes enfant
  • pas de développement à maintenir entre chaque version

Inconvénient :
  • Duplication du thème fastidieuse si tu gères un grand nombre de grands comptes

Seb
Moyenne des évaluations Utile (1)
En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,

Salut Sébastien !

Merci pour ton retour. J'avais remarqué que pour les cohortes, je ne pouvais pas gérer de période d'inscription facilement. Le plugin coupon ne proposait pas cette possibilité pour les cohortes. Il le propose uniquement pour les cours.

J'ai pas mal avancé en appelant les informations nécessaires (user, groupe,picture,contextid) depuis le header.php du thème eguru.

Cependant j'ai remarqué que la variable $userid ne renvoyait pas de valeur sur certaines pages de moodle.

J'ai pourtant fait :

global $USER;
$userid = $USER->id;

et j'ai vérifié que mon session cookie path était bien à "/".

La variable globale $USER ne s'appelle pas partout dans Moodle ?

En réponse à djedai djedai

Re: Afficher le logo du groupe

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs

Hello,

Quelles pages sont concernées ?


Seb
En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,

Salut Seb,

Seul la page url/?redirect=0 renvoie les éléments.



Les autres URL n'arrivent pas à renvoyer le userid :

url/my/

url/user/files.php,

url/mod/scorm/view.php?id=5

url/user/index.php?id=6



En réponse à djedai djedai

Re: Afficher le logo du groupe

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs

Hello Jérôme,

J'ai jeté un œil sur des fonctions de thème que j'avais faites notamment pour la page cours. J'avais créé une fonction dans la librairie du thème (fichier lib.php à la racine du thème) et déclaré la variable globale $USER dans celle-ci :

/**
 * Return swicthing role button
 *
 * @return string HTML
 */
function theme_cleanupf_rolebutton() {

	  global $DB, $USER, $CFG, $PAGE;
...
...
...
...
}

J'avais ensuite appelé la fonction directement dans mon template PHP de cours (course.php) :

theme_cleanupf_rolebutton();

Dans ce template, ça n'avait pas posé de soucis pour récupérer les infos.


Seb

En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,
Il semble que les variables global $USER et $CFG ne s’appellent pas partout. Non authentifié, je récupère bien le chemin vers mon fichier config.php et l'id du user (0).
Dès que je suis authentifié, les valeurs sont vides. seul sur la page url/?redirect j'arrive à récupérer l'id user, le chemin...

Mystère !

Voici le code que j'ai intégré dans le header.php du thème. Il me permet d'écraser la variable $logo appeler dans le header et afficher le logo du groupe.

<code>
/ajout de la gestion du logo pour les groupes
global $USER,$CFG;
$chemin = $CFG->dirroot . '/config.php';
$userid = $USER->id;

$conn = mysqli_connect('', '', ','');

$req= 'SELECT groupid FROM mdl_groups_members WHERE userid ='.$userid;

$res = $conn->query($req);

while($data = mysqli_fetch_array($res))
    {
 $groupe=$data['groupid'];
    }
   
if (!empty($groupe)) {

$req2= 'SELECT picture FROM mdl_groups WHERE id ='.$groupe;
$res2 = $conn->query($req2);


while($datas = mysqli_fetch_array($res2))
    {
 $picture=$datas['picture'];
    }
}

if (!empty($picture)) {

$req3= 'SELECT contextid FROM mdl_files WHERE id ='.$picture;
$res3 = $conn->query($req3);


while($datass = mysqli_fetch_array($res3))
    {
 $context=$datass['contextid'];
    }
}

mysqli_close($conn);

if (!empty($groupe) && !empty($picture) && !empty($context))
{
$logo='https://url/pluginfile.php/'.$context.'/group/icon/'.$groupe.'/f1?rev='.$picture;
}</code>


En réponse à djedai djedai

Re: Afficher le logo du groupe

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs
En parcourant rapidement l'arborescence du thème eguru, il se trouve que le fichier header.php est appelé uniquement sur le layout frontpage.php. Comme son nom l'indique celui-ci est utilisé uniquement sur la page d'accueil clin d’œil

Si tu reportes tes modifications dans l'ensemble des layouts concernés, en particulier columns2.php, ça devrait fonctionner. Du coup, il serait pertinent de convertir ton code en une fonction à placer dans le fichier lib.php du thème eguru afin d'éviter de devoir faire des copier/coller sur chaque layout.

D'autres part, je te suggère vivement d'utiliser l'API Moodle pour accéder aux données présentes dans la base de données :

Seb
En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,

Merci Sébastien ! Oui

Ca marche bien. Je vais peaufiner en intégrant tout dans une fonction et en utilisant l'API pour la base de données.