Sms Rehber eklemesi,Mobil uyumluluk ayarları,iletişim sayfası düzenlemeler vb.

This commit is contained in:
2026-01-30 00:09:16 +03:00
parent 5fdb7592e7
commit d320787df6
20 changed files with 800 additions and 101 deletions

View File

@@ -0,0 +1,105 @@
import { createClient } from "@/lib/supabase-server"
import { getSiteContents } from "@/lib/data"
import { notFound } from "next/navigation"
import Image from "next/image"
import Link from "next/link"
import { Button } from "@/components/ui/button"
import { Badge } from "@/components/ui/badge"
import { Phone } from "lucide-react"
import { ProductGallery } from "@/components/product/product-gallery"
async function getProduct(id: string) {
const supabase = createClient()
// Fetch product
const { data: product, error } = await supabase
.from("products")
.select("*")
.eq("id", id)
.eq("is_active", true)
.single()
if (error || !product) {
return null
}
// Fetch images
const { data: images } = await supabase
.from("product_images")
.select("*")
.eq("product_id", id)
.order("display_order", { ascending: true })
return { ...product, images: images || [] }
}
export default async function ProductPage({ params }: { params: { id: string } }) {
const product = await getProduct(params.id)
const siteSettings = await getSiteContents()
const whatsappPhone = siteSettings.contact_phone ? siteSettings.contact_phone.replace(/\s+/g, '') : "905555555555"
if (!product) {
notFound()
}
// Combine main image and gallery images for a full list, filtering duplicates if necessary
// Logic: If gallery images exist, use them. If not, fallback to product.image_url.
// If product.image_url is in product_images, we might duplicate, but let's just use all distinct.
let allImages: string[] = []
if (product.images && product.images.length > 0) {
allImages = product.images.map((img: { image_url: string }) => img.image_url)
} else if (product.image_url) {
allImages = [product.image_url]
}
return (
<div className="container py-12 md:py-24">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12">
{/* Image Gallery Section */}
<ProductGallery images={allImages} productName={product.name} />
{/* Product Info Section */}
<div className="space-y-8">
<div>
<div className="flex items-center gap-4 mb-2">
<Badge variant="secondary" className="text-sm uppercase tracking-wider">
{product.category}
</Badge>
{product.product_code && (
<span className="text-sm font-semibold text-slate-500">
Kod: {product.product_code}
</span>
)}
</div>
<h1 className="text-4xl font-bold tracking-tight text-primary font-outfit mb-4">
{product.name}
</h1>
{/* NO PRICE DISPLAY as requested */}
</div>
<div className="prose prose-slate dark:prose-invert max-w-none">
<h3 className="text-lg font-semibold mb-2">Ürün ıklaması</h3>
<p className="text-slate-600 dark:text-slate-300 leading-relaxed whitespace-pre-line">
{product.description || "Bu ürün için henüz detaylııklama eklenmemiştir."}
</p>
</div>
<div className="pt-6 border-t">
<div className="flex flex-col sm:flex-row gap-4">
<Button size="lg" className="w-full sm:w-auto" asChild>
<Link href={`https://wa.me/${whatsappPhone}?text=Merhaba, ${product.name} (Kod: ${product.product_code || "Yok"}) hakkında bilgi almak istiyorum.`} target="_blank">
<Phone className="mr-2 h-5 w-5" />
WhatsApp ile Fiyat Sor
</Link>
</Button>
</div>
<p className="mt-4 text-sm text-slate-500">
* Bu ürün hakkında detaylı bilgi ve fiyat teklifi almak için bizimle iletişime geçebilirsiniz.
</p>
</div>
</div>
</div>
</div>
)
}

View File

@@ -2,6 +2,7 @@
import { createClient } from "@/lib/supabase-server"
import { Card, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"
import { Button } from "@/components/ui/button"
import Link from "next/link"
import Image from "next/image"
@@ -57,14 +58,20 @@ export default async function ProductsPage() {
<div className="w-full">
<div className="flex justify-between items-center w-full">
<span className="text-xs font-medium text-slate-500 uppercase tracking-wider">{product.category}</span>
<span className="font-bold text-lg text-primary">{product.price}</span>
{product.product_code && (
<span className="text-xs font-semibold text-slate-400">#{product.product_code}</span>
)}
</div>
<CardTitle className="text-lg mt-1">{product.name}</CardTitle>
</div>
</div>
</CardHeader>
<CardFooter className="p-4 pt-0">
<Button className="w-full" variant="outline">Detayları İncele</Button>
<Button className="w-full" variant="outline" asChild>
<Link href={`/products/${product.id}`}>
Detayları İncele
</Link>
</Button>
</CardFooter>
</Card>
))