ÿØÿàJFIFÿÛ„ ( %"1"%)+...383,7(-.- 404 Not Found
Sh3ll
OdayForums


Server : Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.20
System : Linux st2.domain.com 3.10.0-1127.10.1.el7.x86_64 #1 SMP Wed Jun 3 14:28:03 UTC 2020 x86_64
User : apache ( 48)
PHP Version : 7.4.20
Disable Function : NONE
Directory :  /proc/self/root/proc/self/root/var/www/html/thietkeweb2/code/sitemap/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //proc/self/root/proc/self/root/var/www/html/thietkeweb2/code/sitemap/list.php
<?php
// 1. Lấy tất cả danh mục từ CSDL một lần duy nhất
$query = $DB->query("SELECT menus_id, menus_parentid, menus_fname FROM tb_menus ORDER BY `menus_pos` ASC");
$categories = [];
while ($row = $DB->fetch_row($query)) {
    $categories[] = $row;
}

// 2. Xây dựng một cây danh mục từ mảng phẳng để tối ưu hóa việc đệ quy
$itemsById = [];
foreach ($categories as $item) {
    // Dùng ID làm key để truy cập nhanh
    $itemsById[$item['menus_id']] = $item;
    // Khởi tạo mảng con
    $itemsById[$item['menus_id']]['children'] = [];
}

$menuTree = [];
foreach ($itemsById as $id => &$item) { // Dùng tham chiếu (&) để thay đổi trực tiếp
    if ($item['menus_parentid'] == 0 || !isset($itemsById[$item['menus_parentid']])) {
        // Nếu là mục gốc (parent_id = 0) hoặc cha của nó không tồn tại, thêm vào cây chính
        $menuTree[] = &$item;
    } else {
        // Nếu là mục con, thêm nó vào mảng 'children' của cha nó
        $itemsById[$item['menus_parentid']]['children'][] = &$item;
    }
}
unset($item); // Ngắt tham chiếu với phần tử cuối cùng sau vòng lặp

/**
 * 3. Hàm đệ quy để tạo các thẻ <url> từ cây danh mục
 *
 * @param array $menuItems Mảng các mục menu (hoặc các mục con)
 * @param string $homeUrl URL gốc của trang web
 */
function generateSitemapUrls(array $menuItems, string $homeUrl)
{
    foreach ($menuItems as $item) {
        // Chỉ tạo URL nếu 'menus_fname' không rỗng
        if (!empty($item['menus_fname'])) {
            // Sử dụng htmlspecialchars để đảm bảo URL hợp lệ trong XML
            $loc = htmlspecialchars($homeUrl .  $item['menus_fname'] .'/');

            // In ra cấu trúc XML cho một URL
            echo '  <url>' . PHP_EOL;
            echo '    <loc>' . $loc . '</loc>' . PHP_EOL;
            echo '    <lastmod>' . date('Y-m-d') . '</lastmod>' . PHP_EOL;
            echo '    <changefreq>monthly</changefreq>' . PHP_EOL;
            echo '    <priority>0.8</priority>' . PHP_EOL;
            echo '  </url>' . PHP_EOL;
        }

        // Nếu mục này có các mục con, gá»i lại hàm này cho mảng con
        if (!empty($item['children'])) {
            generateSitemapUrls($item['children'], $homeUrl);
        }
    }
}

// 4. Xuất ra nội dung XML hoàn chỉnh
header('Content-type: text/xml; charset=utf-8');

// In phần đầu của file sitemap
echo '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
echo '<?xml-stylesheet type="text/xsl" href="' . htmlspecialchars($INFO['home_url']) . 'sitemap.xsl"?>' . PHP_EOL;
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;

// Bắt đầu quá trình đệ quy từ gốc của cây
generateSitemapUrls($menuTree, $INFO['home_url']);

// In thẻ đóng
echo '</urlset>';

// Dừng script
exit();
?>

ZeroDay Forums Mini