456 lines
18 KiB
PHP
456 lines
18 KiB
PHP
<?php
|
|
include '../auth.php';
|
|
include '../../koneksi.php'; // Pastikan koneksi tersedia
|
|
include '../function/landingpage_helper.php';
|
|
|
|
$user_id = $_SESSION['user_id'];
|
|
|
|
$data = getLandingPageData($user_id, $conn);
|
|
$disabled = $data['disabled'];
|
|
$slug_url = $data['slug_url'];
|
|
$showLandingPage = $data['showLandingPage'];
|
|
|
|
$sql = "SELECT * FROM seo WHERE id_user = ?";
|
|
$stmt = $conn->prepare($sql);
|
|
$stmt->bind_param("i", $user_id);
|
|
$stmt->execute();
|
|
$result = $stmt->get_result();
|
|
$seo = $result->fetch_assoc(); // Ambil data sebagai array
|
|
|
|
$action = !$seo ? "addseo.php" : "updateseo.php";
|
|
?>
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
|
|
|
<title>Pengaturan SEO | User</title>
|
|
<meta content="" name="description">
|
|
<meta content="" name="keywords">
|
|
<meta name="robots" content="noindex">
|
|
|
|
<!-- Favicons -->
|
|
<link href="../../assets/img/favicon.png" rel="icon">
|
|
<link href="../../assets/img/apple-touch-icon.png" rel="apple-touch-icon">
|
|
|
|
<!-- Google Fonts -->
|
|
<link href="https://fonts.gstatic.com" rel="preconnect">
|
|
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
|
|
|
|
<!-- Vendor CSS Files -->
|
|
<link href="../../assets/template/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
|
<link href="../../assets/template/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
|
|
<link href="../../assets/template/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
|
|
<link href="../../assets/template/vendor/quill/quill.snow.css" rel="stylesheet">
|
|
<link href="../../assets/template/vendor/quill/quill.bubble.css" rel="stylesheet">
|
|
<link href="../../assets/template/vendor/remixicon/remixicon.css" rel="stylesheet">
|
|
<link href="../../assets/template/vendor/simple-datatables/style.css" rel="stylesheet">
|
|
|
|
<!-- Template Main CSS File -->
|
|
<link href="../../assets/template/css/style.css" rel="stylesheet">
|
|
|
|
<!-- =======================================================
|
|
* Template Name: NiceAdmin
|
|
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
|
|
* Updated: Apr 20 2024 with Bootstrap v5.3.3
|
|
* Author: BootstrapMade.com
|
|
* License: https://bootstrapmade.com/license/
|
|
======================================================== -->
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<!-- ======= Header ======= -->
|
|
<header id="header" class="header fixed-top d-flex align-items-center">
|
|
|
|
<div class="d-flex align-items-center justify-content-between">
|
|
<a href="" class="logo d-flex align-items-center">
|
|
<img src="../../assets/img/logo.png" alt="">
|
|
<span class="d-none d-lg-block">Portal UMKM</span>
|
|
</a>
|
|
<i class="bi bi-list toggle-sidebar-btn"></i>
|
|
</div><!-- End Logo -->
|
|
|
|
<nav class="header-nav ms-auto">
|
|
<ul class="d-flex align-items-center">
|
|
|
|
<li class="nav-item dropdown pe-3">
|
|
|
|
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
|
|
<span class="fw-semibold dropdown-toggle ps-2">Hai, <?php echo $_SESSION['nama_lengkap']; ?>!</span>
|
|
</a><!-- End Profile Iamge Icon -->
|
|
|
|
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
|
|
<li class="dropdown-header">
|
|
<h6><?php echo $_SESSION['nama_lengkap']; ?></h6>
|
|
<span><?php echo ucfirst($_SESSION['role']); ?></span>
|
|
</li>
|
|
<li>
|
|
<hr class="dropdown-divider">
|
|
</li>
|
|
|
|
<li>
|
|
<a class="dropdown-item d-flex align-items-center" href="../update-profile/">
|
|
<i class="bi bi-gear"></i>
|
|
<span>Pengaturan</span>
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<hr class="dropdown-divider">
|
|
</li>
|
|
|
|
<li>
|
|
<a class="dropdown-item d-flex align-items-center" href="#" data-bs-toggle="modal" data-bs-target="#confirmLogoutModal">
|
|
<i class="bi bi-box-arrow-right"></i>
|
|
<span>Keluar</span>
|
|
</a>
|
|
</li>
|
|
|
|
</ul><!-- End Profile Dropdown Items -->
|
|
</li><!-- End Profile Nav -->
|
|
|
|
</ul>
|
|
</nav><!-- End Icons Navigation -->
|
|
|
|
</header><!-- End Header -->
|
|
|
|
<!-- ======= Sidebar ======= -->
|
|
<aside id="sidebar" class="sidebar bg-gradient-primary text-white vh-100 p-3 shadow-lg">
|
|
|
|
<ul class="nav flex-column sidebar-nav">
|
|
|
|
<li class="nav-item mb-2">
|
|
<a class="nav-link d-flex align-items-center" href="../../users">
|
|
<i class="bi bi-columns-gap"></i>
|
|
<span>Dashboard</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="nav-item mb-2">
|
|
<a class="nav-link d-flex align-items-center" href="../data-usaha">
|
|
<i class="bi bi-shop"></i>
|
|
<span>Data Usaha</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="nav-item mb-2">
|
|
<a class="nav-link d-flex align-items-center" href="../produk">
|
|
<i class="bi bi-box-seam"></i>
|
|
<span>Produk</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="nav-item mb-2">
|
|
<a class="nav-link d-flex align-items-center" href="../keunggulan">
|
|
<i class="bi bi-patch-check"></i>
|
|
<span>Keunggulan</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="nav-item mb-2">
|
|
<a class="nav-link d-flex align-items-center" href="../testimoni">
|
|
<i class="bi bi-chat-dots"></i>
|
|
<span>Testimoni</span>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="nav-item mb-2">
|
|
<a class="nav-link d-flex align-items-center collapsed" href="../seo">
|
|
<i class="bi bi-search"></i>
|
|
<span>SEO</span>
|
|
</a>
|
|
</li>
|
|
|
|
<?php if ($showLandingPage): ?>
|
|
<li class="nav-item mb-2">
|
|
<a class="nav-link d-flex align-items-center" href="../landingpage">
|
|
<i class="bi bi-journal-richtext"></i>
|
|
<span>Landing Page</span>
|
|
</a>
|
|
</li>
|
|
<?php endif; ?>
|
|
|
|
<li class="nav-item text-center mt-3">
|
|
<a class="btn btn-primary px-4 fs-6 py-2 <?= $disabled ? 'disabled' : ''; ?>"
|
|
href="../../<?php echo $slug_url; ?>" target="_blank">
|
|
<i class="bi bi-eye"></i> Lihat Landing Page
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</aside>
|
|
|
|
<main id="main" class="main">
|
|
|
|
<div class="pagetitle">
|
|
<h1>Pengaturan SEO</h1>
|
|
<nav>
|
|
<ol class="breadcrumb">
|
|
<li class="breadcrumb-item"><a href="">Beranda</a></li>
|
|
<li class="breadcrumb-item">SEO</li>
|
|
</ol>
|
|
</nav>
|
|
</div><!-- End Page Title -->
|
|
|
|
<?php if (isset($_SESSION['success'])): ?>
|
|
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
|
<?php echo $_SESSION['success']; ?>
|
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
|
</div>
|
|
<?php unset($_SESSION['success']); // Hapus pesan setelah ditampilkan
|
|
?>
|
|
<?php endif; ?>
|
|
|
|
<?php if (isset($_SESSION['error'])): ?>
|
|
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
|
<?php echo $_SESSION['error']; ?>
|
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
|
</div>
|
|
<?php unset($_SESSION['error']); // Hapus pesan setelah ditampilkan
|
|
?>
|
|
<?php endif; ?>
|
|
|
|
<section class="section profile">
|
|
<div class="row">
|
|
<div class="col-xl-12">
|
|
|
|
<div class="card">
|
|
<div class="card-body pt-3">
|
|
<!-- Bordered Tabs -->
|
|
<ul class="nav nav-tabs nav-tabs-bordered">
|
|
|
|
<li class="nav-item">
|
|
<button class="nav-link active" data-bs-toggle="tab" data-bs-target="#seo-overview">Data SEO</button>
|
|
</li>
|
|
|
|
<li class="nav-item">
|
|
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#seo-edit">Edit Data SEO</button>
|
|
</li>
|
|
|
|
</ul>
|
|
<div class="tab-content pt-2">
|
|
|
|
<div class="tab-pane fade show active profile-overview" id="seo-overview">
|
|
<h5 class="card-title">Informasi Data SEO</h5>
|
|
|
|
<div class="row">
|
|
<div class="col-lg-2 col-md-4 label">Judul SEO</div>
|
|
<div class="col-lg-10 col-md-8"><?php echo htmlspecialchars($seo['judul_seo'] ?? '-'); ?></div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-lg-2 col-md-4 label">Meta Deskripsi</div>
|
|
<div class="col-lg-10 col-md-8"><?php echo htmlspecialchars($seo['deskripsi_seo'] ?? '-'); ?></div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-lg-2 col-md-4 label">Meta Kata Kunci</div>
|
|
<div class="col-lg-10 col-md-8"><?php echo htmlspecialchars($seo['katakunci_seo'] ?? '-'); ?></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tab-pane fade profile-edit pt-3" id="seo-edit">
|
|
|
|
<form method="POST" action="<?= $action; ?>">
|
|
<input type="hidden" name="id_seo" value="<?= $seo['id_seo'] ?? ''; ?>">
|
|
|
|
<div class="row mb-3">
|
|
<label for="judul_seo" class="col-md-4 col-lg-2 col-form-label">Judul SEO<span class="text-danger">*</span></label>
|
|
<div class="col-md-8 col-lg-10">
|
|
<textarea type="text" class="form-control" name="judul_seo" id="judul_seo" required><?= $seo['judul_seo'] ?? ''; ?></textarea>
|
|
<small id="judul_seo_indicator" class="text-muted"></small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row mb-3">
|
|
<label for="deskripsi_seo" class="col-md-4 col-lg-2 col-form-label">Meta Deskripsi<span class="text-danger">*</span></label>
|
|
<div class="col-md-8 col-lg-10">
|
|
<textarea class="form-control" name="deskripsi_seo" id="deskripsi_seo" required><?= $seo['deskripsi_seo'] ?? ''; ?></textarea>
|
|
<small id="deskripsi_seo_indicator" class="text-muted"></small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row mb-3">
|
|
<label for="meta_keyword" class="col-md-4 col-lg-2 col-form-label">Meta Kata Kunci<span class="text-danger">*</span></label>
|
|
<div class="col-md-8 col-lg-10">
|
|
<textarea type="text" class="form-control" name="meta_keyword" id="meta_keyword" placeholder="kata kunci 1, kata kunci 2, kata kunci 3, dst" required><?= $seo['katakunci_seo'] ?? ''; ?></textarea>
|
|
<ul id="suggestions" class="list-group mt-2"></ul>
|
|
<small id="meta_keyword_indicator" class="text-muted"></small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="text-center">
|
|
<button type="submit" class="btn btn-primary"><i class="bi bi-check-circle"></i> Simpan</button>
|
|
</div>
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</div><!-- End Bordered Tabs -->
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Modal Konfirmasi Logout -->
|
|
<div class="modal fade" id="confirmLogoutModal" tabindex="-1" aria-labelledby="logoutModalLabel" aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="logoutModalLabel">Konfirmasi Keluar</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
Apakah Anda yakin ingin keluar dari halaman ini?
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
|
|
<a href="../logout.php" id="logoutConfirmBtn" class="btn btn-danger">Keluar</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</main><!-- End #main -->
|
|
|
|
<!-- ======= Footer ======= -->
|
|
<footer id="footer" class="footer">
|
|
<div class="copyright">
|
|
© Copyright <strong><span>Portal UMKM</span></strong>. All Rights Reserved
|
|
</div>
|
|
<div class="credits">
|
|
<!-- All the links in the footer should remain intact. -->
|
|
<!-- You can delete the links only if you purchased the pro version. -->
|
|
<!-- Licensing information: https://bootstrapmade.com/license/ -->
|
|
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ -->
|
|
<!-- Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a> -->
|
|
</div>
|
|
</footer><!-- End Footer -->
|
|
|
|
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
|
|
|
|
<!-- Vendor JS Files -->
|
|
<script src="../../assets/template/vendor/apexcharts/apexcharts.min.js"></script>
|
|
<script src="../../assets/template/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
|
<script src="../../assets/template/vendor/chart.js/chart.umd.js"></script>
|
|
<script src="../../assets/template/vendor/echarts/echarts.min.js"></script>
|
|
<script src="../../assets/template/vendor/quill/quill.js"></script>
|
|
<script src="../../assets/template/vendor/simple-datatables/simple-datatables.js"></script>
|
|
<script src="../../assets/template/vendor/tinymce/tinymce.min.js"></script>
|
|
<script src="../../assets/template/vendor/php-email-form/validate.js"></script>
|
|
|
|
<!-- Template Main JS File -->
|
|
<script src="../../assets/template/js/main.js"></script>
|
|
|
|
<script>
|
|
document.getElementById('meta_keyword').addEventListener('input', function () {
|
|
let inputField = this;
|
|
let suggestionsList = document.getElementById('suggestions');
|
|
if (!suggestionsList) return;
|
|
|
|
let values = inputField.value.split(',').map(v => v.trim());
|
|
let query = values.pop(); // Ambil kata terakhir untuk dijadikan query
|
|
|
|
if (query.length < 2) {
|
|
suggestionsList.innerHTML = '';
|
|
return;
|
|
}
|
|
|
|
fetch(`proxy.php?q=${query}`)
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
let suggestions = data[1] || [];
|
|
suggestionsList.innerHTML = '';
|
|
|
|
suggestions.forEach(item => {
|
|
let li = document.createElement('li');
|
|
li.classList.add('list-group-item');
|
|
li.textContent = item;
|
|
li.style.cursor = 'pointer';
|
|
|
|
li.addEventListener('click', function () {
|
|
values.push(item); // Ganti kata terakhir dengan saran yang dipilih
|
|
inputField.value = values.join(', ') + ', '; // Gabungkan kembali dengan koma
|
|
suggestionsList.innerHTML = '';
|
|
});
|
|
|
|
suggestionsList.appendChild(li);
|
|
});
|
|
})
|
|
.catch(error => console.error('Error:', error));
|
|
});
|
|
|
|
function updateSEOIndicator(id, value, goodRange, mediumRange) {
|
|
let indicator = document.getElementById(id);
|
|
let length = value.length;
|
|
|
|
if (length >= goodRange[0] && length <= goodRange[1]) {
|
|
indicator.textContent = "✅ Baik";
|
|
indicator.className = "text-success";
|
|
} else if ((length >= mediumRange[0] && length <= mediumRange[1]) || length > goodRange[1]) {
|
|
indicator.textContent = "⚠️ Sedang";
|
|
indicator.className = "text-warning";
|
|
} else {
|
|
indicator.textContent = "❌ Buruk";
|
|
indicator.className = "text-danger";
|
|
}
|
|
}
|
|
|
|
function checkKeywordRelevance() {
|
|
let keywords = document.getElementById('meta_keyword').value.split(',').map(k => k.trim()).filter(k => k);
|
|
let title = document.getElementById('judul_seo').value.toLowerCase();
|
|
let description = document.getElementById('deskripsi_seo').value.toLowerCase();
|
|
let keywordIndicator = document.getElementById('meta_keyword_indicator');
|
|
|
|
let relevantKeywords = keywords.filter(keyword => title.includes(keyword) || description.includes(keyword));
|
|
|
|
if (relevantKeywords.length >= 3) {
|
|
keywordIndicator.textContent = "✅ Kata kunci relevan dengan judul dan deskripsi";
|
|
keywordIndicator.className = "text-success";
|
|
} else if (relevantKeywords.length > 0) {
|
|
keywordIndicator.textContent = "⚠️ Beberapa kata kunci belum digunakan dalam judul atau deskripsi";
|
|
keywordIndicator.className = "text-warning";
|
|
} else {
|
|
keywordIndicator.textContent = "❌ Kata kunci tidak ditemukan dalam judul atau deskripsi";
|
|
keywordIndicator.className = "text-danger";
|
|
}
|
|
}
|
|
|
|
document.getElementById('judul_seo').addEventListener('input', function() {
|
|
updateSEOIndicator('judul_seo_indicator', this.value, [50, 60], [30, 70]);
|
|
checkKeywordRelevance();
|
|
});
|
|
|
|
document.getElementById('deskripsi_seo').addEventListener('input', function() {
|
|
updateSEOIndicator('deskripsi_seo_indicator', this.value, [120, 160], [80, 180]);
|
|
checkKeywordRelevance();
|
|
});
|
|
|
|
document.getElementById('meta_keyword').addEventListener('input', function() {
|
|
let keywords = this.value.split(',').map(k => k.trim()).filter(k => k);
|
|
let indicator = document.getElementById('meta_keyword_indicator');
|
|
|
|
if (keywords.length >= 3 && keywords.length <= 5) {
|
|
indicator.textContent = "✅ Baik";
|
|
indicator.className = "text-success";
|
|
} else if (keywords.length === 1 || keywords.length > 5) {
|
|
indicator.textContent = "⚠️ Sedang";
|
|
indicator.className = "text-warning";
|
|
} else {
|
|
indicator.textContent = "❌ Buruk";
|
|
indicator.className = "text-danger";
|
|
}
|
|
checkKeywordRelevance();
|
|
});
|
|
</script>
|
|
|
|
</body>
|
|
|
|
</html>
|