Popup OpenCart, fenĂȘtres modales

Un article de notre employé tiré de son blog personnel.





Lors du dĂ©veloppement du module dans le panneau d'administration, j'avais besoin d'utiliser des  modaux OpenCart  pour afficher certaines informations, ainsi que pour afficher le formulaire. Mon expĂ©rience frontend Ă  cette Ă©poque Ă©tait  couci-couça , mais un collĂšgue a suggĂ©rĂ© que OpenCart utilise jquery (2.1.1), et cette bibliothĂšque a un support pour les fenĂȘtres pop - up. Mais tout n'est pas si simple ...





Pour clarifier: modal == popup == popup .





BibliothĂšque de fenĂȘtres modales

Le bouton au clic sur lequel la fenĂȘtre modale est affichĂ©e
Le bouton au clic sur lequel la fenĂȘtre modale est affichĂ©e

Pour utiliser la  fenĂȘtre modale OpenCart , vous devez dĂ©terminer  quelle bibliothĂšque  fournit les fonctionnalitĂ©s utilisĂ©es dans ce moteur pour cela. En dĂ©sassemblant le panneau d'administration d'OpenCart 3.0 (dans la version 2.3, il n'y a pas de bouton de ce type),



 un bouton a Ă©tĂ© trouvĂ© dans la section  , lorsque vous avez cliquĂ© sur lequel une  fenĂȘtre contextuelle est apparue .





Ce qui est nécessaire, nous commençons l'analyse :)





FenĂȘtre modale dans le panneau d'administration OpenCart ParamĂštres du dĂ©veloppeur
FenĂȘtre modale dans le panneau d'administration OpenCart ParamĂštres du dĂ©veloppeur

Allez sur la page "Barre d'état", ouvrez son code source et regardez le script à la fin:





$('#button-setting').on('click', function() {
    $.ajax({
        url: 'index.php?route=common/developer&user_token=D9aTD65JQVdyOY9pcVxcRUx0M3eTefnr',
        dataType: 'html',
        beforeSend: function() {
            $('#button-setting').button('loading');
        },
        complete: function() {
            $('#button-setting').button('reset');
        },
        success: function(html) {
            $('#modal-developer').remove();
             
            $('body').prepend('<div id="modal-developer" class="modal">' + html + '</div>');
             
            $('#modal-developer').modal('show');
        },
        error: function(xhr, ajaxOptions, thrownError) {
            alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
        }
    }); 
}); 
      
      



, id button-setting



  ,  ajax ,  popup . :





$('#modal-developer').modal('show');
      
      



jquerymodal. bootstrap . - ,     modal



.





Point d'arrĂȘt sur la mĂ©thode modale
modal

 ( ), ,  bootstrap.min.js



.





Pile apportée dans bootstrap.min.js
bootstrap.min.js

OpenCart  bootstrap.





popup OpenCart

 , :





  • div



       modal-header



       h4



    ,





  • div



       modal-body



    šC11C





Affichage du code html de la fenĂȘtre modale Developer Options
html

, , :





<div id="modal-window" class="modal">
    <div class="modal-dialog">
        <div class="modal-content">
           
            <!--   -->
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                <h4 class="modal-title"></h4>
            </div>
             
            <!--  -->
            <div class="modal-body"></div>
             
        </div>
    </div>
</div>
      
      



id modal-window



  :





$('#modal-window').modal('show');
      
      



js. OpenCart. :





$this->model_extension_event->addEvent('modal_window', 'admin/view/sale/order_form/after', 'extension/module/modal_window/eventSaleOrderFormAfter');
      
      



:





public function eventSaleOrderFormAfter(&$route, &$args, &$output)
{
    $idOrder = $args["order_id"];
 
    $this->load->model('sale/order');
    $this->load->model('catalog/product');
 
    //   
    $aOrderProducts = $this->model_sale_order->getOrderProducts($args["order_id"]);
     
    //   
    $sOrderProducts = "";
 
    //  
    for($i=0; $i<count($aOrderProducts); ++$i)
    {
        $aProduct = $this->model_catalog_product->getProduct($aOrderProducts[$i]["product_id"]);
        $sOrderProducts .= "<li>".$aProduct["name"]." - ".$aProduct["model"]." (".$aOrderProducts[$i]["quantity"]." .): ".round($aOrderProducts[$i]["total"], 2).". </li>";
    }
     
    $sOrderProducts = "<ul>$sOrderProducts</ul>";
 
    //     
    $sModal = '
    <div id="modal_window" class="modal">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h4 class="modal-title"> </h4>
                </div>
                <div class="modal-body">
                    '.$sOrderProducts.'
                </div>
            </div>
        </div>
    </div>
    <script>$("#modal_window").modal("show");</script>
    ';
 
    //   body          
    $iPos = strripos($output, "</body>");
    $output = substr($output, 0, $iPos).$sModal.substr($output, $iPos);
}

      
      



Chaque fois que vous accĂ©dez Ă  la page de modification de la commande, une fenĂȘtre contextuelle avec une liste de produits apparaĂźt.





Vous pouvez insĂ©rer un bouton dans la barre de boutons du panneau d'administration (ou n'importe oĂč ailleurs), accrocher un gestionnaire de clic sur le bouton et afficher une fenĂȘtre modale (comme cela se fait sur la page 



). Cependant, cela nĂ©cessiterait l'utilisation d' expressions rĂ©guliĂšres  ou d'un analyseur DOM .









Auteur: Vitaly Buturlin








All Articles