ÿØÿà JFIF ÿÛ „ ( %"1"%)+...383,7(-.-
![]() 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/ |
<?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(); ?>