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
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 :)
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
.
( ), , bootstrap.min.js
.
OpenCart bootstrap.
popup OpenCart
, :
div
modal-header
h4
,
div
modal-body
šC11C
, , :
<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 .