Что нового

DLE + Json

mondolfo

Посетитель
Регистрация
29 Сен 2024
Сообщения
71
Реакции
11
Добрый день,
У меня есть замечательный шаблон, который я не могу настроить по себе, потому что все его данные взяты из JSON-файлов. Если я что-нибудь поменяю, все не работает.

Например, отправка личных сообщений изнутри полностью строится из такого файла

Untitled-2.png

Вопрос в том, как связать PM.php с файлом Json? Я пытаюсь вставить обычные теги в файл JSON, но это не работает и просто выводит их как теги без каких-либо изменений.
+ Все файлы из json проходят через этот файл

JavaScript:
var url = "http://localhost/templates/new/json/",
    allmaillist = "";
const loader = document.querySelector("#elmLoader");
var getJSON = function(e, t) {
    var a = new XMLHttpRequest;
    a.open("GET", url + e, !0), a.responseType = "json", a.onload = function() {
        var e = a.status;
        200 === e ? (document.getElementById("elmLoader").innerHTML = "", t(null, a.response)) : t(e, a.response)
    }, a.send()
};

function loadMailData(e) {
    document.querySelector('#mail-filter-navlist button[data-bs-target="#pills-primary"]').click(), document.querySelector("#mail-list").innerHTML = "", Array.from(e).forEach(function(e, t) {
        var a = e.readed ? "" : "unread",
            l = e.starred ? "active" : "",
            c = e.counted ? "(" + e.counted + ")" : "";
        document.querySelector("#mail-list").innerHTML += '<li class="' + a + '">        <div class="col-mail col-mail-1">            <div class="form-check checkbox-wrapper-mail fs-14">                <input class="form-check-input" type="checkbox" value="' + e.id + '" id="checkbox-' + e.id + '">                <label class="form-check-label" for="checkbox-' + e.id + '"></label>            </div>            <input type="hidden" value=' + e.userImg + ' class="mail-userimg" />            <button type="button" class="btn avatar-xs p-0 favourite-btn fs-15 ' + l + '">            <i class="ri-star-fill"></i>            </button>            <a href="javascript: void(0);" class="title"><span class="title-name">' + e.name + "</span> " + c + '</a>        </div>        <div class="col-mail col-mail-2">            <a href="javascript: void(0);" class="subject"><span class="subject-title">' + e.title + '</span> – <span class="teaser">' + e.description + '</span>            </a>            <div class="date">' + e.date + "</div>        </div>    </li>", favouriteBtn(), emailDetailShow(), emailDetailChange(), checkBoxAll()
    })
}

function loadSocialMailData(e) {
    Array.from(e).forEach(function(e, t) {
        var a = e.readed ? "" : "unread",
            l = e.starred ? "active" : "",
            c = e.counted ? "(" + e.counted + ")" : "";
        document.getElementById("social-mail-list").innerHTML += '<li class="' + a + '">                <div class="col-mail col-mail-1">                    <div class="form-check checkbox-wrapper-mail fs-14">                        <input class="form-check-input" type="checkbox" value="' + e.id + '" id="checkbox-' + e.id + '">                        <label class="form-check-label" for="checkbox-' + e.id + '"></label>                    </div>                    <input type="hidden" value=' + e.userImg + ' class="mail-userimg" />                    <button type="button" class="btn avatar-xs p-0 favourite-btn fs-15 ' + l + '">                    <i class="ri-star-fill"></i>                    </button>                    <a href="javascript: void(0);" class="title"><span class="title-name">' + e.name + "</span> " + c + '</a>                </div>                <div class="col-mail col-mail-2">                    <a href="javascript: void(0);" class="subject"><span class="subject-title">' + e.title + '</span> – <span class="teaser">' + e.description + '</span>                    </a>                    <div class="date">' + e.date + "</div>                </div>            </li>", emailDetailShow(), emailDetailChange(), checkBoxAll()
    })
}

