fix: similar properties loaded from API and admin password hash

- Replace hardcoded similar properties with dynamic API loading
- Similar properties now use correct slugs for navigation
- Fix admin password hash for authentication (admin123)
- Remove duplicate HTML footer tags from previous fix
This commit is contained in:
TenerifeProp Dev
2026-04-05 21:05:13 +01:00
parent 52397c7008
commit 432e90edf0
2 changed files with 74 additions and 51 deletions

View File

@@ -1228,55 +1228,8 @@
<h2 class="section-title" data-i18n="similar.title" style="font-size: 2rem;">Propiedades Similares</h2>
<p class="text-muted" data-i18n="similar.subtitle">Otras opciones que podrían interesarte</p>
</div>
<div class="row">
<div class="col-lg-4 col-md-6" data-aos="fade-up" data-aos-delay="100">
<div class="similar-card">
<a href="property.html" class="similar-card-image">
<img src="https://images.unsplash.com/photo-1486406146926-c627a92ad1ab?w=600&q=80" alt="Terreno urbano">
<span class="similar-card-badge urban" data-i18n="similar.urban">Urbano</span>
</a>
<div class="similar-card-content">
<a href="property.html" class="similar-card-title" data-i18n="similar.card1.title">Parcela Urbana en Granadilla</a>
<p class="similar-card-location"><i class="bi bi-geo-alt"></i>Granadilla de Abona</p>
<div class="similar-card-footer">
<span class="similar-card-price">210.000 €</span>
<span class="similar-card-area"><i class="bi bi-rulers"></i>1.800 m²</span>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6" data-aos="fade-up" data-aos-delay="200">
<div class="similar-card">
<a href="property.html" class="similar-card-image">
<img src="https://images.unsplash.com/photo-1500382017468-9049fed747ef?w=600&q=80" alt="Terreno agrícola">
<span class="similar-card-badge agricultural" data-i18n="similar.agricultural">Agrícola</span>
</a>
<div class="similar-card-content">
<a href="property.html" class="similar-card-title" data-i18n="similar.card2.title">Terreno Agrícola en Güímar</a>
<p class="similar-card-location"><i class="bi bi-geo-alt"></i>Güímar, Tenerife Sur</p>
<div class="similar-card-footer">
<span class="similar-card-price">125.000 €</span>
<span class="similar-card-area"><i class="bi bi-rulers"></i>8.500 m²</span>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6" data-aos="fade-up" data-aos-delay="300">
<div class="similar-card">
<a href="property.html" class="similar-card-image">
<img src="https://images.unsplash.com/photo-1613490493576-7fde63acd811?w=600&q=80" alt="Villa">
<span class="similar-card-badge house" data-i18n="similar.house">Casa</span>
</a>
<div class="similar-card-content">
<a href="property.html" class="similar-card-title" data-i18n="similar.card3.title">Villa con Vistas al Mar</a>
<p class="similar-card-location"><i class="bi bi-geo-alt"></i>Los Cristianos, Arona</p>
<div class="similar-card-footer">
<span class="similar-card-price">595.000 €</span>
<span class="similar-card-area"><i class="bi bi-rulers"></i>350 m²</span>
</div>
</div>
</div>
</div>
<div class="row" id="similarPropertiesGrid">
<!-- Dynamically loaded -->
</div>
</div>
</section>
@@ -1638,7 +1591,77 @@
const urlParams = new URLSearchParams(window.location.search);
const lang = urlParams.get('lang') || 'es';
switchLanguage(lang);
// Load similar properties
loadSimilarProperties();
});
// ============ SIMILAR PROPERTIES ============
async function loadSimilarProperties() {
const container = $('#similarPropertiesGrid');
const currentSlug = window.location.pathname.split('/').pop() || 'terreno-urbano-adeje';
try {
const response = await fetch('/api/properties?limit=3');
const result = await response.json();
if (!result.success || !result.data) {
container.html('<div class="col-12 text-center text-muted">No hay propiedades disponibles</div>');
return;
}
// Filter out current property and get first 3
const similarProps = result.data
.filter(p => p.slug !== currentSlug)
.slice(0, 3);
const typeLabels = {
urban: { es: 'Urbano', ru: 'Городской', class: 'urban' },
agricultural: { es: 'Agrícola', ru: 'Сельхоз', class: 'agricultural' },
house: { es: 'Casa', ru: 'Дом', class: 'house' },
apartment: { es: 'Apartamento', ru: 'Апартаменты', class: 'apartment' }
};
container.empty();
similarProps.forEach((property, index) => {
const typeInfo = typeLabels[property.type] || typeLabels.urban;
const typeLabel = typeInfo[currentLang];
const images = JSON.parse(property.images || '[]');
const mainImage = images[0] || 'https://images.unsplash.com/photo-1564013799919-ab600027ffc6?w=600&q=80';
const priceFormatted = new Intl.NumberFormat('es-ES').format(property.price);
const areaFormatted = new Intl.NumberFormat('es-ES').format(property.area);
const title = property[`title_${currentLang}`] || property.title_es;
const card = `
<div class="col-lg-4 col-md-6" data-aos="fade-up" data-aos-delay="${(index + 1) * 100}">
<div class="similar-card">
<a href="/property/${property.slug}" class="similar-card-image">
<img src="${mainImage}" alt="${title}">
<span class="similar-card-badge ${typeInfo.class}">${typeLabel}</span>
</a>
<div class="similar-card-content">
<a href="/property/${property.slug}" class="similar-card-title">${title}</a>
<p class="similar-card-location">
<i class="bi bi-geo-alt"></i> ${property.city}
</p>
<div class="similar-card-footer">
<span class="similar-card-price">${priceFormatted} €</span>
<span class="similar-card-area">
<i class="bi bi-rulers"></i> ${areaFormatted}
</span>
</div>
</div>
</div>
</div>
`;
container.append(card);
});
} catch (error) {
console.error('Error loading similar properties:', error);
container.html('<div class="col-12 text-center text-muted">Error al cargar propiedades</div>');
}
}
</script>
</body>
</html>

View File

@@ -479,9 +479,9 @@ function seedData() {
[s.id, s.icon, s.title_es, s.title_ru, s.desc_es, s.desc_ru])
})
// Admin user
// Admin user (password: admin123)
db.run('INSERT INTO users (id, email, password_hash, name, role) VALUES (?, ?, ?, ?, ?)',
['user-001', 'admin@tenerifeprop.com', '$2b$10$dummyHashForDemo', 'Admin', 'admin'])
['user-001', 'admin@tenerifeprop.com', '$2b$10$wlW1hhV6tgq8gKFtnmTBXOO8yNEv3d2UyUvwbnbX84iW3JbB3h07O', 'Admin', 'admin'])
console.log('✅ Database seeded successfully')
}