300 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHTML
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			300 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHTML
		
	
	
		
			Executable File
		
	
	
| <?php
 | |
| $theads = [
 | |
|     [
 | |
|         "label" => "ID",
 | |
|         "name" => "id",
 | |
|         "type" => "text",
 | |
|         "hidden" => false,
 | |
|         "disabled" => true,
 | |
|     ],
 | |
|     [
 | |
|         "label" => "Title",
 | |
|         "name" => "title",
 | |
|         "type" => "text",
 | |
|         "hidden" => false,
 | |
|         "disabled" => false,
 | |
|     ],
 | |
|     [
 | |
|         "label" => "HTML",
 | |
|         "name" => "html",
 | |
|         "type" => "textarea",
 | |
|         "hidden" => false,
 | |
|         "disabled" => false,
 | |
|     ],
 | |
|     [
 | |
|         "label" => "Redirect",
 | |
| 
 | |
|         "name" => "redirect",
 | |
|         "type" => "text",
 | |
|         "hidden" => false,
 | |
|         "disabled" => false,
 | |
|     ],
 | |
|     [
 | |
|         "label" => "Created At",
 | |
|         "name" => "created_at",
 | |
|         "type" => "text",
 | |
|         "hidden" => false,
 | |
|         "disabled" => true,
 | |
|     ],
 | |
|     [
 | |
|         "label" => "Updated At",
 | |
|         "name" => "updated_at",
 | |
|         "type" => "text",
 | |
|         "hidden" => false,
 | |
|         "disabled" => true,
 | |
|     ],
 | |
|     [
 | |
|         "label" => "Status",
 | |
|         "name" => "status",
 | |
|         "type" => "text",
 | |
|         "hidden" => false,
 | |
|         "disabled" => true,
 | |
|     ],
 | |
|     [
 | |
|         "label" => "Operation",
 | |
|         "type" => "text",
 | |
|         "hidden" => true,
 | |
|         "disabled" => true,
 | |
|     ],
 | |
| ];
 | |
| ?>
 | |
| <head>
 | |
|     <script src="https://cdn.tailwindcss.com"></script>
 | |
| </head>
 | |
| <body>
 | |
|     <div class="relative overflow-x-auto">
 | |
|         <caption class="px-6 flex items-start">
 | |
|             <button
 | |
|                 data-action="add"
 | |
|                 class="show-modal bg-green-700 text-white py-2 px-5 border-none"
 | |
|             >
 | |
|                 Add
 | |
|             </button>
 | |
|         </caption>
 | |
|         <table
 | |
|             class="w-ful text-left rtl:text-right text-gray-7000 dark:text-gray-400"
 | |
|         >
 | |
|             <thead
 | |
|                 class="text-gray-700 uppercase bg-gray-700 dark:bg-gray-700 dark:text-gray-400"
 | |
|             >
 | |
|                 <tr>
 | |
|                     <?php foreach ($theads as $thead): ?>
 | |
|                     <th scope="col" class="px-6 py-3"><?=$thead['label'] ?></th>
 | |
|                     <?php endforeach; ?>
 | |
|                 </tr>
 | |
|             </thead>
 | |
|             <tbody>
 | |
|                 <?php foreach ($block->getAll() as $row): ?>
 | |
|                 <tr
 | |
|                     class="bg-white border-b dark:bg-gray-800 dark:border-gray-700"
 | |
|                     id="row-<?=$row['id'] ?>"
 | |
|                 >
 | |
|                     <th data-name="id" data-value="<?= $row['id'] ?>" class="px-6 py-4"><?=$row['id'] ?></th>
 | |
|                     <td data-name="title" data-value="<?= $row['title'] ?>" class="px-6 py-4">
 | |
|                         <?=$row['title'] ?>
 | |
|                     </td>
 | |
|                     <td data-name="html" data-value="<?= htmlentities($row['html']) ?>" class="px-6 py-4">
 | |
|                         <code>
 | |
|                             <?=html_entity_decode($row['html']) ?>
 | |
|                         </code>
 | |
|                     </td>
 | |
|                     <td data-name="redirect" data-value="<?= $row['redirect'] ?>" class="px-6 py-4">
 | |
|                         <?=$row['redirect'] ?>
 | |
|                     </td>
 | |