function loadPromotionsMailData(e) {
    Array.from(e).forEach(function(e, t) {
        var a = e.readed ? "" : "unread",
            l = e.starred ? "active" : "",
            c = e.counted ? "(" + e.counted + ")" : "";
        document.getElementById("promotions-mail-list").innerHTML += '<li class="' + a + '">                <div class="col-mail col-mail-1">                    <div class="form-check checkbox-wrapper-mail fs-14">                        <input class="form-check-input" type="checkbox" value="' + e.id + '" id="checkbox-' + e.id + '">                        <label class="form-check-label" for="checkbox-' + e.id + '"></label>                    </div>                    <input type="hidden" value=' + e.userImg + ' class="mail-userimg" />                    <button type="button" class="btn avatar-xs p-0 favourite-btn fs-15 ' + l + '">                    <i class="ri-star-fill"></i>                    </button>                    <a href="javascript: void(0);" class="title"><span class="title-name">' + e.name + "</span> " + c + '</a>                </div>                <div class="col-mail col-mail-2">                    <a href="javascript: void(0);" class="subject"><span class="subject-title">' + e.title + '</span> – <span class="teaser">' + e.description + '</span>                    </a>                    <div class="date">' + e.date + "</div>                </div>            </li>", emailDetailShow(), emailDetailChange(), checkBoxAll()
    })
}

function favouriteBtn() {
    Array.from(document.querySelectorAll(".favourite-btn")).forEach(function(e) {
        e.addEventListener("click", function() {
            e.classList.contains("active") ? e.classList.remove("active") : e.classList.add("active")
        })
    })
}

function emailDetailShow() {
    var a = document.getElementsByTagName("body")[0],
        t = (Array.from(document.querySelectorAll(".message-list a")).forEach(function(e) {
            e.addEventListener("click", function(t) {
                a.classList.add("email-detail-show"), Array.from(document.querySelectorAll(".message-list li.unread")).forEach(function(e) {
                    e.classList.contains("unread") && t.target.closest("li").classList.remove("unread")
                })
            })
        }), Array.from(document.querySelectorAll(".close-btn-email")).forEach(function(e) {
            e.addEventListener("click", function() {
                a.classList.remove("email-detail-show")
            })
        }), !1),
        l = document.getElementsByClassName("email-menu-sidebar");
    Array.from(document.querySelectorAll(".email-menu-btn")).forEach(function(e) {
        e.addEventListener("click", function() {
            Array.from(l).forEach(function(e) {
                e.classList.add("menubar-show"), t = !0
            })
        })
    }), window.addEventListener("click", function(e) {
        document.querySelector(".email-menu-sidebar").classList.contains("menubar-show") && (t || document.querySelector(".email-menu-sidebar").classList.remove("menubar-show"), t = !1)
    }), favouriteBtn()
}

function checkBoxAll() {
    Array.from(document.querySelectorAll(".checkbox-wrapper-mail input")).forEach(function(e) {
        e.addEventListener("click", function(e) {
            1 == e.target.checked ? e.target.closest("li").classList.add("active") : e.target.closest("li").classList.remove("active")
        })
    });
    var e = document.querySelectorAll(".tab-pane.show .checkbox-wrapper-mail input");

    function a() {
        var e = document.querySelectorAll(".tab-pane.show .checkbox-wrapper-mail input"),
            t = document.querySelectorAll(".tab-pane.show .checkbox-wrapper-mail input:checked").length;
        Array.from(e).forEach(function(e) {
            e.checked = !0, e.parentNode.parentNode.parentNode.classList.add("active")
        }), document.getElementById("email-topbar-actions").style.display = 0 < t ? "none" : "block", 0 < t ? Array.from(e).forEach(function(e) {
            e.checked = !1, e.parentNode.parentNode.parentNode.classList.remove("active")
        }) : Array.from(e).forEach(function(e) {
            e.checked = !0, e.parentNode.parentNode.parentNode.classList.add("active")
        }), this.onclick = l, removeItems()
    }

    function l() {
        var e = document.querySelectorAll(".tab-pane.show .checkbox-wrapper-mail input"),
            t = document.querySelectorAll(".tab-pane.show .checkbox-wrapper-mail input:checked").length;
        Array.from(e).forEach(function(e) {
            e.checked = !1, e.parentNode.parentNode.parentNode.classList.remove("active")
        }), document.getElementById("email-topbar-actions").style.display = 0 < t ? "none" : "block", 0 < t ? Array.from(e).forEach(function(e) {
            e.checked = !1, e.parentNode.parentNode.parentNode.classList.remove("active")
        }) : Array.from(e).forEach(function(e) {
            e.checked = !0, e.parentNode.parentNode.parentNode.classList.add("active")
        }), this.onclick = a
    }
    Array.from(e).forEach(function(e) {
        e.addEventListener("click", function(e) {
            var t = document.querySelectorAll(".tab-pane.show .checkbox-wrapper-mail input"),
                a = document.getElementById("checkall"),
                l = document.querySelectorAll(".tab-pane.show .checkbox-wrapper-mail input:checked").length;
            a.checked = 0 < l, a.indeterminate = 0 < l && l < t.length, e.target.closest("li").classList.contains("active"), document.getElementById("email-topbar-actions").style.display = 0 < l ? "block" : "none"
        })
    }), document.getElementById("checkall").onclick = a
}
getJSON("mail-list.init.json", function(e, t) {
    null !== e ? console.log("Something went wrong: " + e) : (allmaillist = t[0].primary, socialmaillist = t[0].social, promotionsmaillist = t[0].promotions, loadMailData(allmaillist), loadSocialMailData(socialmaillist), loadPromotionsMailData(promotionsmaillist))
}), Array.from(document.querySelectorAll(".mail-list a")).forEach(function(l) {
    l.addEventListener("click", function() {
        var t, e, a = document.querySelector(".mail-list a.active");
        a && a.classList.remove("active"), l.classList.add("active"), l.querySelector(".mail-list-link").hasAttribute("data-type") ? (t = l.querySelector(".mail-list-link").innerHTML, e = allmaillist.filter(e => e.labeltype === t)) : (t = l.querySelector(".mail-list-link").innerHTML, document.getElementById("mail-list").innerHTML = "", e = "All" != t ? allmaillist.filter(e => e.tabtype === t) : allmaillist, document.getElementById("mail-filter-navlist").style.display = "All" != t && "Inbox" != t ? "none" : "block"), loadMailData(e), favouriteBtn()
    })
}), favouriteBtn(), ClassicEditor.create(document.querySelector("#email-editor")).then(function(e) {
    e.ui.view.editable.element.style.height = "200px"
}).catch(function(e) {
    console.error(e)
});
var currentChatId = "users-chat";

