Question sur un autoload

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Question sur un autoload

    Bonjour, je souhaite récupérer des valeur via un champ Awesomplete.
    Voici mon input:
    Code HTML:
    <input type="text" name="search" id="mod-mbsearch-searchword" class="mod-mbsearch form-control awesomplete">
    Ensuite mon code de récup selon la procédure ajax du site

    Code HTML:
    <?php
    $result = MbsearchHelper::getAutoTitles();
    echo $result ;
    ?>
    
    <script>
    var ajax = new XMLHttpRequest();
    
    ajax.open("GET", "https://restcountries.com/v2/lang/fr", true);
    ajax.onload = function() {
    var list = JSON.parse(ajax.responseText).map(function(i) { return i.name; });
    new Awesomplete(document.querySelector("#mod-mbsearch-searchword"),{ list: list });
    };
    ajax.send();
    
    </script>
    et donc ici mon MbsearchHelper
    Code HTML:
    public static function getAutoTitles()
    {
    $db = Factory::getDbo();
    
    $query = $db->getQuery(true)
    ->select('title')
    ->from('`#__mes_titles`')
    ->order('title');
    $autotitles = json_encode($db->setQuery($query)->loadObjectList());
    
    return $autotitles;
    }
    Je ne suis pas un pro de l'ajax, mais en gros je créé mon json et ensuite je l’intègre.
    Dans cet exemple mon champ se compléte bien avec restcountries.
    Quelqu'un peut-il m'aider pour faire en sorte que cela fonction avec mon résultat sql ?
    Merci pour votre aide
    Dernière édition par Slushgood à 24/01/2022, 17h19

  • #2
    Bonjour Slushgood,

    Pourrais-tu me copier ton fichier html que je puisse faire des tests stp ?

    Merci par avance et passe une belle journée !

    Commentaire


    • #3
      Oula! Il n'y a pas que le fichier Html :-).
      Mais je vais essayer de te faire un montage.
      Code HTML:
      <?php
      $document = Factory::getDocument();
      
      $mediaPath = Uri::base() ."media/com_monsite";
      $document->addStyleSheet($mediaPath.'/css/book.css');
      
      $assetPath = URI::base() ."modules/mod_mbsearch/assets";
      $document->addStyleSheet($assetPath.'/jQuery-autoComplete/jquery.auto-complete.css');
      $document->addStyleSheet($assetPath.'/awesomplete/awesomplete.css');
      $document->addScript($assetPath.'/awesomplete/awesomplete.js');
      use Joomla\CMS\Factory;
      use Joomla\CMS\HTML\HTMLHelper;
      use Joomla\CMS\Language\Text;
      use Joomla\CMS\Router\Route;
      use Joomla\CMS\MVC\View\HtmlView;
      use J4x\Module\Microbib\Site\Helper\MbsearchHelper;
      
      defined('_JEXEC') or die;
      
      // Including fallback code for the placeholder attribute in the search field.
      
      $lang = $app->getLanguage();
      $lang->load('com_microbib', JPATH_SITE);
      
      
      $input = '<input type="text" name="search[lookfor][]" id="mod-mbsearch-searchword" class="mod-mbsearch form-control awesomplete" value="' . htmlspecialchars($app->input->get('q', '', 'string'), ENT_COMPAT, 'UTF-8') . '"'
      . ' placeholder="' . Text::_('MOD_MBSEARCH_SEARCH_VALUE') . '">';
      
      $showLabel = $params->get('show_label', 1);
      $labelClass = (!$showLabel ? 'visually-hidden ' : '') . 'mbsearch';
      $label = '<label for="mod-monsite-searchword' . $module->id . '" class="' . $labelClass . '">' . $params->get('alt_label', Text::_('JSEARCH_FILTER_SUBMIT')) . '</label>';
      
      $output = '';
      
      if ($params->get('show_button', 0))
      {
      $output .= $label;
      $output .= '<div class="mod-mbsearch input-group">';
      $output .= $input;
      $output .= '<button class="btn btn-primary" type="submit"><span class="icon-search icon-white" aria-hidden="true"></span> ' . Text::_('JSEARCH_FILTER_SUBMIT') . '</button>';
      $output .= '<span style="display:none;" id="info">La recherche doit contenir au moins 4 caractères</span>';
      $output .= '</div>';
      }
      else
      {
      $output .= $label;
      $output .= $input;
      }
      
      if (isset($_SESSION['book.layout'])){
      $searchType= $_SESSION['book.layout'];
      } else {
      $searchType = "listing";
      }
      
      
      ?>
      <script src="modules/mod_mbsearch/assets/awesomplete/awesomplete.js" type="text/javascript"></script>
      <form class="mod-mbsearch js-monsite-searchform form-search" action="<?php echo Route::_($route); ?>" onsubmit="return validateForm();" method="get" role="search">
      <input type="hidden" name="option" value="com_microbib" >
      <input type="hidden" name="view" value="books" >
      <input type="hidden" name="Itemid" value="<?php echo $mitemid; ?>" />
      <input type="hidden" value="mod" name="typeSearch">
      <?php
      if($searchType == "gallery"){
      ?><input type="hidden" name="layout" value="gallery" >
      <input type="hidden" name="nb_column" value="span3" >
      <?php
      }elseif($searchType=="listing"||$searchType=="user "){
      ?><input type="hidden" name="layout" value="listing" >
      <?php
      }
      ?>
      <input type="hidden" name="_resetState" value="1" />
      <input type="hidden" name="filter_order" value="<?php echo $params->get('filter_order')?>" >
      <input type="hidden" name="filter_order_Dir" value="<?php echo $params->get('filter_order_Dir')?>" >
      <input type="hidden" name="search[bool][]" value=""/>
      <input type="hidden" name="search[type][]" value="allfields"/>
      <?php echo $output; ?>
      
      <?php $show_advanced = $params->get('advancedsearch', 0); ?>
      <?php if ($show_advanced == 2) : ?>
      <br>
      <a href="<?php echo Route::_($route); ?>" class="mod-mbsearch__advanced-link"><?php echo Text::_('MOD_MBSEARCH_FIELDSET_BASIC_SHOW_ADVANCED _LABEL'); ?></a>
      <?php elseif ($show_advanced == 1) : ?>
      <div class="mod-mbsearch__advanced js-monsite-advanced">
      <?php
      $branches=[];
      if($params->get('genres')==1){$branches['MOD_MBSEARCH_GENRES'] = $genres;}
      if($params->get('supports')==1){$branches['MOD_MBSEARCH_SUPPORTS'] = $supports;}
      if($params->get('publics')==1){$branches['MOD_MBSEARCH_PUBLICS'] = $publics;}
      if($params->get('origins')==1){$branches['MOD_MBSEARCH_ORIGINS'] = $origines;}
      if($params->get('sites')==1){$branches['MOD_MBSEARCH_SITES'] = $libraries;}
      
      echo MbsearchHelper::getGetFields($branches, $params); ?>
      </div>
      <?php endif; ?>
      
      </form>
      
      <script>
      var ajax = new XMLHttpRequest();
      
      ajax.open("GET", "http://localhost/joomla4/index.php?option=com_monsite&task=books.suggest&format=json&tmpl=component", true);
      ajax.onload = function() {
      var list = JSON.parse(ajax.responseText).map(function(i) { return i.title; });
      new Awesomplete(document.querySelector("#mod-mbsearch-searchword"),{ list: list });
      };
      ajax.send();
      
      </script>
      
      <script>
      function validateForm(){
      if (document.getElementById("mod-mbsearch-searchword").value.length<4)
      { document.getElementById("info").style.display='blo ck';
      return false;
      }
      
      else
      return true;
      }
      
      </script>
      fichier BooksController
      Code HTML:
      public function suggest()
      {
      $app = $this->app;
      $app->mimeType = 'application/json';
      
      // Ensure caching is disabled as it depends on the query param in the model
      $app->allowCache(false);
      
      $suggestions = $this->getAutoTitles();
      
      // Send the response.
      $app->setHeader('Content-Type', $app->mimeType . '; charset=' . $app->charSet);
      $app->sendHeaders();
      echo '{ "suggestions": ' . json_encode($suggestions) . ' }';
      }
      
      public static function getAutoTitles()
      {
      $db = Factory::getDbo();
      
      $query = $db->getQuery(true)
      ->select('title')
      ->from('`#__microbib_books`')
      ->order('title');
      $autotitles = $db->setQuery($query)->loadObjectList();
      
      return $autotitles;
      }
      pour l'instant voici ce que j'obtient sur mon http:
      Cliquez sur l'image pour l'afficher en taille normale  Nom : apercu.jpg  Affichages : 0  Taille : 9,8 Ko  ID : 2036400
      merci votre aide
      Dernière édition par Slushgood à 25/01/2022, 09h08

      Commentaire


      • #4
        Bon je ne sais pas si tu vas pouvoir faire quelque chose avec ça mais l'idée est là

        Commentaire


        • #5
          Finalement en recopiant le code j'ai vu mon erreur:
          $app->sendHeaders();
          echo json_encode($suggestions);
          pas besoin d'encapsulation :-)
          Merci

          Commentaire


          • #6
            Okay donc j'ai compris que tu avais réussi ? Bravo à toi si c'est le cas

            Commentaire

            Annonce

            Réduire
            Aucune annonce pour le moment.

            Partenaire de l'association

            Réduire

            Hébergeur Web PlanetHoster
            Travaille ...
            X