File manager - Edit - /home/webapp69.cm.in.th/u69319090028/Shop/views/seller/reviews/index.php
Back
<!-- Header --> <div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3 mb-4"> <div> <h4 class="fw-bold text-dark mb-1"> <i class="bi bi-star-fill text-warning me-2"></i>รีวิวสินค้าจากลูกค้า (Customer Reviews) </h4> <p class="text-muted small mb-0">ตรวจสอบความคิดเห็น คะแนนความพึงพอใจ และคำติชมจากผู้ซื้อจริงเพื่อพัฒนาคุณภาพสินค้าและบริการ</p> </div> </div> <!-- 1. Store Rating KPI & Breakdown Cards --> <div class="row g-3 mb-4"> <!-- Overall Rating Box --> <div class="col-lg-4 col-md-5"> <div class="cargoo-card p-4 h-100 text-center d-flex flex-column justify-content-center"> <h6 class="text-muted small fw-bold text-uppercase mb-2">คะแนนเฉลี่ยร้านค้า</h6> <div class="display-4 fw-bold text-primary mb-2"> <?= number_format((float)($summary['avg_rating'] ?? 0), 1) ?> <span class="fs-5 text-muted fw-normal">/ 5.0</span> </div> <div class="d-flex justify-content-center gap-1 mb-2"> <?php $avgScore = round((float)($summary['avg_rating'] ?? 0)); for ($i = 1; $i <= 5; $i++): ?> <i class="bi <?= $i <= $avgScore ? 'bi-star-fill text-warning fs-5' : 'bi-star text-secondary fs-5' ?>"></i> <?php endfor; ?> </div> <p class="text-muted small mb-0">จากทั้งหมด <strong><?= number_format((int)($summary['total_reviews'] ?? 0)) ?></strong> รีวิว</p> </div> </div> <!-- Star Breakdown Progress Bars --> <div class="col-lg-8 col-md-7"> <div class="cargoo-card p-4 h-100"> <h6 class="fw-bold text-dark mb-3 small"><i class="bi bi-bar-chart-fill text-primary me-2"></i>สัดส่วนคะแนนดาว</h6> <?php $totalRev = max(1, (int)($summary['total_reviews'] ?? 0)); for ($s = 5; $s >= 1; $s--): $starCount = (int)($summary['star_' . $s] ?? 0); $pct = round(($starCount / $totalRev) * 100); ?> <div class="d-flex align-items-center gap-3 mb-2 small"> <div style="width: 55px;" class="fw-semibold text-dark text-nowrap"> <?= $s ?> ดาว <i class="bi bi-star-fill text-warning" style="font-size: 0.75rem;"></i> </div> <div class="progress flex-grow-1" style="height: 8px;"> <div class="progress-bar bg-warning" role="progressbar" style="width: <?= $pct ?>%;" aria-valuenow="<?= $pct ?>" aria-valuemin="0" aria-valuemax="100"></div> </div> <div style="width: 70px;" class="text-end text-muted"> <?= number_format($starCount) ?> (<?= $pct ?>%) </div> </div> <?php endfor; ?> </div> </div> </div> <!-- 2. Filter Bar --> <div class="cargoo-card p-3 mb-4"> <form action="<?= url('/seller/reviews') ?>" method="GET" class="row g-2 align-items-end"> <div class="col-md-4"> <label class="form-label small fw-bold text-muted mb-1">ค้นหาข้อความ / สินค้า</label> <input type="text" name="q" class="form-control form-control-sm" placeholder="พิมพ์ชื่อสินค้าหรือข้อความรีวิว..." value="<?= e($filters['q'] ?? '') ?>"> </div> <div class="col-md-3"> <label class="form-label small fw-bold text-muted mb-1">กรองตามคะแนน</label> <select name="rating" class="form-select form-select-sm"> <option value="0">คะแนนดาวทั้งหมด</option> <option value="5" <?= ($filters['rating'] ?? 0) === 5 ? 'selected' : '' ?>>5 ดาว (ยอดเยี่ยม)</option> <option value="4" <?= ($filters['rating'] ?? 0) === 4 ? 'selected' : '' ?>>4 ดาว (ดี)</option> <option value="3" <?= ($filters['rating'] ?? 0) === 3 ? 'selected' : '' ?>>3 ดาว (ปานกลาง)</option> <option value="2" <?= ($filters['rating'] ?? 0) === 2 ? 'selected' : '' ?>>2 ดาว (พอใช้)</option> <option value="1" <?= ($filters['rating'] ?? 0) === 1 ? 'selected' : '' ?>>1 ดาว (ควรปรับปรุง)</option> </select> </div> <div class="col-md-3"> <label class="form-label small fw-bold text-muted mb-1">เลือกสินค้า</label> <select name="product_id" class="form-select form-select-sm"> <option value="0">สินค้าทั้งหมดของร้าน</option> <?php if (!empty($products)): ?> <?php foreach ($products as $p): ?> <option value="<?= (int)$p['id'] ?>" <?= ($filters['product_id'] ?? 0) === (int)$p['id'] ? 'selected' : '' ?>> <?= e($p['name']) ?> </option> <?php endforeach; ?> <?php endif; ?> </select> </div> <div class="col-md-2 d-flex gap-2"> <button type="submit" class="btn btn-cargoo-primary btn-sm flex-grow-1"> <i class="bi bi-funnel me-1"></i> กรอง </button> <a href="<?= url('/seller/reviews') ?>" class="btn btn-outline-secondary btn-sm" title="ล้างตัวกรอง"> <i class="bi bi-arrow-clockwise"></i> </a> </div> </form> </div> <!-- 3. Reviews List --> <div class="cargoo-card overflow-hidden"> <div class="cargoo-card-header bg-white py-3 d-flex justify-content-between align-items-center"> <span class="fw-bold text-dark small"> <i class="bi bi-chat-left-text me-1 text-primary"></i> รายการรีวิวทั้งหมด (<?= number_format($totalCount) ?> รายการ) </span> </div> <div class="p-4"> <?php if (empty($reviews)): ?> <div class="text-center py-5"> <i class="bi bi-chat-square-dots text-muted" style="font-size: 3rem;"></i> <h6 class="mt-3 fw-bold text-dark">ยังไม่มีรีวิวตามเงื่อนไขที่เลือก</h6> <p class="text-muted small mb-0">ลองปรับเปลี่ยนตัวกรองค้นหาเพื่อดูข้อมูลรีวิวอื่น</p> </div> <?php else: ?> <div class="d-flex flex-column gap-4"> <?php foreach ($reviews as $rev): ?> <div class="p-3 border rounded-3 bg-light bg-opacity-50"> <!-- Review Item Header --> <div class="d-flex flex-column flex-sm-row justify-content-between align-items-sm-start pb-3 mb-3 border-bottom gap-2"> <div class="d-flex align-items-center gap-3"> <div class="rounded-circle bg-primary-subtle text-primary d-flex align-items-center justify-content-center fw-bold flex-shrink-0" style="width: 44px; height: 44px;"> <i class="bi bi-person-fill fs-5"></i> </div> <div> <div class="fw-bold text-dark small"> <?= e($rev['display_name']) ?> <?php if (!empty($rev['is_anonymous'])): ?> <span class="badge bg-secondary-subtle text-secondary border small ms-1" style="font-size: 0.65rem;"> <i class="bi bi-incognito"></i> ไม่ระบุชื่อ </span> <?php endif; ?> </div> <small class="text-muted">คำสั่งซื้อ: <code>#<?= e($rev['order_no']) ?></code> • วันที่: <?= date('d/m/Y H:i', strtotime($rev['created_at'])) ?></small> </div> </div> <!-- Star Rating Score --> <div class="text-sm-end"> <div class="d-flex align-items-center gap-1"> <?php for ($i = 1; $i <= 5; $i++): ?> <i class="bi <?= $i <= (int)$rev['rating'] ? 'bi-star-fill text-warning' : 'bi-star text-secondary' ?> small"></i> <?php endfor; ?> <span class="ms-1 fw-bold small text-dark"><?= (int)$rev['rating'] ?>.0</span> </div> </div> </div> <!-- Product Context --> <div class="d-flex align-items-center gap-2 mb-2 p-2 bg-white rounded border small"> <div class="rounded-1 overflow-hidden border bg-light flex-shrink-0" style="width: 36px; height: 36px;"> <?php if (!empty($rev['product_main_image'])): ?> <img src="<?= asset('/' . ltrim($rev['product_main_image'], '/')) ?>" alt="Product" class="w-100 h-100 object-fit-contain"> <?php else: ?> <i class="bi bi-box-seam text-secondary"></i> <?php endif; ?> </div> <span class="fw-semibold text-dark text-truncate"><?= e($rev['product_name']) ?></span> <?php if (!empty($rev['variation_summary'])): ?> <span class="text-muted">(<?= e($rev['variation_summary']) ?>)</span> <?php endif; ?> </div> <!-- Review Text --> <?php if (!empty($rev['review_text'])): ?> <p class="text-secondary small mb-3" style="white-space: pre-line;"><?= e($rev['review_text']) ?></p> <?php else: ?> <p class="text-muted small fst-italic mb-2">ผู้ซื้อไม่ได้เขียนข้อความรีวิวเพิ่มเติม</p> <?php endif; ?> <!-- Attached Photos --> <?php if (!empty($rev['images'])): ?> <div class="d-flex flex-wrap gap-2 pt-1"> <?php foreach ($rev['images'] as $img): ?> <div class="rounded-2 overflow-hidden border bg-white" style="width: 70px; height: 70px;"> <a href="<?= asset('/' . ltrim($img['image_path'], '/')) ?>" target="_blank"> <img src="<?= asset('/' . ltrim($img['image_path'], '/')) ?>" class="w-100 h-100 object-fit-cover"> </a> </div> <?php endforeach; ?> </div> <?php endif; ?> </div> <?php endforeach; ?> </div> <!-- Pagination --> <?php if ($totalPages > 1): ?> <div class="d-flex justify-content-between align-items-center pt-4 mt-4 border-top"> <small class="text-muted">หน้า <?= $currentPage ?> จาก <?= $totalPages ?> (รวม <?= number_format($totalCount) ?> รีวิว)</small> <ul class="pagination pagination-sm mb-0"> <?php for ($p = 1; $p <= $totalPages; $p++): ?> <?php $queryParams = array_merge($_GET, ['page' => $p]); $pageUrl = url('/seller/reviews') . '?' . http_build_query($queryParams); ?> <li class="page-item <?= $p === $currentPage ? 'active' : '' ?>"> <a class="page-link" href="<?= $pageUrl ?>"><?= $p ?></a> </li> <?php endfor; ?> </ul> </div> <?php endif; ?> <?php endif; ?> </div> </div>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.23 |
proxy
|
phpinfo
|
Settings