Pop-up OpenCart, janelas modais

Um artigo de nosso funcionário de seu blog pessoal.





Ao desenvolver o módulo no painel de administração, precisei usar os  modais OpenCart  para exibir certas informações, bem como para exibir o formulário. Minha experiência de front-end naquela época era  razoável , mas um colega sugeriu que o OpenCart usasse jquery (2.1.1), e esta biblioteca tem suporte para janelas pop-up. Mas nem tudo é tão simples ...





Para esclarecer: modal == popup == popup .





Biblioteca de janela modal

O botão quando clicado no qual a janela modal é mostrada
O botão quando clicado no qual a janela modal é mostrada

Para usar a  janela modal OpenCart , você precisa determinar  qual biblioteca  fornece a funcionalidade usada neste mecanismo para isso. Desmontando o painel de administração do OpenCart 3.0 (no 2.3 não existe tal botão),



 foi encontrado um botão na seção  , ao ser clicado, o qual uma  janela pop-up apareceu .





O que é necessário, começamos a analisar :)





Janela modal nas configurações do desenvolvedor do painel de administração do OpenCart
Janela modal nas configurações do desenvolvedor do painel de administração do OpenCart

Vá para a página "Barra de status", abra seu código-fonte e veja o script no 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



.





Ponto de interrupção no método modal
modal

 ( ), ,  bootstrap.min.js



.





Stack trouxe bootstrap.min.js
bootstrap.min.js

OpenCart  bootstrap.





popup OpenCart

 , :





  • div



       modal-header



       h4



    ,





  • div



       modal-body



    ¨C11C





Visualizando o código html da janela modal Opções do Desenvolvedor
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 você entrar na página de edição do pedido, uma janela pop-up com uma lista de produtos aparecerá.





Você pode inserir um botão na barra de botões no painel de administração (ou em qualquer outro lugar), pendurar um manipulador de cliques no botão e exibir uma janela modal (como é feito na página 



). No entanto, isso exigiria o uso de expressões regulares  ou um analisador DOM .









Autor: Vitaly Buturlin








All Articles