Afficher progression traitement

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

  • #16
    Re : Afficher progression traitement

    Pour compléter j'ai mis cela dans une librairie qui contient ce helper
    Code PHP:
    class GFHelper
    {
       
        public static function 
    ResetStatus()
        {
            
    $db JFactory::getDbo();
            
    $now = new JDate();
            
    $datecour $now->toSQL();

            
    $query $db->getQuery(true);
            
    $query->delete($db->quoteName('#__gf_status'));
            
    $query->where($db->quoteName('time').'<'.$db->quote($datecour));
            
    $db->setQuery($query);
            
    $db->execute();
        }

        public static function 
    SetStatusValue($value,$maxval)
        {
            
    $db JFactory::getDbo();
            
    $now = new JDate();
            
    $datecour $now->toSQL();
            
    $expire=new JDatedate("Y-m-d H:i"strtotime($datecour)) . " +1 hour");
            
    $expireSQL=$expire->toSQL();
            
    $datecour $now->toSQL();
            
    $session JFactory::getSession();
            
    $session_id$session->getId();

            
    $query $db->getQuery(true);
            
    $query->select('session_id');
            
    $query->from($db->quoteName('#__gf_status'));
            
    $query->where('session_id='.$db->quote($session_id));
            if (!
    $maxval$percent=0;
            else 
    $percent=($value+1)*100/$maxval;
            
    $db->setQuery($query);
            
    $sessionobject=$db->loadObject();
            if (!
    $sessionobject) {
                
    $query $db->getQuery(true);
                
    $query->insert($db->quoteName('#__gf_status'))
                    ->
    columns(array($db->quoteName('session_id'), $db->quoteName('time'), $db->quoteName('value')))
                    ->
    values($db->quote($session_id) . ', ' $db->quote($expireSQL) . ',' $db->quote($percent));
                
    // Set the query and execute the insert.
                
    $db->setQuery($query);
                
    $db->execute();
            }
            else {
                
    $query $db->getQuery(true);
                
    $query->update($db->quoteName('#__gf_status'))
                    ->
    set($db->quoteName('time').' = '$db->quote($expireSQL) )
                    ->
    set($db->quoteName('value').' = '$db->quote($percent))
                ->
    where($db->quoteName('session_id').' = '.$db->quote($session_id));
                
    // Set the query and execute the insert.
                
    $db->setQuery($query);
                
    $db->execute();
            }
        }
        public static function 
    GetStatusValue()
        {
            
    $db JFactory::getDbo();

            
    $session JFactory::getSession();
            
    $session_id$session->getId();

            
    $query $db->getQuery(true);
            
    $query->select('value');
            
    $query->from($db->quoteName('#__gf_status'));
            
    $query->where('session_id='.$db->quote($session_id));
            
    $db->setQuery($query);
            
    $sessionobject=$db->loadObject();
            if (
    $sessionobject)
                return 
    $sessionobject->value;

            else return 
    0;
        } 
    La table gf_status
    Cliquez sur l'image pour l'afficher en taille normale

Nom : 2016-11-15_12h38_04.png 
Affichages : 1 
Taille : 20,5 Ko 
ID : 1805891

    et pour le traitement qui l'utilise
    Code PHP:
    en début 
     GFHelper
    ::ResetStatus(); // pour épurer la base de données 
     
    $nbcount sizeof($ids);
            foreach (
    $ids as $indice=>$id)
            {
                
    GFHelper::SetStatusValue($indice,$nbcount);
    .....

             }
             
    GFHelper::SetStatusValue(0,0);// a la fin du traitement 
    Développement ERP Joomla 2.5

    Commentaire


    • #17
      Re : Afficher progression traitement

      Bonjour à tous,

      Je vois que ca échange bien, c'est cool

      Fabrice, pour ce qui est de "recharger le framework", je voulais en fait dire qu'il n'etait pas nécessaire de coder explicitement le chargement du framework ... et plutot, comme tu le dis, de repasser par le controleur du MVC joomla

      Je vous joins un zip d'un compo Admin bidon "com_demoloader" en v1 (j'ose espérer que les lecteurs de ce fil vont contribuer a son amélioration ) avec qq bouts de source ... ou suggestions !?
      Le code est volontairement incomplet, histoire de montrer (et commenter) le code ajouté spécialement pour cette modal AJAX !
      Ce compo essaye d'être généraliste et il prend l'exemple de la creation, puis l'edition d'un produit qui necessite d'initialiser des données au préalable.

      > Vue /views/produit/view.html.php

      c'est le script de Vue qui permet d'ajouter, puis de modifier un produit et donc d'afficher la modal de loading AJAX
      (je n'ai pas fourni le modele, ni le form.xml. Vous pouvez intégrer les bouts de codes dans n'importe quel MVC d'edition d'un enreg)
      - il check si on a besoin d'initialiser les données
      - prepare les données nécessaires pour l'initialisation des données (id, ...)
      (Bon ca meritera peut-etre d'autres explications)

      > tmpl /views/produit/tmpl/edit.php

      - le tmpl affiche les infos selon si nouveau produit ou pas (2 parties)
      - affichage partiel ou complet selon si on est en creation (voir 1ere capture ecran de mon précédent msg) ou en modification apres initialisation des données
      - si pas nouveau, alors charge une modal et lance des fonctions AJAX d'init (cf 2eme capture ecran msg précedent)
      - definit le code jQuery AJAX de chargement des données (avec une tempo entre chaque appel AJAX et retour du pourcentage d'avancement). avec notamment l'astuce pour appeler une fonction AJAX via le controller en tmpl=component ET format=raw, afin que le retour ne soit qu'un flux JSON (sans le template et tout le tra-la-la de Joomla )

      > /controllers/loader.php

      le controller qui recoit l'appel AJAX (task=loader.initAjaxProduits) via la methode initAjaxProduits()
      il traite les appels AJAX pour l'enregistrement des données et le controle d'avancement

      Si vous avez des questions ou des suggestions d'améliorations, je suis preneur
      Fichiers joints
      Garstud Workshop - Concepteur, Développeur et Formateur Joomla - http://www.garstud.com
      « Ce n’est pas parce que les choses sont difficiles que nous n’osons pas,
      c’est parce que nous n’osons pas qu’elles sont difficiles. »
      - Sénèque

      Commentaire

      Annonce

      Réduire
      Aucune annonce pour le moment.

      Partenaire de l'association

      Réduire

      Hébergeur Web PlanetHoster
      Travaille ...
      X