272 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHTML
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			272 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>
 |