Ajouter un index Titre de revue

Ajouter un index Titre de revue

Cet ajout permet de rechercher rapidement un Titre de revue en cherchant dans l'index Titre et en ajoutant un filtre sur le ou les types de documents correspondant à vos revues.

Le code fonctionnel avec ElasticSearch est beaucoup plus complexe que ce qu'il était avant et il certaines adaptations peuvent être nécessaires selon les catalogues. Voici donc un article présentant les différents cas de figures et le code approprié.

L'information CODE_TYPE_DOC, surligné en jaune, doit être changé par le code du ou des type.s de document sur lesquels vous voulez filtrer la recherche (l'opérateur OR est appliqué). Si vous avez plus d'un code à inscrire, veuillez les mettre entre apostrophes et séparés par des virgules comme ceci : ['PER','PERNUM']

OPAC


Info
Code à ajouter dans la préférence OPACUserJS

Ajouter l'index dans la recherche simple seulement

Quote
//rajouter index titre de revue recherche simple
  $("#masthead_search option[value='ti']").after(`<option class="option-titre-revue" value="ti,phr">Titre de revue</option>`);
  
  const typesTitreRevue = ['CODE_TYPE_DOC'];
  
  $('#masthead_search').on('change', function() {
    if($(this).find('option:selected').hasClass('option-titre-revue')) {
      typesTitreRevue.forEach(typeDocumentCourant =>
        $('#searchform').append(`<input type="hidden" class="type_document_titre_revue" id="type_document_${typeDocumentCourant}" name="limit" value="mc-itemtype:${typeDocumentCourant}">`)
      );
    } else {
      $('.type_document_titre_revue').remove();
    }
  });
  
  const valeursURL = new URLSearchParams(window.location.search);
  const limiteActuelle = valeursURL.getAll('limit');
  let typesChoisis = [];
  
  if(limiteActuelle && limiteActuelle.length) {
  typesChoisis = limiteActuelle.filter(limiteCourante => limiteCourante.indexOf('mc-itemtype:') >= 0).map(limiteCourante => limiteCourante.split(':')[1]);

    if(typesChoisis.sort().toString() == typesTitreRevue.sort().toString()) {
      $("option.option-titre-revue").prop('selected', true).change();
    }
  }


Ajouter l'index dans la recherche avancée seulement


Quote
//rajouter index titre de revue recherche avancée 
  $("#search-field_0 option[value='ti,phr']").after(`<option class="option-titre-revue" value="ti,phr">Titre de revue</option>`);
  $("#search-field_1 option[value='ti,phr']").after(`<option class="option-titre-revue" value="ti,phr">Titre de revue</option>`);
  $("#search-field_2 option[value='ti,phr']").after(`<option class="option-titre-revue" value="ti,phr">Titre de revue</option>`);
  
  const typesTitreRevue = ['CODE_TYPE_DOC'];
  
  $('#booleansearch').on('change', function() {
    if($(this).find('option:selected').hasClass('option-titre-revue')) {
      typesTitreRevue.forEach(typeDocumentCourant =>
        $('#booleansearch').append(`<input type="hidden" class="type_document_titre_revue" id="type_document_${typeDocumentCourant}" name="limit" value="mc-itype:${typeDocumentCourant}">`)
      );
    } else {
      $('.type_document_titre_revue').remove();
    }
  });
  
  const valeursURL = new URLSearchParams(window.location.search);
  const limiteActuelle = valeursURL.getAll('limit');
  let typesChoisis = [];
  
  if(limiteActuelle && limiteActuelle.length) {
  typesChoisis = limiteActuelle.filter(limiteCourante => limiteCourante.indexOf('mc-itemtype:') >= 0).map(limiteCourante => limiteCourante.split(':')[1]);

    if(typesChoisis.sort().toString() == typesTitreRevue.sort().toString()) {
      $("option.option-titre-revue").prop('selected', true).change();
    }
  }

Ajouter l'index dans les deux formulaires 