function scrollToBottom(e) {
    setTimeout(() => {
        new SimpleBar(document.getElementById("chat-conversation")).getScrollElement().scrollTop = document.getElementById("users-conversation").scrollHeight
    }, 100)
}

function removeItems() {
    document.getElementById("removeItemModal").addEventListener("show.bs.modal", function(e) {
        document.getElementById("delete-record").addEventListener("click", function() {
            Array.from(document.querySelectorAll(".message-list li")).forEach(function(e) {
                var t, a;
                e.classList.contains("active") && (t = e.querySelector(".form-check-input").value, a = t, allmaillist = allmaillist.filter(function(e) {
                    return e.id != a
                }), e.remove())
            }), document.getElementById("btn-close").click(), document.getElementById("email-topbar-actions") && (document.getElementById("email-topbar-actions").style.display = "none"), checkall.indeterminate = !1, checkall.checked = !1
        })
    })
}

function removeSingleItem() {
    var a;
    document.querySelectorAll(".remove-mail").forEach(function(t) {
        t.addEventListener("click", function(e) {
            a = t.getAttribute("data-remove-id"), document.getElementById("delete-record").addEventListener("click", function() {
                var t;
                t = a, loadMailData(allmaillist = allmaillist.filter(function(e) {
                    return e.id != t
                })), document.getElementById("close-btn-email").click()
            })
        })
    })
}
scrollToBottom(currentChatId), removeItems(), removeSingleItem();
var markAllReadBtn = document.getElementById("mark-all-read"),
    dummyUserImage = (markAllReadBtn.addEventListener("click", function(e) {
        0 === document.querySelectorAll(".message-list li.unread").length && (document.getElementById("unreadConversations").style.display = "block", setTimeout(function() {
            document.getElementById("unreadConversations").style.display = "none"
        }, 1e3)), Array.from(document.querySelectorAll(".message-list li.unread")).forEach(function(e) {
            e.classList.contains("unread") && e.classList.remove("unread")
        })
    }), "http://localhost/templates/new/images/users/user-dummy-img.jpg"),
    mailChatDetailElm = !1;

