Backup database and code changes - 2025-06-09 05:33:32
This commit is contained in:
@@ -32,7 +32,8 @@
|
|||||||
"Bash(npm install:*)",
|
"Bash(npm install:*)",
|
||||||
"Bash(terser:*)",
|
"Bash(terser:*)",
|
||||||
"Bash(curl:*)",
|
"Bash(curl:*)",
|
||||||
"Bash(cp:*)"
|
"Bash(cp:*)",
|
||||||
|
"WebFetch(domain:ukdataservices.co.uk)"
|
||||||
],
|
],
|
||||||
"deny": []
|
"deny": []
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
// Add inline CSS fix for buttons
|
// This file adds inline CSS for button fixes
|
||||||
|
// It should only output CSS, not modify files
|
||||||
$articles_dir = '/var/www/html/blog/articles/';
|
?>
|
||||||
$files = glob($articles_dir . '*.php');
|
|
||||||
|
|
||||||
$inline_css = '
|
|
||||||
<style>
|
<style>
|
||||||
.btn {
|
.btn {
|
||||||
background: #179e83 !important;
|
background: #179e83 !important;
|
||||||
@@ -27,23 +24,4 @@ $inline_css = '
|
|||||||
background: #11725e !important;
|
background: #11725e !important;
|
||||||
color: white !important;
|
color: white !important;
|
||||||
}
|
}
|
||||||
</style>';
|
</style>
|
||||||
|
|
||||||
foreach ($files as $file) {
|
|
||||||
$content = file_get_contents($file);
|
|
||||||
|
|
||||||
if ($content === false) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add inline CSS right before </head>
|
|
||||||
if (strpos($content, '</head>') !== false && strpos($content, 'btn-fix-inline') === false) {
|
|
||||||
$content = str_replace('</head>', $inline_css . "\n<!-- btn-fix-inline -->\n</head>", $content);
|
|
||||||
|
|
||||||
file_put_contents($file, $content);
|
|
||||||
echo "Added inline CSS to: " . basename($file) . "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// echo "Inline CSS fix complete!\n";
|
|
||||||
?>
|
|
||||||
@@ -1252,7 +1252,7 @@ img {
|
|||||||
|
|
||||||
/* Blog article styles */
|
/* Blog article styles */
|
||||||
.blog-article {
|
.blog-article {
|
||||||
padding: 40px 0 80px;
|
padding: 110px 0 80px;
|
||||||
background: white;
|
background: white;
|
||||||
position: relative;
|
position: relative;
|
||||||
clear: both;
|
clear: both;
|
||||||
@@ -2965,6 +2965,33 @@ aside.related-articles {
|
|||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Category links section */
|
||||||
|
.category-links {
|
||||||
|
display: flex;
|
||||||
|
gap: 1rem;
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-top: 2rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.category-links .btn {
|
||||||
|
min-width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mobile responsive for category links */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.category-links {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.category-links .btn {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 300px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Button text visibility fix */
|
/* Button text visibility fix */
|
||||||
.btn * {
|
.btn * {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
|
|||||||
@@ -142,8 +142,7 @@ $read_time = 12;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -151,7 +150,6 @@ $read_time = 12;
|
|||||||
<li aria-current="page"><span>Dashboard Design</span></li>
|
<li aria-current="page"><span>Dashboard Design</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
@@ -1351,12 +1349,12 @@ $read_time = 12;
|
|||||||
progressBar.className = 'reading-progress';
|
progressBar.className = 'reading-progress';
|
||||||
progressBar.style.cssText = `
|
progressBar.style.cssText = `
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 70px;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 0%;
|
width: 0%;
|
||||||
height: 3px;
|
height: 3px;
|
||||||
background: linear-gradient(90deg, #179e83, #144784);
|
background: linear-gradient(90deg, #179e83, #144784);
|
||||||
z-index: 999;
|
z-index: 1000;
|
||||||
transition: width 0.3s ease;
|
transition: width 0.3s ease;
|
||||||
`;
|
`;
|
||||||
document.body.appendChild(progressBar);
|
document.body.appendChild(progressBar);
|
||||||
|
|||||||
@@ -124,8 +124,7 @@ $read_time = 11;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -133,7 +132,6 @@ $read_time = 11;
|
|||||||
<li aria-current="page"><span>Cloud-Native Scraping Architecture</span></li>
|
<li aria-current="page"><span>Cloud-Native Scraping Architecture</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -142,8 +142,7 @@ $read_time = 8;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -151,7 +150,6 @@ $read_time = 8;
|
|||||||
<li aria-current="page"><span>ROI Metrics</span></li>
|
<li aria-current="page"><span>ROI Metrics</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -122,8 +122,7 @@ $og_image = "https://ukdataservices.co.uk/assets/images/icon-automation.svg";
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -131,7 +130,6 @@ $og_image = "https://ukdataservices.co.uk/assets/images/icon-automation.svg";
|
|||||||
<li aria-current="page"><span>Data Automation Strategies</span></li>
|
<li aria-current="page"><span>Data Automation Strategies</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="article-meta">
|
<div class="article-meta">
|
||||||
<span class="category-tag">Business Intelligence</span>
|
<span class="category-tag">Business Intelligence</span>
|
||||||
|
|||||||
@@ -124,8 +124,7 @@ $read_time = 9;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -133,7 +132,6 @@ $read_time = 9;
|
|||||||
<li aria-current="page"><span>Data Quality Validation Pipelines</span></li>
|
<li aria-current="page"><span>Data Quality Validation Pipelines</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ $breadcrumbs = [
|
|||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<article class="blog-article" style="margin-top: 80px;">
|
<article class="blog-article">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<nav class="breadcrumb" aria-label="Breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
|
|||||||
@@ -124,8 +124,7 @@ $read_time = 7;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -133,7 +132,6 @@ $read_time = 7;
|
|||||||
<li aria-current="page"><span>Financial Services Data Transformation</span></li>
|
<li aria-current="page"><span>Financial Services Data Transformation</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -58,7 +58,6 @@ $breadcrumbs = [
|
|||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
<?php include($_SERVER['DOCUMENT_ROOT'] . '/add_inline_css.php'); ?>
|
|
||||||
|
|
||||||
<script type="application/ld+json">
|
<script type="application/ld+json">
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -124,8 +124,7 @@ $read_time = 6;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -133,7 +132,6 @@ $read_time = 6;
|
|||||||
<li aria-current="page"><span>GDPR Data Minimisation</span></li>
|
<li aria-current="page"><span>GDPR Data Minimisation</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -124,8 +124,7 @@ $read_time = 8;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -133,7 +132,6 @@ $read_time = 8;
|
|||||||
<li aria-current="page"><span>Handling CAPTCHAs</span></li>
|
<li aria-current="page"><span>Handling CAPTCHAs</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -139,8 +139,7 @@ $read_time = 8;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -148,7 +147,6 @@ $read_time = 8;
|
|||||||
<li aria-current="page"><span>JavaScript Scraping</span></li>
|
<li aria-current="page"><span>JavaScript Scraping</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
@@ -592,12 +590,12 @@ await page.goto(url);
|
|||||||
progressBar.className = 'reading-progress';
|
progressBar.className = 'reading-progress';
|
||||||
progressBar.style.cssText = `
|
progressBar.style.cssText = `
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 70px;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 0%;
|
width: 0%;
|
||||||
height: 3px;
|
height: 3px;
|
||||||
background: linear-gradient(90deg, #179e83, #144784);
|
background: linear-gradient(90deg, #179e83, #144784);
|
||||||
z-index: 999;
|
z-index: 1000;
|
||||||
transition: width 0.3s ease;
|
transition: width 0.3s ease;
|
||||||
`;
|
`;
|
||||||
document.body.appendChild(progressBar);
|
document.body.appendChild(progressBar);
|
||||||
|
|||||||
@@ -142,8 +142,7 @@ $read_time = 14;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -151,7 +150,6 @@ $read_time = 14;
|
|||||||
<li aria-current="page"><span>Customer Churn Analytics</span></li>
|
<li aria-current="page"><span>Customer Churn Analytics</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -197,8 +197,7 @@ $read_time = 12;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -206,7 +205,6 @@ $read_time = 12;
|
|||||||
<li aria-current="page"><span>Python Scrapy Enterprise Guide</span></li>
|
<li aria-current="page"><span>Python Scrapy Enterprise Guide</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -71,6 +71,18 @@ $read_time = 11;
|
|||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
<!-- Breadcrumb Navigation -->
|
||||||
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
|
<div class="container">
|
||||||
|
<ol>
|
||||||
|
<li><a href="/">Home</a></li>
|
||||||
|
<li><a href="/blog">Blog</a></li>
|
||||||
|
<li><a href="/blog/categories/data-analytics.php">Data Analytics</a></li>
|
||||||
|
<li class="active" aria-current="page">Real-Time Analytics with Streaming Data</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
<main class="article-main">
|
<main class="article-main">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<article class="article-content">
|
<article class="article-content">
|
||||||
|
|||||||
@@ -71,6 +71,18 @@ $read_time = 9;
|
|||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
<!-- Breadcrumb Navigation -->
|
||||||
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
|
<div class="container">
|
||||||
|
<ol>
|
||||||
|
<li><a href="/">Home</a></li>
|
||||||
|
<li><a href="/blog">Blog</a></li>
|
||||||
|
<li><a href="/blog/categories/case-studies.php">Case Studies</a></li>
|
||||||
|
<li class="active" aria-current="page">Retail Competitor Monitoring Case Study</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
<main class="article-main">
|
<main class="article-main">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<article class="article-content">
|
<article class="article-content">
|
||||||
|
|||||||
@@ -124,8 +124,7 @@ $read_time = 10;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -133,7 +132,6 @@ $read_time = 10;
|
|||||||
<li aria-current="page"><span>Price Monitoring Strategies</span></li>
|
<li aria-current="page"><span>Price Monitoring Strategies</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -124,8 +124,7 @@ $read_time = 9;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -133,7 +132,6 @@ $read_time = 9;
|
|||||||
<li aria-current="page"><span>Selenium vs Playwright</span></li>
|
<li aria-current="page"><span>Selenium vs Playwright</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -142,8 +142,7 @@ $read_time = 16;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -151,7 +150,6 @@ $read_time = 16;
|
|||||||
<li aria-current="page"><span>Advanced SQL Analytics</span></li>
|
<li aria-current="page"><span>Advanced SQL Analytics</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
@@ -1590,12 +1588,12 @@ ORDER BY predicted_clv DESC;</code></pre>
|
|||||||
progressBar.className = 'reading-progress';
|
progressBar.className = 'reading-progress';
|
||||||
progressBar.style.cssText = `
|
progressBar.style.cssText = `
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 70px;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 0%;
|
width: 0%;
|
||||||
height: 3px;
|
height: 3px;
|
||||||
background: linear-gradient(90deg, #179e83, #144784);
|
background: linear-gradient(90deg, #179e83, #144784);
|
||||||
z-index: 999;
|
z-index: 1000;
|
||||||
transition: width 0.3s ease;
|
transition: width 0.3s ease;
|
||||||
`;
|
`;
|
||||||
document.body.appendChild(progressBar);
|
document.body.appendChild(progressBar);
|
||||||
|
|||||||
@@ -74,6 +74,18 @@ $read_time = 8;
|
|||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
<!-- Breadcrumb Navigation -->
|
||||||
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
|
<div class="container">
|
||||||
|
<ol>
|
||||||
|
<li><a href="/">Home</a></li>
|
||||||
|
<li><a href="/blog">Blog</a></li>
|
||||||
|
<li><a href="/blog/categories/compliance.php">Compliance</a></li>
|
||||||
|
<li class="active" aria-current="page">UK Cookie Law Compliance Guide</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main class="article-main">
|
<main class="article-main">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|||||||
@@ -124,8 +124,7 @@ $read_time = 8;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -133,7 +132,6 @@ $read_time = 8;
|
|||||||
<li aria-current="page"><span>UK Property Market Data Trends</span></li>
|
<li aria-current="page"><span>UK Property Market Data Trends</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -329,8 +329,7 @@ $read_time = 12;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -338,7 +337,6 @@ $read_time = 12;
|
|||||||
<li aria-current="page"><span>Web Scraping Compliance Guide</span></li>
|
<li aria-current="page"><span>Web Scraping Compliance Guide</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -124,8 +124,7 @@ $read_time = 9;
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Breadcrumb Navigation -->
|
<!-- Breadcrumb Navigation -->
|
||||||
<div class="breadcrumb">
|
<nav class="breadcrumb" aria-label="Breadcrumb">
|
||||||
<nav aria-label="Breadcrumb">
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="/">Home</a></li>
|
<li><a href="/">Home</a></li>
|
||||||
<li><a href="/blog/">Blog</a></li>
|
<li><a href="/blog/">Blog</a></li>
|
||||||
@@ -133,7 +132,6 @@ $read_time = 9;
|
|||||||
<li aria-current="page"><span>Rate Limiting</span></li>
|
<li aria-current="page"><span>Rate Limiting</span></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Article Content -->
|
<!-- Article Content -->
|
||||||
<main id="main-content">
|
<main id="main-content">
|
||||||
|
|||||||
@@ -697,4 +697,4 @@ UNLOCK TABLES;
|
|||||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
-- Dump completed on 2025-06-08 20:51:14
|
-- Dump completed on 2025-06-09 5:33:32
|
||||||
115
includes/article-footer.php
Normal file
115
includes/article-footer.php
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
<?php
|
||||||
|
// Get related articles from the same category
|
||||||
|
$current_category = isset($article_category) ? $article_category : 'Industry Insights';
|
||||||
|
$current_slug = isset($article_slug) ? $article_slug : '';
|
||||||
|
|
||||||
|
// Define related articles for different categories
|
||||||
|
$related_articles = [
|
||||||
|
'Industry Insights' => [
|
||||||
|
[
|
||||||
|
'title' => 'UK Property Market Data Trends 2024',
|
||||||
|
'slug' => 'uk-property-market-data-trends',
|
||||||
|
'category' => 'Industry Insights',
|
||||||
|
'read_time' => '8 min read'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'E-commerce Trends UK 2025',
|
||||||
|
'slug' => 'ecommerce-trends-uk-2025',
|
||||||
|
'category' => 'Industry Insights',
|
||||||
|
'read_time' => '6 min read'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'Manufacturing Supply Chain Optimization',
|
||||||
|
'slug' => 'manufacturing-supply-chain-optimization',
|
||||||
|
'category' => 'Industry Insights',
|
||||||
|
'read_time' => '10 min read'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'Technology' => [
|
||||||
|
[
|
||||||
|
'title' => 'Python Data Pipeline Tools 2025',
|
||||||
|
'slug' => 'python-data-pipeline-tools-2025',
|
||||||
|
'category' => 'Technology',
|
||||||
|
'read_time' => '12 min read'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'Selenium vs Playwright Comparison',
|
||||||
|
'slug' => 'selenium-vs-playwright-comparison',
|
||||||
|
'category' => 'Technology',
|
||||||
|
'read_time' => '8 min read'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'Python Scrapy Enterprise Guide',
|
||||||
|
'slug' => 'python-scrapy-enterprise-guide',
|
||||||
|
'category' => 'Technology',
|
||||||
|
'read_time' => '15 min read'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'Web Scraping' => [
|
||||||
|
[
|
||||||
|
'title' => 'Web Scraping Compliance UK Guide',
|
||||||
|
'slug' => 'web-scraping-compliance-uk-guide',
|
||||||
|
'category' => 'Web Scraping',
|
||||||
|
'read_time' => '10 min read'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'Handling CAPTCHAs in Web Scraping',
|
||||||
|
'slug' => 'handling-captchas-scraping',
|
||||||
|
'category' => 'Web Scraping',
|
||||||
|
'read_time' => '7 min read'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'JavaScript Heavy Sites Scraping',
|
||||||
|
'slug' => 'javascript-heavy-sites-scraping',
|
||||||
|
'category' => 'Web Scraping',
|
||||||
|
'read_time' => '9 min read'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'Data Analytics' => [
|
||||||
|
[
|
||||||
|
'title' => 'Real-time Analytics with Streaming Data',
|
||||||
|
'slug' => 'real-time-analytics-streaming-data',
|
||||||
|
'category' => 'Data Analytics',
|
||||||
|
'read_time' => '11 min read'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'SQL Analytics Advanced Techniques',
|
||||||
|
'slug' => 'sql-analytics-advanced-techniques',
|
||||||
|
'category' => 'Data Analytics',
|
||||||
|
'read_time' => '13 min read'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'Predictive Analytics for Customer Churn',
|
||||||
|
'slug' => 'predictive-analytics-customer-churn',
|
||||||
|
'category' => 'Data Analytics',
|
||||||
|
'read_time' => '9 min read'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
// Get articles for current category, exclude current article
|
||||||
|
$category_articles = isset($related_articles[$current_category]) ? $related_articles[$current_category] : $related_articles['Industry Insights'];
|
||||||
|
$filtered_articles = array_filter($category_articles, function($article) use ($current_slug) {
|
||||||
|
return $article['slug'] !== $current_slug;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Limit to 3 articles
|
||||||
|
$display_articles = array_slice($filtered_articles, 0, 3);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<section class="related-articles">
|
||||||
|
<h2>Related Articles</h2>
|
||||||
|
<div class="related-grid">
|
||||||
|
<?php foreach ($display_articles as $article): ?>
|
||||||
|
<article class="related-card">
|
||||||
|
<span class="category"><?php echo htmlspecialchars($article['category']); ?></span>
|
||||||
|
<h4><a href="/blog/articles/<?php echo htmlspecialchars($article['slug']); ?>.php"><?php echo htmlspecialchars($article['title']); ?></a></h4>
|
||||||
|
<span class="read-time"><?php echo htmlspecialchars($article['read_time']); ?></span>
|
||||||
|
</article>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
<div class="category-links">
|
||||||
|
<a href="/blog/categories/<?php echo strtolower(str_replace(' ', '-', $current_category)); ?>.php" class="btn">More <?php echo htmlspecialchars($current_category); ?> Articles</a>
|
||||||
|
<a href="/blog/" class="btn btn-secondary">All Blog Articles</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
54
includes/footer.php
Normal file
54
includes/footer.php
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
<!-- Footer -->
|
||||||
|
<footer class="footer">
|
||||||
|
<div class="container">
|
||||||
|
<div class="footer-content">
|
||||||
|
<div class="footer-section">
|
||||||
|
<div class="footer-logo">
|
||||||
|
<img src="/assets/images/logo-white.svg" alt="UK Data Services" loading="lazy">
|
||||||
|
</div>
|
||||||
|
<p>Enterprise data intelligence solutions for modern British business. Transform your operations with accurate, actionable insights and regulatory-compliant data services.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer-section">
|
||||||
|
<h3>Enterprise Services</h3>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/#services">Web Intelligence & Monitoring</a></li>
|
||||||
|
<li><a href="/#services">Technology Platform Solutions</a></li>
|
||||||
|
<li><a href="/#services">Data Management Services</a></li>
|
||||||
|
<li><a href="/#services">Process Automation & APIs</a></li>
|
||||||
|
<li><a href="/#services">Custom Development</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer-section">
|
||||||
|
<h3>Resources & Insights</h3>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/blog/">Data Intelligence Blog</a></li>
|
||||||
|
<li><a href="/case-studies/">Case Studies</a></li>
|
||||||
|
<li><a href="/about">About UK Data Services</a></li>
|
||||||
|
<li><a href="/project-types">Project Types</a></li>
|
||||||
|
<li><a href="/faq">FAQ</a></li>
|
||||||
|
<li><a href="/quote">Request Consultation</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer-section">
|
||||||
|
<h3>Legal</h3>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/privacy-policy">Privacy Policy</a></li>
|
||||||
|
<li><a href="/terms-of-service">Terms of Service</a></li>
|
||||||
|
<li><a href="/cookie-policy">Cookie Policy</a></li>
|
||||||
|
<li><a href="/gdpr-compliance">GDPR Compliance</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© <?php echo date('Y'); ?> UK Data Services. All rights reserved.</p>
|
||||||
|
<div class="social-links">
|
||||||
|
<a href="#" aria-label="LinkedIn"><img src="/assets/images/icon-linkedin.svg" alt="LinkedIn" loading="lazy"></a>
|
||||||
|
<a href="#" aria-label="Twitter"><img src="/assets/images/icon-twitter.svg" alt="Twitter" loading="lazy"></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
27
includes/header.php
Normal file
27
includes/header.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<!-- Navigation -->
|
||||||
|
<nav class="navbar" id="navbar">
|
||||||
|
<div class="nav-container">
|
||||||
|
<div class="nav-logo">
|
||||||
|
<a href="/">
|
||||||
|
<picture>
|
||||||
|
<source srcset="/assets/images/ukds-main-logo.webp" type="image/webp">
|
||||||
|
<img src="/assets/images/ukds-main-logo.png" alt="UK Data Services" class="logo">
|
||||||
|
</picture>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="nav-menu" id="nav-menu">
|
||||||
|
<a href="/" class="nav-link">Home</a>
|
||||||
|
<a href="/#services" class="nav-link">Capabilities</a>
|
||||||
|
<a href="/project-types" class="nav-link">Project Types</a>
|
||||||
|
<a href="/about" class="nav-link">About</a>
|
||||||
|
<a href="/blog/" class="nav-link">Blog</a>
|
||||||
|
<a href="/#contact" class="nav-link">Contact</a>
|
||||||
|
<a href="/quote" class="nav-link cta-button">Request Consultation</a>
|
||||||
|
</div>
|
||||||
|
<div class="nav-toggle" id="nav-toggle">
|
||||||
|
<span class="bar"></span>
|
||||||
|
<span class="bar"></span>
|
||||||
|
<span class="bar"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
Reference in New Issue
Block a user