Quote
//Ajout l'index dans recherche avancée ET recherche simple
 const typesTitreRevue = ['CODE_TYPE_DOC'];
  const valeursURL = new URLSearchParams(window.location.search);
  const limiteActuelle = valeursURL.getAll('limit');
  let typesChoisis = [];
  
//rajouter index titre de revue recherche simple
  $("#masthead_search option[value='ti']").after(`<option class="option-titre-revue" value="ti,phr">Titre de revue</option>`);
  
  $('#masthead_search').on('change', function() {
    if($(this).find('option:selected').hasClass('option-titre-revue')) {
      typesTitreRevue.forEach(typeDocumentCourant =>
        $('#searchform').append(`<input type="hidden" class="type_document_titre_revue" id="type_document_${typeDocumentCourant}" name="limit" value="mc-itemtype:${typeDocumentCourant}">`)
      );
    } else {
      $('.type_document_titre_revue').remove();
    }
  });

  
  if(limiteActuelle && limiteActuelle.length) {
  typesChoisis = limiteActuelle.filter(limiteCourante => limiteCourante.indexOf('mc-itemtype:') >= 0).map(limiteCourante => limiteCourante.split(':')[1]);

    if(typesChoisis.sort().toString() == typesTitreRevue.sort().toString()) {
      $("option.option-titre-revue").prop('selected', true).change();
    }
  }
//rajouter index titre de revue recherche avancée 
    $("#search-field_0 option[value='ti,phr']").after(`<option class="option-titre-revue" value="ti,phr">Titre de revue</option>`);
  $("#search-field_1 option[value='ti,phr']").after(`<option class="option-titre-revue" value="ti,phr">Titre de revue</option>`);
  $("#search-field_2 option[value='ti,phr']").after(`<option class="option-titre-revue" value="ti,phr">Titre de revue</option>`);
  

  $('#booleansearch').on('change', function() {
    if($(this).find('option:selected').hasClass('option-titre-revue')) {
      typesTitreRevue.forEach(typeDocumentCourant =>
        $('#booleansearch').append(`<input type="hidden" class="type_document_titre_revue" id="type_document_${typeDocumentCourant}" name="limit" value="mc-itemtype:${typeDocumentCourant}">`)
      );
    } else {
      $('.type_document_titre_revue').remove();
    }
  });

if(limiteActuelle && limiteActuelle.length) {
  typesChoisis = limiteActuelle.filter(limiteCourante => limiteCourante.indexOf('mc-itemtype:') >= 0).map(limiteCourante => limiteCourante.split(':')[1]);

    if(typesChoisis.sort().toString() == typesTitreRevue.sort().toString()) {
      $("option.option-titre-revue").prop('selected', true).change();
    }
  }

INTRANET

Info
Code à ajouter dans la préférence système IntranetUserJS.
Ce n'est pas possible d'ajouter l'index dans la barre de recherche simple ou dans le formulaire de recherche avancée seulement. Si vous avez des index à gauche de votre barre de recherche simple, vous aurez l'index Titre de revue dans le menu déroulant. Il vous faudra utiliser le code dans la section Ajouter l'index dans la recherche simple et la recherche avancée de l'Intranet.