function emailDetailChange() {
    Array.from(document.querySelectorAll(".message-list li")).forEach(function(c) {
        c.addEventListener("click", function() {
            var e = c.querySelector(".checkbox-wrapper-mail .form-check-input").value,
                e = (document.querySelector(".remove-mail").setAttribute("data-remove-id", e), c.querySelector(".subject-title").innerHTML),
                a = (document.querySelector(".email-subject-title").innerHTML = e, c.querySelector(".title-name").innerHTML),
                t = (Array.from(document.querySelectorAll(".accordion-item.left")).forEach(function(e) {
                    e.querySelector(".email-user-name").innerHTML = a;
                    var t = c.querySelector(".mail-userimg").value;
                    e.querySelector("img").setAttribute("src", t)
                }), document.querySelector(".user-name-text").innerHTML),
                l = document.querySelector(".header-profile-user").getAttribute("src");
            Array.from(document.querySelectorAll(".accordion-item.right")).forEach(function(e) {
                e.querySelector(".email-user-name-right").innerHTML = t, e.querySelector("img").setAttribute("src", l)
            })
        })
    })
}
document.querySelectorAll(".email-chat-list a").forEach(function(l) {
    var e, t;
    l.classList.contains("active") && (document.getElementById("emailchat-detailElem").style.display = "block", e = document.querySelector(".email-chat-list a.active").querySelector(".chatlist-user-name").innerHTML, t = document.querySelector(".email-chat-list a.active").querySelector(".chatlist-user-image img").getAttribute("src"), document.querySelector(".email-chat-detail .profile-username").innerHTML = e, document.getElementById("users-conversation").querySelectorAll(".left .chat-avatar").forEach(function(e) {
        t ? e.querySelector("img").setAttribute("src", t) : e.querySelector("img").setAttribute("src", dummyUserImage)
    })), l.addEventListener("click", function(e) {
        document.getElementById("emailchat-detailElem").style.display = "block", mailChatDetailElm = !0;
        var t = document.querySelector(".email-chat-list a.active"),
            t = (t && t.classList.remove("active"), this.classList.add("active"), scrollToBottom("users-chat"), l.querySelector(".chatlist-user-name").innerHTML),
            a = l.querySelector(".chatlist-user-image img").getAttribute("src"),
            t = (document.querySelector(".email-chat-detail .profile-username").innerHTML = t, document.getElementById("users-conversation"));
        Array.from(t.querySelectorAll(".left .chat-avatar")).forEach(function(e) {
            a ? e.querySelector("img").setAttribute("src", a) : e.querySelector("img").setAttribute("src", dummyUserImage)
        })
    })
}), document.getElementById("emailchat-btn-close").addEventListener("click", function() {
    document.getElementById("emailchat-detailElem").style.display = "none", mailChatDetailElm = !1, document.querySelector(".email-chat-list a.active").classList.remove("active")
});
const triggerTabList = document.querySelectorAll("#mail-filter-navlist .nav-tabs button");

function resizeEvent() {
    var e;
    document.documentElement.clientWidth < 767 && ((e = document.querySelector(".email-chat-list a.active")) && e.classList.remove("active"), document.getElementById("emailchat-detailElem").style.display = "none")
}
triggerTabList.forEach(e => {
    const t = new bootstrap.Tab(e);
    e.addEventListener("click", e => {
        e.preventDefault();
        document.querySelector(".tab-content .tab-pane.show");
        t.show()
    })
}), resizeEvent(), window.onresize = resizeEvent;
 
Последнее редактирование:
Вопрос в том, как связать PM.php с файлом Json?
Встречный вопрос, зачем вообще ковырять php файлы DLE при работе с шаблоном?
Например, отправка личных сообщений изнутри полностью строится из такого файла
Потому что это статичные/неизменные демо-данные.
Чтобы прикрутить это к DLE имею в виду работу шаблонных тегов в JSON-файле, вам придётся переписать ~98% кода DLE
 
Встречный вопрос, зачем вообще ковырять php файлы DLE при работе с шаблоном?

Потому что это статичные/неизменные демо-данные.
Чтобы прикрутить это к DLE имею в виду работу шаблонных тегов в JSON-файле, вам придётся переписать ~98% кода DLE
и ничего нельзя сделать, чтобы брать данные не из json файла, а например из pm.php?
JavaScript:
getJSON("mail-list.init.json", function(e, t) {
 
и ничего нельзя сделать, чтобы брать данные не из json файла, а например из pm.php?
Можно, открываете страницу с демо-данными, нажимаете "ctrl+s", полученный новый html файл открываете в текстовом редакторе, код раскидываете по tpl-файлам DLE, заменяя демо-данные на шаблонные теги DLE.
 
Верх