|                     <td data-name="created_at" data-value="<?= $row['created_at'] ?>" class="px-6 py-4">
 | |
|                         <?=$row['created_at'] ?>
 | |
|                     </td>
 | |
|                     <td data-name="updated_at" data-value="<?= $row['updated_at'] ?>" class="px-6 py-4">
 | |
|                         <?=$row['updated_at'] ?>
 | |
|                     </td>
 | |
|                     <td data-name="status" data-value="<?= $row['status'] ?>" class="px-6 py-4">
 | |
|                         <?=$row['status'] ?>
 | |
|                     </td>
 | |
|                     <td class="px-6">
 | |
|                         <div class="flex items-end">
 | |
|                             <button
 | |
|                                 data-action="edit"
 | |
|                                 data-id="<?=$row['id'] ?>"
 | |
|                                 class="show-modal bg-blue-700 text-white py-2 px-5 border-none"
 | |
|                             >
 | |
|                                 Edit
 | |
|                             </button>
 | |
|                             <button
 | |
|                                 data-action="delete"
 | |
|                                 data-id="<?=$row['id'] ?>"
 | |
|                                 class="show-modal bg-red-700 text-white py-2 px-5 border-none"
 | |
|                             >
 | |
|                                 Delete
 | |
|                             </button>
 | |
|                         </div>
 | |
|                     </td>
 | |
|                 </tr>
 | |
|                 <?php endforeach; ?>
 | |
|             </tbody>
 | |
|         </table>
 | |
|     </div>
 | |
| 
 | |
|     <!-- Modal -->
 | |
|     <form id="modal_form" class="w-full p-5" style="display: none">
 | |
|         <?php foreach ($theads as $thead): ?>
 | |
|         <?php if (false === $thead['hidden']): ?>
 | |
|         <div class="flex items-center justify-center mb-6">
 | |
|             <div class="md:w-1/3 min-w-[20%]">
 | |
|                 <label
 | |
|                     class="block text-gray-500 font-bold md:text-right mb-1 md:mb-0 pr-4"
 | |
|                     ><?=$thead['label'] ?></label
 | |
|                 >
 | |
|             </div>
 | |
|             <div class="md:w-2/3">
 | |
|                 <?php if ('text' === $thead['type']): ?>
 | |
|                 <input class="appearance-none border-2 rounded w-full py-2 px-4
 | |
|                 text-gray-700 leading-tight focus:outline-none focus:bg-white
 | |
|                 focus:border-purple-500" type="text" name="<?=$thead['name'] ?>"
 | |
|                 <?=$thead['disabled'] ? 'disabled' : '' ?>
 | |
|                 />
 | |
|                 <?php endif ?>
 | |
|                 <?php if ('textarea' === $thead['type']): ?>
 | |
|                 <textarea
 | |
|                     rows="4"
 | |
|                     class="appearance-none border-2 rounded w-full py-2 px-4 text-gray-700 leading-tight focus:outline-none focus:bg-white focus:border-purple-500"
 | |
|                     name="<?=$thead['name'] ?>"
 | |
|                 ></textarea>
 | |
|                 <?php endif ?>
 | |
|             </div>
 | |
|         </div>
 | |
|         <?php endif; ?>
 | |
|         <?php endforeach; ?>
 | |
|         <div class="flex items-center justify-center">
 | |
|             <div class="md:w-1/3 min-w-[20%]"></div>
 | |
|             <div class="md:w-2/3">
 | |
|                 <button
 | |
|                     class="shadow bg-blue-500 hover:bg-blue-400 focus:shadow-outline focus:outline-none text-white font-bold py-2 px-4 rounded"
 | |
|                     type="submit"
 | |
|                 >
 | |
|                     Submit
 | |
|                 </button>
 | |
|             </div>
 | |
|         </div>
 | |
|     </form>
 | |
| 
 | |
|     <script>
 | |
|     const URL_API = location.origin + "/rest/V1/banner";
 | |
|     const MODAL_OPTION = {
 | |
|         type: "popup",
 | |
|         responsive: true,
 | |
|         innerScroll: true,
 | |
|         buttons: [{
 | |
|             class: "",
 | |
|             click: function() {
 | |
|                 this.closeModal();
 | |
|             },
 | |
|         }, ],
 | |
|     };
 | |
