#1 Life Journey
- Snippets 1
- Snippets 1
- Snippets 1
##Run this in your browser console to highlight the overflowing element:
document.querySelectorAll('*').forEach(el => {
if (el.offsetWidth > document.documentElement.offsetWidth) {
console.log('Overflow element:', el);
el.style.outline = '3px solid red';
}
});
// # password hash
// Replace 'admin123' with the password you want for your admin
echo password_hash('admin123', PASSWORD_DEFAULT);
// -------------------------------
// #1 Cart Sidebar controls
// -------------------------------
cartIcon.addEventListener('click', () => cartSidebar.classList.add('active'));
closeCartBtn.addEventListener('click', () => cartSidebar.classList.remove('active'));
// -------------------------------
// #2 Cart Sidebar controls (auto)
// -------------------------------
function openCart() {
if (cartSidebar) cartSidebar.classList.add('active');
}
function closeCart() {
if (cartSidebar) cartSidebar.classList.remove('active');
}
if (cartIcon) cartIcon.addEventListener('click', openCart);
if (closeCartBtn) closeCartBtn.addEventListener('click', closeCart);
//To prevent decreasing below 1 in frontend - cart
if (target.classList.contains('qty-btn') && target.dataset.action === 'decrease') {
const qtyEl = target.nextElementSibling; // the number element
const qty = parseInt(qtyEl.textContent);
if (qty <= 1) return; // do nothing
}
//Create one shared function to return cart JSON:
function cartResponse() {
return json_encode([
'status' => 'success',
'cart_count' => array_sum(array_column($_SESSION['cart'], 'qty')),
'cart_html' => renderCart($_SESSION['cart'])
]);
}
//Then use:
echo cartResponse();
exit;
$cart = $_SESSION['cart'] ?? [];
$cartCount = array_sum(array_column($cart, 'qty'));
echo json_encode([
'status' => 'success',
'cart_count'=> $cartCount,
'cart_html' => renderCart($cart)
]);
exit;
//Your AJAX PHP files (add, update, remove) should return:
function updateCartUI(data) {
// Sidebar items
const sidebarItems = document.getElementById('cart-items');
if (sidebarItems && data.cart_html) {
sidebarItems.innerHTML = data.cart_html;
}
// Cart page table
const cartTableBody = document.getElementById('cart-page-body');
if (cartTableBody && data.cart_table_html) {
cartTableBody.innerHTML = data.cart_table_html;
}
// Cart count
const countEl = document.getElementById('cart-count');
if (countEl && data.cart_count !== undefined) {
countEl.textContent = data.cart_count;
}
}
echo json_encode([
'status' => 'success',
'cart_count' => $cartCount,
'cart_html' => renderCartSidebar($cart),
'cart_table_html' => renderCartTable($cart)
]);
//app/helpers/cart_helper.php
function cartInit(): array {
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = [];
}
return $_SESSION['cart'];
}
function cartTotalQty(array $cart): int {
return array_sum(array_column($cart, 'qty'));
}
function cartTotalAmount(array $cart): float {
$total = 0;
foreach ($cart as $item) {
$total += $item['price'] * $item['qty'];
}
return $total;
}
//update-cart.php
require_once '../app/helpers/cart_helper.php';
require_once '../app/helpers/cart_sidebar_helper.php';
require_once '../app/helpers/cart_page_helper.php';
$cart = cartInit();
echo json_encode([
'status' => 'success',
'cart_count' => cartTotalQty($cart),
'sidebar_html' => renderCartSidebar($cart),
'cart_page_html' => renderCartPage($cart)
]);
exit;
// IP Detect Function (PRO)
function getUserIp() {
if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
return $_SERVER['HTTP_CF_CONNECTING_IP']; // Cloudflare
}
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return trim(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0]);
}
return $_SERVER['REMOTE_ADDR'];
}
// তোমার IP (যেটা admin/extra menu দেখতে পারবে)
$myIp = '103.85.193.247';
// Current user IP
$userIp = getUserIp();
// True হলে admin menu দেখাবে
$isMe = ($userIp === $myIp);