Par contre, si vous n'avez pas de menu déroulant d'index à gauche de votre barre de recherche simple, vous pouvez utiliser le code simplifier dans la section Ajouter l'index dans la recherche avancée de l'Intranet (aucun menu d'index en recherche simple). 


Ajouter l'index dans la recherche simple et la recherche avancée

Warning
Utilisez ce code dans l'Intranet si vous avez un menu déroulant d'index à gauche de votre barre de recherche simple

Quote
//rajouter index titre de revue recherche simple
  $("#idx.advsearch option[value='ti']").after(`<option class="option-titre-revue" value="ti,phr">Titre de revue</option>`);
const typesTitreRevue = ['CODE_TYPE_DOC'];
  const valeursURL = new URLSearchParams(window.location.search);
  const limiteActuelle = valeursURL.getAll('limit');

  
  $('#idx.advsearch').on('change', function() {
    if($(this).find('option:selected').hasClass('option-titre-revue')) {
      typesTitreRevue.forEach(typeDocumentCourant =>
        $('#search-form').append(`<input type="hidden" class="type_document_titre_revue" id="type_document_${typeDocumentCourant}" name="limit" value="mc-itemtype:${typeDocumentCourant}">`)
      );
    } else {
      $('.type_document_titre_revue').remove();
    }
  });

  
  if(limiteActuelle && limiteActuelle.length) {
  typesChoisis = limiteActuelle.filter(limiteCourante => limiteCourante.indexOf('mc-itemtype:') >= 0).map(limiteCourante => limiteCourante.split(':')[1]);

    if(typesChoisis.sort().toString() == typesTitreRevue.sort().toString()) {
      $("option.option-titre-revue").prop('selected', true).change();
    }
  }
  

  $('#searchterms').on('change', function() {
    if($(this).find('option:selected').hasClass('option-titre-revue')) {
      typesTitreRevue.forEach(typeDocumentCourant =>
        $('#searchterms').append(`<input type="hidden" class="type_document_titre_revue" id="type_document_${typeDocumentCourant}" name="limit" value="mc-itemtype:${typeDocumentCourant}">`)
      );
    } else {
      $('.type_document_titre_revue').remove();
    }
  });

if(limiteActuelle && limiteActuelle.length) {
  typesChoisis = limiteActuelle.filter(limiteCourante => limiteCourante.indexOf('mc-itemtype:') >= 0).map(limiteCourante => limiteCourante.split(':')[1]);

    if(typesChoisis.sort().toString() == typesTitreRevue.sort().toString()) {
      $("option.option-titre-revue").prop('selected', true).change();
    }
  }

Ajouter l'index dans la recherche avancée (aucun menu d'index en recherche simple)

Warning
Ne pas utiliser ce code si vous avez un menu déroulant d'index. Référez vous à la section précédente. Autrement, l'index Titre de revue apparaîtra en recherche simple, mais ne fonctionnera pas.

Quote
//rajouter index titre de revue recherche simple
const typesTitreRevue = ['CODE_TYPE_DOC'];
  function ajouterOptionTitreRevue() {
    $("select[name='idx']").each(function () {
      if ($(this).find(".option-titre-revue").length === 0) {
        $(this).find("option[value='ti']").after(
          `<option class="option-titre-revue" value="ti">Titre de revue</option>`
        );
      }
    });
  }

  ajouterOptionTitreRevue();
  $(document).on('click', '.addsearchline', function () {
    setTimeout(ajouterOptionTitreRevue, 200);
  });
  $('form').on('submit', function () {
    $('.titre_revue_limit').remove();
    $("select[name='idx']").each(function () {
      if ($(this).find('option:selected').hasClass('option-titre-revue')) {
        let champ = $(this).closest('tr').find("input[name='q']");
        let valeur = champ.val();
        if (valeur && !valeur.startsWith('"')) {
          champ.val(`"${valeur}"`);
        }
        typesTitreRevue.forEach(function (type) {
          $('<input>')
            .attr('type','hidden')
            .attr('name','limit')
            .attr('value',`mc-itemtype:${type}`)
            .addClass('titre_revue_limit')
            .appendTo('form');
        });
      }
    });
});

Code à ajouter si vous caché l'index Titre (expression)

Si vous avez du code qui cache l'index Titre (expression) dans le formulaire de recherche avancée, il faut ajouter ce code en-dessous : 
$("#booleansearch option[class='option-titre-revue']").show();//ne pas enlever ou déplacer, nécessaire au bon fonctionnement de l'index titre de revue

Si vous cachez l'index à l'OPAC seulement, ajoutez le code à la préférence OPACUserJS. 
Si vous cachez l'index à l'Intranet seulement, ajoutez le code à la préférence IntranetUserJS. 
Si vous cachez l'index dans les deux interfaces, ajouter le code dans les deux préférences, toujours en vous assurant de le placer plus bas que le code pour cacher l'index Titre (expression).

Par exemple :