|     require([
 | |
|         "jquery",
 | |
|         "mage/translate",
 | |
|         "uiComponent",
 | |
|         "ko",
 | |
|         "Magento_Ui/js/modal/alert",
 | |
|         "Magento_Ui/js/modal/confirm",
 | |
|         "Magento_Ui/js/modal/modal",
 | |
|     ], function($, $t, Component, ko, alertModal, confirmModal, modal) {
 | |
|         "use strict";
 | |
|         (function init() {
 | |
|             $.ajaxSetup({
 | |
|                 contentType: "application/json;",
 | |
|                 headers: {
 | |
|                     API_KEY: "<?=$block->getApiKey() ?>",
 | |
|                 },
 | |
|                 success: function(data) {
 | |
|                     // do something before xhr
 | |
|                 },
 | |
|                 fail: function(error) {
 | |
|                     console.error(error)
 | |
|                     alertModal({
 | |
|                         content: error.message,
 | |
|                     });
 | |
|                 },
 | |
|             });
 | |
|         })($);
 | |
|         $(document).ready(function($) {
 | |
|             const MODAL = modal(MODAL_OPTION, $("#modal_form"));
 | |
|             let action = "";
 | |
|             $(document).on("click", ".show-modal[data-action]", function() {
 | |
|                 action = $(this).attr("data-action");
 | |
|                 if (action == "add") {
 | |
|                     $("#modal_form")[0].reset();
 | |
|                     $("#modal_form").modal("openModal");
 | |
|                 }
 | |
|                 if (action == "edit") {
 | |
|                     const id = $(this).attr("data-id");
 | |
|                     $(`#row-${id} [data-name]`)
 | |
|                         .each((i, el) => {
 | |
|                             const name = $(el).attr('data-name');
 | |
|                             const value = $(el).attr('data-value');
 | |
|                             $(`#modal_form [name="${name}"]`)?.val(value);
 | |
|                         })
 | |
| 
 | |
|                     $("#modal_form").modal("openModal");
 | |
|                 }
 | |
|                 if (action === 'delete') {
 | |
|                     confirmModal({
 | |
|                         title: "Are you sure?",
 | |
|                         // content: '',
 | |
|                         actions: {
 | |
|                             confirm: () => {
 | |
|                                 $.get(URL_API + '?method=delete&id=' + $(this).attr('data-id'))
 | |
|                                     .then(_ => window.location.reload())
 | |
|                             },
 | |
| 
 | |
|                             cancel: () => {
 | |
|                                 // do something choose "no"
 | |
|                             },
 | |
|                         }
 | |
|                     })
 | |
|                 }
 | |
|             });
 | |
|             $(document).on("submit", "#modal_form", function(e) {
 | |
|                 e.preventDefault();
 | |
|                 if (action === "add") {
 | |
|                     $.post(URL_API + "?method=create", $(this).serialize())
 | |
|                         .then((res) => {
 | |
|                             res.status ?
 | |
|                                 alertModal({
 | |
|                                     content: "Added new record!",
 | |
|                                     actions: {
 | |
|                                         always: () => window.location.reload()
 | |
|                                     }
 | |
|                                 }) :
 | |
|                                 alertModal({
 | |
|                                     content: "Some errors: " + data.message,
 | |
|                                 });
 | |
|                         })
 | |
|                         .then(() => $("#modal_form").modal("closeModal"));
 | |
|                 }
 | |
|                 if (action === "edit") {
 | |
|                     const id = $(this).find("[name=id").val();
 | |
|                     $.post(
 | |
|                             URL_API + "?method=update&id=" + id,
 | |
|                             $("#modal_form").serialize()
 | |
|                         )
 | |
|                         .then((res) => {
 | |
|                             res.status ?
 | |
|                                 alertModal({
 | |
|                                     content: "Edited new record!",
 | |
|                                     actions: {
 | |
|                                         always: () => window.location.reload()
 | |
|                                     }
 | |
|                                 }) :
 | |
|                                 alertModal({
 | |
|                                     content: "Some errors: " + data.message,
 | |
|                                 });
 | |
|                         })
 | |
|                         .then(() => $("#modal_form").modal("closeModal"));
 | |
|                 }
 | |
|             });
 | |
|         });
 | |
|     });
 | |
| </script>
 | |
| </body>
 |