Afficher des infos via AJAX

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

  • [RÉGLÉ] Afficher des infos via AJAX

    Bonjour,

    Je reviens vers vous pour un soucis dont je ne trouve pas la solution :

    Je dois afficher des infos structurées (des articles) dans un site, pour le faire j'ai créé un layout approprié, jusque là tout va bien.
    J'aimerais, lorsque je clique sur "détails", ouvrir le détail de l'article dans une modale JQuery, ici ça va toujours ...

    Lors du chargement de la modale, je passe une requête en AJAX sur un fichier php pour récupérer les infos de l'article ... ici ça comment à mer**** ...

    J'arrive bien a passer et récupérer des infos de la page appelée, ce qui me manque c'est de récupérer les infos de l'article dont je passe l'id en paramètre.

    Je peux utiliser des infos via une requête (voir ci-dessous), c’est un peu brut, mais c'est des tests) .

    Il est possible de travailler avec certaines fonctions du framework ( exemple Factory::getContainer()->get('DatabaseDriver') mais pas d'autre, selon la fonction demandée, j'ai des erreurs : throw new \Exception('Failed to start application', 500), même en essayant de charger l'application avec :

    Code:
        use Joomla\CMS\Factory;
    
        $app = Factory::getApplication('site');
        $app->execute();
    
        // Votre code personnalisé ici
        echo 'Application Joomla initialisée avec succès !';
    L'ide de base serait de récupérer un objet "$item" de l'article, histoire de pouvoir jouer avec comme dans un layout, mais je me tord les neurones sans y arriver

    Une idée de ce qui bloque, ou alors un autre moyen pour afficher ces infos dans la popup ?


    Ci-dessous : code qui fonctionne, mais uniquement en brut ... sans avoir accès à un objet "article".
    Code:
    <?php
    
    $articleId = $_GET['sNumArtJeu'];
    
    // Initialiser Joomla
    define('_JEXEC', 1);
    
    // Inclure le framework Joomla
    require_once __DIR__ . '../../../../../../includes/defines.php';
    require_once __DIR__ . '../../../../../../includes/framework.php';
    
    use Joomla\CMS\Factory;
    use Joomla\CMS\Table\Table;
    
    
    $db = Factory::getContainer()->get('DatabaseDriver');
    $query = $db->getQuery(true)
        ->select($db->quoteName(array('a.id', 'a.title', 'a.alias', 'a.introtext', 'a.fulltext', 'a.state', 'a.catid', 'a.created', 'a.modified','f.id','f.name', 'cf.value')))
        ->from($db->quoteName('#__content', 'a'))
        ->join('LEFT', $db->quoteName('#__fields_values', 'cf'), $db->quoteName('a.id') . ' = ' . $db->quoteName('cf.item_id'))
        ->join('LEFT', $db->quoteName('#__fields', 'f'), $db->quoteName('cf.field_id') . ' = ' . $db->quoteName('f.id'))
        ->where($db->quoteName('a.id') . ' = ' . (int) $articleId);
    
    $db->setQuery($query);
    $results = $db->loadObjectList();
    
    
    print_r($results);
    
    if ($results) {
        $article = new stdClass();
        $article->id = $results[0]->id;
        $article->introtext = $results[0]->introtext;
        $article->fulltext = $results[0]->fulltext;
    
        foreach ($results as $result) {
            if ($result->name) {
                $article->customFields[$result->name] = $result->value;
            }
        }
    
    }
    
    echo "*************************";
    
    var_dump($article);​
    Dernière édition par wd_newbie à 11/03/2025, 19h16

  • #2
    J'ai réussi a me débrouiller pour faire ce que je voulais :

    - un layout qui liste les articles de de la catégorie X avec une mise en page image personnalisés + champs perso
    - un bouton "détail" qui affiche une popup avec le détail de l'article (dans le sens article = marchandise)
    - une mise en page qui reprend les informations des champs persos, de l'image d'intro et du contenu de l'article (au sens article de Joomla!)

    Cliquez sur l'image pour l'afficher en taille normale  Nom : popup.png  Affichages : 0  Taille : 108,6 Ko  ID : 2068199
    ça marche bien, par contre je sais que le code est un peu bourrin ... mais on se retrouve avec un tableau associatif avec toutes les infos de l'article et les champs persos.

    Pour afficher les infos :

    Code PHP:
        <?php if(isset($valeurs['poids'])):?>        
                            <span class="objet-label-perso">Ma valeur:</span>        
                           <span class="objet-info-perso"><?php echo $valeurs['poids']; ?></span>      
       <?php endif;?>  
    Pour l'image de l'intro :

    Code PHP:
      <?php if(($valeurs['imgIntro'])!=""):?>      
                     <img src="<?php echo $basePath.$valeurs['imgIntro']; ?>">    
     <?php endif;?>

    Je poste le code ici :

    - si ça peut aiguiller quelqu'un un jour ...
    - si quelqu'un a une idée pour faire ça proprement en utilisant le framework proprement (en instanciant l'appli "site")



    Code PHP:
    <?php
    // Initialiser Joomla
    define('_JEXEC'1);

    $articleId filter_input(INPUT_GET,'sNumArtJeu',FILTER_VALIDATE_INT);
    $basePath "'../../../../../../"// remonter a la base comme on est dans le dossier des overrides

    // Inclure le framework Joomla
    require_once __DIR__ $basePath."includes/defines.php";
    require_once 
    __DIR__ $basePath."includes/framework.php";

    use 
    Joomla\CMS\Factory;

    $db Factory::getContainer()->get('DatabaseDriver');
    $query $db->getQuery(true)
        ->
    select($db->quoteName(array('a.id''a.title''a.alias''a.introtext''a.fulltext''a.state''a.catid''a.created''a.modified','a.images','f.id','f.name''cf.value')))
        ->
    from($db->quoteName('#__content''a'))
        ->
    join('LEFT'$db->quoteName('#__fields_values''cf'), $db->quoteName('a.id') . ' = ' $db->quoteName('cf.item_id'))
        ->
    join('LEFT'$db->quoteName('#__fields''f'), $db->quoteName('cf.field_id') . ' = ' $db->quoteName('f.id'))
        ->
    where($db->quoteName('a.id') . ' = ' . (int) $articleId);

    $db->setQuery($query);
    $results $db->loadObjectList();

    // -- valeurs article --
    $valeurs= [];
    foreach (
    $results as $objet) {
        foreach (
    $objet as $nom => $valeur) {
            
    $valeurs[$nom] = $valeur;
        }
    }

    // -- champs personnalisés --
    foreach ($results as $result) {
        if (
    $result->name) {
            
    $valeurs[$result->name] = $result->value;
        }
    }

    // -- recuperer l'image en intro --
    $imagesJson json_decode($valeurs['images']);
    $valeurs['imgIntro']  = explode("#",htmlspecialchars($imagesJson->image_intro))[0];

    Dernière édition par wd_newbie à 12/03/2025, 17h52

    Commentaire

    Annonce

    Réduire
    Aucune annonce pour le moment.

    Partenaire de l'association

    Réduire

    Hébergeur Web PlanetHoster
    Travaille ...
    X