Cara Menghasilkan Peta Situs XML Dinamis untuk Situs Web di PHP
Peta situs adalah file pemetaan yang memiliki spesifikasi tentang URL halaman situs dan detail terkait lainnya. Ini juga dapat memetakan URL konten lain dari posting, produk, gambar, video, berita, dan lainnya dalam struktur konvensional. Ada konvensi untuk skema XML untuk protokol peta situs. Ini memungkinkan crawler mesin pencari mengurai XML peta situs dan memberikan detail yang berharga. Detail ini berguna untuk mengoptimalkan halaman web, konten, dan hubungan di antaranya. Perayak mesin pencari menangkap halaman yang baru saja diperbarui di antara yang lain. Ini akan membantu untuk mendapatkan reputasi berdasarkan frekuensi perubahan. Mari kita bahas pembuatan peta situs untuk situs web dan kepentingannya lebih banyak di bagian yang akan datang. Ini memiliki contoh untuk membuat peta situs XML dinamis di PHP dengan database.
Pentingnya peta situs
Peta situs adalah salah satu alat utama untuk membiarkan mesin pencari merangkak bot untuk mendapatkan struktur situs. Ini membantu mesin pencari untuk mengindeks URL situs. Dengan peta situs, itu meningkatkan kemungkinan untuk mengambil URL yang dapat secara langsung mempengaruhi pembaca situs untuk tumbuh lebih tinggi. Mesin pencari terkemuka seperti Google merekomendasikan untuk menempatkan peta situs untuk situs web. Ini mendokumentasikan alasan meyakinkan untuk memberi tahu "mengapa peta situs diperlukan?"
- Jika situs memiliki banyak URL halaman.
- Jika memiliki volume arsip halaman yang berat.
- Jika baru diluncurkan dan diabaikan (~ nill) ditautkan oleh situs eksternal.
- Situs ini memiliki sejumlah besar file media kaya.
Alat untuk membuat peta situs
Ada alat online atau integrable untuk menghasilkan peta situs untuk situs web. Juga, generator peta situs diluncurkan sebagai produk SaaS dan menyediakan berbagai skala fitur untuk pelanggan mereka. XML-Sitemaps Generator adalah alat online populer untuk membuat peta situs. Ini menciptakan format optimal untuk diposting ke mesin pencari seperti Google, Bing dan banyak lagi. Halaman yang ditautkan menunjukkan alat generator peta situs online alternatif lainnya. Ini menghasilkan Gambar dinamis - dan peta situs multibahasa.
Tentang contoh ini
Menghasilkan peta situs untuk situs web dalam PHP adalah tujuan dari contoh ini. Ini mengimplementasikan layanan ini dengan struktur kode bersih. Ini membuat konfigurasi, model, layanan, dan DAO untuk membuat generator peta situs XML dinamis secara sistematis di PHP menggunakan database MySQL. Ini tidak menggunakan pustaka atau alat pihak ketiga di mana proses pembuatan peta situs bergantung. Ini adalah struktur berkas dari contoh pembuatan peta situs ini. Ini mungkin menunjukkan kebersihan dan kesederhanaan cara penerapannya.
Ini memiliki meta halaman dalam database dan membuat model untuk mengambil meta situs. Layanan pembuatan peta situs menggunakan metadata untuk membuat skema XML untuk protokol peta situs. Tombol "Hasilkan" di UI memicu pembuatan peta situs dan mengakui pengguna. Ini menghasilkan dua XML. Salah satunya adalah indeks peta situs dan yang lainnya adalah peta situs aktual yang akan di-crawl. Ini menyimpan file yang dihasilkan dalam akar aplikasi yang ditentukan sebagai direktori target.
Database script
File SQL ini berisi skrip database untuk mengatur struktur tabel untuk menjalankan contoh ini. Ini berisi pernyataan CREATE dan data tabel tbl_page. Ini memiliki catatan memiliki judul meta halaman, deskripsi, siput dan banyak lagi. Siput digunakan untuk menyiapkan URL halaman selama pembuatan elemen XML peta situs. sql/database.sql
-- phpMyAdmin SQL Dump -- version 5.0.3 -- https://www.phpmyadmin.net/ -- -- Host: 127.0.0.1 -- Generation Time: Mar 31, 2021 at 07:12 AM -- Server version: 10.4.14-MariaDB -- PHP Version: 7.2.34 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Database: `blog_example` -- -- -------------------------------------------------------- -- -- Table structure for table `tbl_page` -- CREATE TABLE `tbl_page` ( `id` int(11) NOT NULL, `page_title` varchar(255) NOT NULL, `description` varchar(255) NOT NULL, `slug` varchar(255) NOT NULL, `creat_at` datetime NOT NULL DEFAULT current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- -- Dumping data for table `tbl_page` -- INSERT INTO `tbl_page` (`id`, `page_title`, `description`, `slug`, `creat_at`) VALUES (1, 'about-us', 'It contain some personal information.', 'about-us', '2021-03-31 10:34:35'), (2, 'portfolio', 'It provides clients to view your work.', 'portfolio', '2021-03-31 10:34:35'), (3, 'contact-us', 'It includes all the standard information.', 'contact-us', '2021-03-31 10:34:35'), (4, 'our-services', 'Descriptions of the products and services.', 'our-services', '2021-03-31 10:34:35'); -- -- Indexes for dumped tables -- -- -- Indexes for table `tbl_page` -- ALTER TABLE `tbl_page` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `tbl_page` -- ALTER TABLE `tbl_page` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Hasilkan peta situs secara dinamis di PHP
Bagian ini memiliki kode untuk menampilkan kontrol UI untuk memicu proses pembuatan peta situs di PHP. Juga, ia memiliki kode kelas model PHP yang menghubungkan DB untuk mendapatkan meta halaman dari database.
Memicu pembuatan peta situs dari UI
index.php (HTML Template)assets/css/style.css<html>
<head> <title>Generate Sitemap</title> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="./assets/css/style.css" rel="stylesheet" /> </head> <body> <div class="container"> <div class="row"> <a href="?action=generate" class="btn-generate" title="Generate">Generate Sitemap</a> </div> <div class="row"> <?php if(!empty($success)){?> <div class="success"><?php echo $success;?></div> <?php }else if(!empty($error)){?> <div class="error"><?php echo $error;?></div> <?php }?> </div> </div> </body> </html>
.container { -webkit-font-smoothing: antialiased; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: .9em; color: #1e2a28; width: 550px; margin: 0 auto; padding: 0px 20px 20px 20px; margin-top: 50px; } .row { margin: 15px 0; display: flex; } .btn-generate:hover { background: #353434; } .btn-generate { padding: 10px; background: #4C4B4B; border-radius: 3px; text-decoration: none; border: 1px #353434 solid; color: #FFF; } .error { width: 100%; color: #D8000C; background-color: #f5d7d4; border: 1px solid #f2ccc7; opacity: 0.83; transition: opacity 0.6s; padding: 10px; border-radius: 3px; } .success { width: 100%; text-align: left; color: #007532; background-color: #c1f9d8; border: 1px solid #bce8ce; padding: 10px; border-radius: 3px; }
Mengambil halaman dari database
Ini adalah kode PHP yang akan dieksekusi pada mengklik tautan Hasilkan di halaman beranda. Ini memanggil kelas model untuk mengambil data halaman. Array yang dihasilkan akan dikirim ke layanan pembuatan peta situs. Endpoint PHP ini menyiapkan teks respons berdasarkan hasil bersih proses pembuatan peta situs.
index.php (PHP code)
Kelas model ini menghubungkan aplikasi DataSource untuk mengambil meta halaman. Fungsi getAllPage() mengembalikan array data baris dari tabel tbl_page tabel.
Model/Page.php
<?php namespace Phppot; class Page { private $ds; function __construct() { require_once __DIR__ . '/../lib/DataSource.php'; $this->ds = new DataSource(); } function getAllPage() { $query = "SELECT slug FROM tbl_page"; $result = $this->ds->select($query); $resultArray = array(); foreach ($result as $pages) { foreach ($pages as $value) { $resultArray[] = $value; } } return $resultArray; } }
Layanan peta situs di PHP untuk membangun XML Contoh ini berisi file konfigurasi yang mendefinisikan URL domain root dengan konstanta. Ini digunakan saat membuat peta situs <URL>item untuk menyiapkan elemen lokasi halaman.
lib/Config.php
<?php namespace Phppot; class Config { const SITE_DOMAIN = "http://localhost/"; } Kelas AppSiteMapService membuat instantiates SiteMapService di konstruktornya. Ini memanggil fungsi untuk menambahkan item peta situs dan mengatur indeks peta situs dengan menggunakan instan ini dibuat. Layanan ini memiliki fungsi untuk menambahkan URL halaman beranda secara eksklusif. Dan, itu menambahkan <URL>ke <URLSET> dengan iterasi data halaman dengan loop. Setelah itu, ia memanggil layanan untuk menghasilkan indeks peta situs. Ini adalah XML lain untuk mengindeks file peta situs yang dihasilkan dari situs web.
Service/AppSiteMapService.php
<?php namespace Phppot\Service; use Phppot\Config; /** * This SiteMapGeneration Class * To Call method From SiteMapService to Generate Xml for sitemap * and also sitemap index file. */ class AppSiteMapService { private $siteMapService; private $domain; public function __construct() { require_once __DIR__ . '/../lib/Config.php'; $this->domain = Config::SITE_DOMAIN; require_once __DIR__ . '/SiteMapService.php'; $this->siteMapService = new SiteMapService($this->domain); } private function addHomePage() { // Home Page url $this->siteMapService->addItem("", "", ""); } private function addSitePages($result) { if (! empty($result)) { foreach ($result as $k => $v) { $this->siteMapService->addItem($result[$k]); } } } public function generateSiteMap($result) { $this->addHomePage(); $this->addSitePages($result); $siteMapResult = $this->siteMapService->createSitemapIndex($this->domain, 'Now'); if (empty($siteMapResult)) { $result = "1"; } else { $result = "0"; } return $result; } }
Layanan ini adalah inti dari generator peta situs. Ini menggunakan kelas XMLWriter untuk membangun peta situs XML dinamis di PHP. Properti kelas memegang instans penulis, nama file peta situs, batas maksimal item per peta situs, dan lainnya. Ini mendefinisikan setter getters untuk domain root, nama file, jalur dan lain-lain. Metode addItem() digunakan untuk menulis setiap <URL> dengan anak-anaknya ke dalam <URLSET>. Setiap item dapat menyimpan detail lebih lanjut seperti frekuensi perubahan halaman, prioritas, dan lain-lain.
Service/SiteMapService.php
<?php namespace Phppot\Service; use XMLWriter; /** * SiteMap * * This class used for generating Google Sitemap files * Cycle: Schema added for validation, time format changed to ISO * * @package SiteMap * @author Cycle * @copyright 2018 Cycle * @license Cycle License */ class SiteMapService { /** * * @var XMLWriter */ private $writer; private $domain; private $path; private $filename = 'sitemap'; private $current_item = 0; private $current_sitemap = 0; const EXT = '.xml'; const SCHEMA = 'http://www.sitemaps.org/schemas/sitemap/0.9'; const DEFAULT_PRIORITY = 0.5; const ITEM_PER_SITEMAP = 50000; const SEPERATOR = '-'; const INDEX_SUFFIX = 'index'; /** * * @param string $domain */ public function __construct($domain) { $this->setDomain($domain); } /** * Sets root path of the website, starting with http:// or https:// * * @param string $domain */ public function setDomain($domain) { $this->domain = $domain; return $this; } /** * Returns root path of the website * * @return string */ private function getDomain() { return $this->domain; } /** * Returns XMLWriter object instance * * @return XMLWriter */ private function getWriter() { return $this->writer; } /** * Assigns XMLWriter object instance * * @param XMLWriter $writer */ private function setWriter(XMLWriter $writer) { $this->writer = $writer; } /** * Returns the path of sitemaps * * @return string */ private function getPath() { return $this->path; } /** * Sets paths of sitemaps * * @param string $path * @return Sitemap */ public function setPath($path) { $this->path = $path; return $this; } /** * Returns the filename of the sitemap file * * @return string */ private function getFilename() { return $this->filename; } /** * Sets filename of sitemap file * * @param string $filename * @return Sitemap */ public function setFilename($filename) { $this->filename = $filename; return $this; } /** * Returns current item count * * @return int */ private function getCurrentItem() { return $this->current_item; } /** * Increases item counter */ private function incCurrentItem() { $this->current_item = $this->current_item + 1; } /** * Returns current sitemap file count * * @return int */ private function getCurrentSitemap() { return $this->current_sitemap; } /** * Increases sitemap file count */ private function incCurrentSitemap() { $this->current_sitemap = $this->current_sitemap + 1; } /** * Prepares sitemap XML document */ private function startSitemap() { $this->setWriter(new XMLWriter()); if ($this->getCurrentSitemap()) { $this->getWriter()->openURI($this->getPath() . $this->getFilename() . self::SEPERATOR . $this->getCurrentSitemap() . self::EXT); } else { $this->getWriter()->openURI($this->getPath() . $this->getFilename() . self::EXT); } $this->getWriter()->startDocument('1.0', 'UTF-8'); $this->getWriter()->setIndent(true); $this->getWriter()->startElement('urlset'); $this->getWriter()->writeAttribute('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance"); $this->getWriter()->writeAttribute('xsi:schemaLocation', "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"); $this->getWriter()->writeAttribute('xmlns', self::SCHEMA); } /** * Adds an item to the sitemap * * @param string $loc * URL of the page. This value must be less than 2,048 characters. * @param string $priority * The priority of this URL relative to other URLs on your SiteMapService. Valid values range from 0.0 to 1.0. * @param string $changefreq * How frequently the page is likely to change. Valid values are always, hourly, daily, weekly, monthly, yearly and never. * @param string|int $lastmod * The date of last modification of URL. Unix timestamp or any English textual DateTime description. * @return Sitemap */ public function addItem($loc, $priority = self::DEFAULT_PRIORITY, $changefreq = NULL, $lastmod = NULL) { if (($this->getCurrentItem() % self::ITEM_PER_SITEMAP) == 0) { if ($this->getWriter() instanceof XMLWriter) { $this->endSitemap(); } $this->startSitemap(); $this->incCurrentSitemap(); } $this->incCurrentItem(); $this->getWriter()->startElement('url'); if ($loc == "http://localhost/") { $this->getWriter()->writeElement('loc', $loc); } else { $this->getWriter()->writeElement('loc', $this->getDomain() . $loc); } if ($lastmod) $this->getWriter()->writeElement('lastmod', $this->getLastModifiedDate($lastmod)); if ($changefreq) $this->getWriter()->writeElement('changefreq', $changefreq); $this->getWriter()->endElement(); return $this; } /** * Prepares given a date for sitemap * * @param string $date * Unix timestamp or any English textual datetime description * @return ISO8601 format. */ private function getLastModifiedDate($date) { if (ctype_digit($date)) { return date('c', $date); } else { $date = strtotime($date); return date('c', $date); } } /** * Finalizes tags of sitemap XML document. */ private function endSitemap() { if (! $this->getWriter()) { $this->startSitemap(); } $this->getWriter()->endElement(); $this->getWriter()->endDocument(); } /** * Writes Google sitemap index for generated sitemap files * * @param string $loc * Accessible URL path of sitemaps * @param string|int $lastmod * The date of last modification of sitemap. Unix timestamp or any English textual datetime description. */ public function createSitemapIndex($loc, $lastmod = 'Today') { $this->endSitemap(); $indexwriter = new XMLWriter(); $indexwriter->openURI($this->getPath() . $this->getFilename() . self::SEPERATOR . self::INDEX_SUFFIX . self::EXT); $indexwriter->startDocument('1.0', 'UTF-8'); $indexwriter->setIndent(true); $indexwriter->startElement('sitemapindex'); $indexwriter->writeAttribute('xmlns', self::SCHEMA); for ($index = 0; $index < $this->getCurrentSitemap(); $index ++) { $indexwriter->startElement('sitemap'); $indexwriter->writeElement('loc', $loc . $this->getFilename() . ($index ? self::SEPERATOR . $index : '') . self::EXT); $indexwriter->writeElement('lastmod', $this->getLastModifiedDate($lastmod)); $indexwriter->endElement(); } $indexwriter->endElement(); $indexwriter->endDocument(); } }
Format data XML peta situs output
Cuplikan layar ini memperlihatkan file indeks peta situs. Ini memiliki referensi untuk semua peta situs yang dibuat untuk situs web. Ini menampilkan jalur file peta situs dan tanggal yang dimodifikasi dari setiap <sitemap>.
Posting Komentar