top of page

Blog Suche

Filter

Status
Search

Number of properties found:

64

Status

Property Address

Bed

12

Bath

Floors

12

1,234

Size

1,234

Status

Property Address

Bed

12

Bath

Floors

12

1,234

Size

1,234

Status

Property Address

Bed

12

Bath

Floors

12

1,234

Size

1,234

import wixBlogFrontend from 'wix-blog-frontend'; import wixWindow from 'wix-window'; $w.onReady(async function () { // IDs deiner Elemente (im Editor anpassen) const categoryDropdownId = '#categoryDropdown'; const authorDropdownId = '#authorDropdown'; const yearDropdownId = '#yearDropdown'; // NEU const tagsDropdownId = '#tagsDropdown'; // NEU const blogPostsContainerId = '#blogPostsRepeater'; const selectedFiltersDisplayId = '#selectedFiltersDisplay'; // NEU const searchResultsCountId = '#searchResultsCount'; // NEU let allBlogPosts = []; // Funktion zum Anzeigen der ausgewählten Filter function displaySelectedFilters(selectedCategory, selectedAuthorName, selectedYear, selectedTag) { let filtersText = "Aktive Filter: "; const filters = []; if (selectedCategory) filters.push(`Kategorie: ${selectedCategory}`); if (selectedAuthorName) filters.push(`Autor: ${selectedAuthorName}`); if (selectedYear) filters.push(`Jahr: ${selectedYear}`); if (selectedTag) filters.push(`Tag: ${selectedTag}`); if (filters.length > 0) { filtersText += filters.join(', '); } else { filtersText = "Keine Filter aktiv"; } $w(selectedFiltersDisplayId).text = filtersText; } // Funktion zum Anzeigen der Anzahl der Suchtreffer function displaySearchResultsCount(count) { $w(searchResultsCountId).text = `${count} Blogbeiträge gefunden`; } async function displayBlogPosts(filteredPosts = allBlogPosts) { $w(blogPostsContainerId).data = filteredPosts.map(post => { return { _id: post.id, title: post.title, excerpt: post.excerpt, coverImage: post.coverImage.url, postUrl: post.postPageUrl, authorName: post.author.nickname, categoryNames: post.categories.map(cat => cat.name).join(', '), tags: post.tags.join(', ') // Für Anzeige der Tags // Füge hier weitere Felder hinzu, die du im Repeater/Gallery anzeigen möchtest }; }); displaySearchResultsCount(filteredPosts.length); // Anzeige der Anzahl } async function fetchBlogPosts() { try { const result = await wixBlogFrontend.queryPosts().find(); allBlogPosts = result.items; displayBlogPosts(); populateFilters(); } catch (error) { console.error("Fehler beim Abrufen der Blogbeiträge:", error); wixWindow.alert("Es gab einen Fehler beim Laden der Blogbeiträge."); } } async function populateFilters() { // Kategorien try { const categoryResults = await wixBlogFrontend.queryCategories().find(); const categories = categoryResults.items.map(cat => ({ label: cat.name, value: cat.name })); $w(categoryDropdownId).options = [{ label: 'Alle Kategorien', value: '' }, ...categories]; } catch (error) { console.error("Fehler beim Abrufen der Kategorien:", error); } // Autoren try { const authorResults = await wixBlogFrontend.queryAuthors().find(); const authors = authorResults.items.map(author => ({ label: author.nickname, value: author.id })); $w(authorDropdownId).options = [{ label: 'Alle Autoren', value: '' }, ...authors]; } catch (error) { console.error("Fehler beim Abrufen der Autoren:", error); } // Jahre (aus den Blogbeiträgen extrahieren) const years = [...new Set(allBlogPosts.map(post => new Date(post.publishedAt).getFullYear()))].sort((a, b) => b - a); // Absteigend sortieren const yearOptions = years.map(year => ({ label: year.toString(), value: year.toString() })); $w(yearDropdownId).options = [{ label: 'Alle Jahre', value: '' }, ...yearOptions]; // Tags (aus den Blogbeiträgen extrahieren) const allTags = allBlogPosts.reduce((tags, post) => tags.concat(post.tags), []); const uniqueTags = [...new Set(allTags)].sort(); const tagOptions = uniqueTags.map(tag => ({ label: tag, value: tag })); $w(tagsDropdownId).options = [{ label: 'Alle Tags', value: '' }, ...tagOptions]; } function filterBlogPosts() { const selectedCategory = $w(categoryDropdownId).value; const selectedAuthorId = $w(authorDropdownId).value; const selectedYear = $w(yearDropdownId).value; const selectedTag = $w(tagsDropdownId).value; const selectedAuthorName = $w(authorDropdownId).options.find(option => option.value === selectedAuthorId)?.label; const filteredPosts = allBlogPosts.filter(post => { const categoryMatch = !selectedCategory || post.categories.some(cat => cat.name === selectedCategory); const authorMatch = !selectedAuthorId || post.author.id === selectedAuthorId; const yearMatch = !selectedYear || new Date(post.publishedAt).getFullYear().toString() === selectedYear; const tagMatch = !selectedTag || post.tags.includes(selectedTag); return categoryMatch && authorMatch && yearMatch && tagMatch; }); displayBlogPosts(filteredPosts); displaySelectedFilters(selectedCategory, selectedAuthorName, selectedYear, selectedTag); // Anzeige der Filter } $w(categoryDropdownId).onChange(() => filterBlogPosts()); $w(authorDropdownId).onChange(() => filterBlogPosts()); $w(yearDropdownId).onChange(() => filterBlogPosts()); $w(tagsDropdownId).onChange(() => filterBlogPosts()); fetchBlogPosts(); });

import { local } from 'wix-storage'; // Optional, für das Speichern von Filterpräferenzen import { utils } from 'wix-code'; // Optional, für Hilfsfunktionen $w.onReady(async function () { // IDs deiner Filterelemente (im Editor anpassen) const categoryDropdownId = '#categoryDropdown'; const authorDropdownId = '#authorDropdown'; const yearDropdownId = '#yearDropdown'; const tagsDropdownId = '#tagsDropdown'; // ID deines Blogbeiträge-Datasets const blogPostsDatasetId = '#blogPostsDataset'; // IDs für Anzeige der Filter und Suchtreffer const selectedFiltersDisplayId = '#selectedFiltersDisplay'; const searchResultsCountId = '#searchResultsCount'; // Funktion zum Anzeigen der ausgewählten Filter (unverändert) function displaySelectedFilters(selectedCategory, selectedAuthorName, selectedYear, selectedTag) { let filtersText = "Aktive Filter: "; const filters = []; if (selectedCategory) filters.push(`Kategorie: ${selectedCategory}`); if (selectedAuthorName) filters.push(`Autor: ${selectedAuthorName}`); if (selectedYear) filters.push(`Jahr: ${selectedYear}`); if (selectedTag) filters.push(`Tag: ${selectedTag}`); if (filters.length > 0) { filtersText += filters.join(', '); } else { filtersText = "Keine Filter aktiv"; } $w(selectedFiltersDisplayId).text = filtersText; } // Funktion zum Anzeigen der Anzahl der Suchtreffer function displaySearchResultsCount(count) { $w(searchResultsCountId).text = `${count} Blogbeiträge gefunden`; } // Funktion zum Anwenden der Filter auf das Dataset function applyFilters() { const selectedCategory = $w(categoryDropdownId).value; const selectedAuthorId = $w(authorDropdownId).value; const selectedYear = $w(yearDropdownId).value; const selectedTag = $w(tagsDropdownId).value; let filter = wixData.filter(); if (selectedCategory) { filter = filter.hasSome('categories', selectedCategory); // Annahme: 'categories' ist ein Feld mit Kategorie-Referenzen } if (selectedAuthorId) { filter = filter.eq('author._id', selectedAuthorId); // Annahme: 'author' ist ein Referenzfeld zum Autor } if (selectedYear) { filter = filter.between(new Date(`${selectedYear}-01-01T00:00:00Z`), new Date(`${selectedYear}-12-31T23:59:59Z`)); // Annahme: 'publishedDate' Feld } if (selectedTag) { filter = filter.hasSome('tags', selectedTag); // Annahme: 'tags' ist ein Feld mit Tags } $w(blogPostsDatasetId).setFilter(filter) .then(() => { displaySearchResultsCount($w(blogPostsDatasetId).getTotalCount()); }) .catch((err) => { console.error("Fehler beim Anwenden des Filters:", err); }); // Anzeige der aktiven Filter const selectedAuthorName = $w(authorDropdownId).options.find(option => option.value === selectedAuthorId)?.label; displaySelectedFilters(selectedCategory, selectedAuthorName, selectedYear, selectedTag); } // Funktion zum Befüllen der Filter-Dropdowns (basierend auf den Daten im Dataset) async function populateFilters() { const allPosts = await $w(blogPostsDatasetId).getCurrentItem(); // Not ideal, needs revision // Kategorien const uniqueCategories = [...new Set(allPosts.categories.map(cat => cat.name))].sort(); const categoryOptions = uniqueCategories.map(cat => ({ label: cat, value: cat })); $w(categoryDropdownId).options = [{ label: 'Alle Kategorien', value: '' }, ...categoryOptions]; // Autoren const uniqueAuthors = [...new Set(allPosts.author.map(author => ({ id: author._id, name: author.nickname })))].sort((a, b) => a.name.localeCompare(b.name)); const authorOptions = uniqueAuthors.map(author => ({ label: author.name, value: author.id })); $w(authorDropdownId).options = [{ label: 'Alle Autoren', value: '' }, ...authorOptions]; // Jahre const uniqueYears = [...new Set(allPosts.publishedDate.map(date => new Date(date).getFullYear()))].sort((a, b) => b - a); const yearOptions = uniqueYears.map(year => ({ label: year.toString(), value: year.toString() })); $w(yearDropdownId).options = [{ label: 'Alle Jahre', value: '' }, ...yearOptions]; // Tags const allTags = allPosts.reduce((tags, post) => tags.concat(post.tags), []); const uniqueTags = [...new Set(allTags)].sort(); const tagOptions = uniqueTags.map(tag => ({ label: tag, value: tag })); $w(tagsDropdownId).options = [{ label: 'Alle Tags', value: '' }, ...tagOptions]; } // Event-Handler für die Filter-Dropdowns $w(categoryDropdownId).onChange(() => applyFilters()); $w(authorDropdownId).onChange(() => applyFilters()); $w(yearDropdownId).onChange(() => applyFilters()); $w(tagsDropdownId).onChange(() => applyFilters()); // Initiales Laden der Filteroptionen $w(blogPostsDatasetId).onReady(() => { populateFilters(); displaySearchResultsCount($w(blogPostsDatasetId).getTotalCount()); }); });

bottom of page