« WATERBEAR:Menus contextuels rediriges » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 52 : | Ligne 52 : | ||
---- | |||
<nowiki><?php | |||
// | |||
// ADB | |||
// situé dans le répertoire: include/plugins/div | |||
// | |||
/** | |||
* plugin_div_mc_redirect() | |||
* | |||
* Ce plugin permet de rediriger vers un un menu contextuel en fonction de certaines caratéristiques de la notice | |||
* | |||
* paramètres ID : ID_notice | |||
* paramètres registre : | |||
* type_obj => type de l'objet | |||
* plugin_formate => plugin utilisé pour récupérer l'info | |||
* choix [val1, val2, val3,..., _else][nom_plugin OU plugin_formate|choix] : liste des valeurs possibles. A chaque valeur on associe SOIT | |||
* un nom de plugin SOIT (de manière récursive) une nouvelle valeur à tester. la Clef _else permet de mettre une valeur par défaut | |||
* | |||
* Ce plugin retourne le menu contextuel recherché | |||
* | |||
*/ | |||
function plugin_div_mc_redirect ($parametres) { | |||
// | |||
$plugin_formate=$parametres["plugin_formate"]; | |||
$choix=$parametres["choix"]; | |||
$type_obj=$parametres["type_obj"]; | |||
$ID_notice=$parametres["ID"]; | |||
// | |||
// 1) on récupère la notice | |||
$notice=get_objet_xml_by_id($type_obj, $ID_notice); | |||
if ($notice == "") { | |||
$erreur="la notice de type $type_obj ayant l'ID $ID_notice n'existe pas"; | |||
} | |||
// | |||
$nom_plugin=plugin_mc_redirect_analyse_choix($notice, $plugin_formate, $choix); | |||
if (!is_array($nom_plugin)) { | |||
$erreur="impossible de determiner la grille a utiliser : $nom_plugin"; | |||
} | |||
// | |||
// on récupère le menu contextuel | |||
$plugin=array(); | |||
$plugin["nom_plugin"]=$nom_plugin['nom_plugin']; | |||
$plugin["parametres"]=array("type_obj"=>$type_obj, "ID"=>$ID_notice); | |||
$retour=applique_plugin($plugin, array()); | |||
return ($retour); | |||
} | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
function plugin_mc_redirect_analyse_choix ($notice, $plugin_formate, $choix) { | |||
// | |||
// 1) on formate la chaine | |||
$tmp=applique_plugin($plugin_formate, array("notice"=>$notice)); | |||
if ($tmp["succes"] != 1) { | |||
return("Erreur lors du formatage : ".$tmp["erreur"]); | |||
} | |||
$chaine=$tmp["resultat"]["texte"]; | |||
// | |||
// on récupère les valeurs correspondant à cette chaine | |||
if (isset($choix[$chaine])) { | |||
$resultat=$choix[$chaine]; | |||
} elseif (isset($choix["_else"])) { | |||
$resultat=$choix["_else"]; | |||
} else { | |||
return("aucune valeur parametree"); | |||
} | |||
// | |||
// on regarde s'il y a des sous-valeurs | |||
if (isset($resultat["plugin_formate"])) { | |||
$resultat2=plugin_mc_redirect_analyse_choix ($notice, $resultat["plugin_formate"], $resultat["choix"]); | |||
return($resultat2); | |||
} else { | |||
return ($resultat); | |||
} | |||
} | |||
?></nowiki> | |||
---- | |||
Version du 29 septembre 2020 à 16:36
But
Cet article donne quelques adaptations sur les menus contextuels selon son type de contenu.
Dans la table "obj_biblio_acces" de la base de données, il y a plusieurs type d'enregistrements. On y trouve les documents classiques (livre, revue, DVD,...). Mais on y trouve aussi d'autres informations comme les séries et les collections qui n'ont pas la même fonctionnalité.
Ces types d'informations sont discriminées successivement selon trois champs dans cette table: le champs "a_type_doc", le champs "a_niveau_biblio" et le champs "a_niveau_hierarchique". Dans l'écran de catalogage, ces informations sont encodées au niveau de la section "label" en l'absence de masque. Le champs "a_type_doc_synth" regroupe les trois précédents.
Ainsi, par exemple, un livre est noté "am" ou "am0"; une collection devient "ak1"; une série sera "am1". Or dans l'exemple précédent, seul le livre peut être prêté.
Dans l'écran de recherche des documents, sous l'onglet liste, on peut actionner des menus contextuels sur divers éléments. Pour les trois cas cités ci-dessus, ce menu est important et comprend tout l'aspect des réservations et des prêts. Dans les cas des séries et des collections, ce menu doit être réduit au catalogage et éventuellement à l'affichage individuel (onglet "notice".
Définitions des codes
Pour accéder à la liste de ces codes, il faut ouvrir l'écran de catalogage d'un document. Ensuite dans la barre d'outil du dessus, il y a une icône intitulée "changer le masque" . En cliquant dessus apparaît le menu contextuel suivant:
On choisit l'entrée "aucun masque". L'écran s'adapte. Dans l'onglet "Description" sous la section "label", nous trouvons les trois niveaux décrits ci-dessus.
A côté du libellé, on trouve une icône de style roue dentée . Elle donne accès à la liste des codes correspondants.
Voici les listes correspondantes par défaut.
- Codes des types de documents
- Codes des niveaux bibliographiques
- Codes des niveaux hiérarchiques
ATTENTION: Si vous voulez modifier ces codes faites-le en connaissance de cause car nombre de ceux-ci sont utilisés dans le registre. En les modifiant, vous risquez que certains écrans ne fonctionnent plus.
<?php // // ADB // situé dans le répertoire: include/plugins/div // /** * plugin_div_mc_redirect() * * Ce plugin permet de rediriger vers un un menu contextuel en fonction de certaines caratéristiques de la notice * * paramètres ID : ID_notice * paramètres registre : * type_obj => type de l'objet * plugin_formate => plugin utilisé pour récupérer l'info * choix [val1, val2, val3,..., _else][nom_plugin OU plugin_formate|choix] : liste des valeurs possibles. A chaque valeur on associe SOIT * un nom de plugin SOIT (de manière récursive) une nouvelle valeur à tester. la Clef _else permet de mettre une valeur par défaut * * Ce plugin retourne le menu contextuel recherché * */ function plugin_div_mc_redirect ($parametres) { // $plugin_formate=$parametres["plugin_formate"]; $choix=$parametres["choix"]; $type_obj=$parametres["type_obj"]; $ID_notice=$parametres["ID"]; // // 1) on récupère la notice $notice=get_objet_xml_by_id($type_obj, $ID_notice); if ($notice == "") { $erreur="la notice de type $type_obj ayant l'ID $ID_notice n'existe pas"; } // $nom_plugin=plugin_mc_redirect_analyse_choix($notice, $plugin_formate, $choix); if (!is_array($nom_plugin)) { $erreur="impossible de determiner la grille a utiliser : $nom_plugin"; } // // on récupère le menu contextuel $plugin=array(); $plugin["nom_plugin"]=$nom_plugin['nom_plugin']; $plugin["parametres"]=array("type_obj"=>$type_obj, "ID"=>$ID_notice); $retour=applique_plugin($plugin, array()); return ($retour); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function plugin_mc_redirect_analyse_choix ($notice, $plugin_formate, $choix) { // // 1) on formate la chaine $tmp=applique_plugin($plugin_formate, array("notice"=>$notice)); if ($tmp["succes"] != 1) { return("Erreur lors du formatage : ".$tmp["erreur"]); } $chaine=$tmp["resultat"]["texte"]; // // on récupère les valeurs correspondant à cette chaine if (isset($choix[$chaine])) { $resultat=$choix[$chaine]; } elseif (isset($choix["_else"])) { $resultat=$choix["_else"]; } else { return("aucune valeur parametree"); } // // on regarde s'il y a des sous-valeurs if (isset($resultat["plugin_formate"])) { $resultat2=plugin_mc_redirect_analyse_choix ($notice, $resultat["plugin_formate"], $resultat["choix"]); return($resultat2); } else { return ($resultat); } } ?>
Intégration dans le registre
Ces corrections sont a faire dans le registre. A ce stade, vous pouvez les personnaliser. Pour les appliquer, vous pouvez soit les intégrer dans l'écran d'importation au niveau de l'administration du registre, soit exécuter, en commande de ligne sous Linux, le script contenu dans le fichier zippé ci-dessous:
Télécharger le fichier ZIP
Ce fichier est à dézipper sous Linux dans un répertoire de travail quelconque sur la machine où se trouve les sources du site WEB de Waterbear:
unzip biblio.mc.redirect.registre.zip
Dans ce répertoire généré, se trouvent un sous-répertoire "registre" contenant les fichiers texte (.txt) où se trouvent les enregistrements à injecter dans le registre. Ce contenu a le format de celui utilisé dans l'interface d'exportation et d'importation de l'administration du registre de Waterbear. On trouve également un fichier de script PHP. Dans ce fichier, il faut adapter la variable "$racinewaterbear" qui doit contenir le chemin de la racine du logiciel WEB de Waterbear où on retrouve le fichier "bib.php". Par exemple, si ce chemin est "/web/waterbear" comme dans notre exemple d'installation, la variable devient (ne pas oublier la barre oblique finale "/"):
$racinewaterbear = "/web/waterbear/";
Ensuite, en commande de ligne sous Linux, positionnez-vous dans le répertoire du script et exécutez-le:
php ./maj.registre.liste.fichier.php