Ventana emergente OpenCart, ventanas modales

Un artículo de nuestro empleado de su blog personal.





Mientras desarrollaba el módulo en el panel de administración, necesitaba usar  modales de OpenCart  para mostrar cierta información, así como para mostrar el formulario. Mi experiencia frontend en ese momento era  tan-tan , pero un colega sugerido que OpenCart utiliza jQuery (2.1.1), y esta biblioteca tiene soporte para ventanas emergentes. Pero no todo es tan sencillo ...





Para aclarar: modal == popup == popup .





Biblioteca de ventana modal

El botón al hacer clic en el que se muestra la ventana modal
El botón al hacer clic en el que se muestra la ventana modal

Para usar la  ventana modal de OpenCart , debe determinar  qué biblioteca  proporciona la funcionalidad utilizada en este motor para esto. Desmontando el panel de administración de OpenCart 3.0 (en 2.3 no existe tal botón),



 se encontró un botón en la sección  , al hacer clic en él  , apareció una ventana emergente .





Lo que se necesita, comenzamos a analizar :)





Ventana modal en la configuración del desarrollador del panel de administración de OpenCart
Ventana modal en la configuración del desarrollador del panel de administración de OpenCart

Vaya a la página "Barra de estado", abra su código fuente y mire el script al final:





$('#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



.





Punto de interrupción en el método modal
modal

 ( ), ,  bootstrap.min.js



.





Pila introducida en bootstrap.min.js
bootstrap.min.js

OpenCart  bootstrap.





popup OpenCart

 , :





  • div



       modal-header



       h4



    ,





  • div



       modal-body



    ¨C11C





Ver el código html de la ventana modal Opciones de desarrollador
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);
}

      
      



Cada vez que ingrese a la página de edición de pedidos, aparecerá una ventana emergente con una lista de productos.





Puede insertar un botón en la barra de botones en el panel de administración (o en cualquier otro lugar), colgar un controlador de clic en el botón y mostrar una ventana modal (como se hace en la página 



). Sin embargo, esto requeriría el uso de expresiones regulares  o un analizador DOM .









Autor: Vitaly Buturlin








All Articles