MediaWiki:Filters.js
Перейти к навигации
Перейти к поиску
Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.
- Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
- Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
- Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
- Opera: Нажмите Ctrl+F5.
document.getElementById('filter-form').addEventListener('submit', function(event) {
event.preventDefault(); // Предотвращаем перезагрузку страницы
// Получаем значения из формы
const городElement = document.getElementById('город');
const районElement = document.getElementById('район');
const типПомещенияElement = document.getElementById('тип-помещения');
const улицаElement = document.getElementById('улица');
const номерДомаElement = document.getElementById('номер-дома');
const ценаОтElement = document.getElementById('цена-от');
const ценаДоElement = document.getElementById('цена-до');
const площадьОтElement = document.getElementById('площадь-от');
const площадьДоElement = document.getElementById('площадь-до');
const город = городElement ? городElement.value : '';
const район = районElement ? районElement.value : '';
const типПомещения = типПомещенияElement ? типПомещенияElement.value : '';
const улица = улицаElement ? улицаElement.value : '';
const номерДома = номерДомаElement ? номерДомаElement.value : '';
const ценаОт = ценаОтElement ? ценаОтElement.value : '';
const ценаДо = ценаДоElement ? ценаДоElement.value : '';
const площадьОт = площадьОтElement ? площадьОтElement.value : '';
const площадьДо = площадьДоElement ? площадьДоElement.value : '';
// Формируем запрос к API Semantic MediaWiki
let query = `[[Категория:Коммерческая недвижимость]]`;
if (город) query += `[[город::${город}]]`;
if (район) query += `[[район::${район}]]`;
if (типПомещения) query += `[[тип помещения::${типПомещения}]]`;
if (улица) query += `[[Улица::${улица}]]`;
if (номерДома) query += `[[Номер дома::${номерДома}]]`;
// Добавляем фильтрацию по цене
if (ценаОт) query += `[[Цена::>${ценаОт}]]`;
if (ценаДо) query += `[[Цена::<${ценаДо}]]`;
// Добавляем фильтрацию по площади
if (площадьОт) query += `[[Площадь::>${площадьОт}]]`;
if (площадьДо) query += `[[Площадь::<${площадьДо}]]`;
// Указываем свойства для извлечения
query += '|?Город|?Район|?Тип помещения|?Улица|?Номер дома|?Этаж|?Площадь|?Цена';
// Устанавливаем высокий лимит для количества возвращаемых результатов
const apiUrl = `/api.php?action=ask&query=${encodeURIComponent(query)}&format=json&limit=5000`;
console.log('Сформированный запрос:', query);
// Выполняем запрос к API
fetch(apiUrl)
.then(response => response.json())
.then(data => {
console.log('Ответ API:', data);
if (!data.query || !data.query.results) {
console.error('Нет данных results в ответе API');
document.getElementById('results').innerHTML = '<p>Нет данных.</p>';
return;
}
const results = data.query.results;
let html = '<table class="wikitable">';
html += '<tr><th>ID</th><th>Город</th><th>Район</th><th>Тип помещения</th><th>Адрес</th><th>Этаж</th><th>Площадь</th><th>Цена</th></tr>';
// Перебираем найденные страницы
for (const page in results) {
if (results.hasOwnProperty(page)) {
const properties = results[page].printouts;
console.log(`Свойства страницы ${page}:`, properties);
// Извлекаем значения свойств
const город = properties.Город && properties.Город[0] ? (properties.Город[0].fulltext || properties.Город[0]) : 'Нет данных';
const район = properties.Район && properties.Район[0] ? (properties.Район[0].fulltext || properties.Район[0]) : 'Нет данных';
const типПомещения = properties['Тип помещения'] && properties['Тип помещения'][0] ? (properties['Тип помещения'][0].fulltext || properties['Тип помещения'][0]) : 'Нет данных';
const улица = properties.Улица ? properties.Улица.join(', ') : 'Нет данных';
const номерДома = properties['Номер дома'] ? properties['Номер дома'].join(', ') : 'Нет данных';
const этаж = properties.Этаж ? properties.Этаж.join(', ') : 'Нет данных';
// Обработка свойства "Площадь"
let площадь = 'Нет данных';
if (properties.Площадь && properties.Площадь.length > 0) {
const obj = properties.Площадь[0];
if (obj && typeof obj === 'object') {
площадь = obj.fulltext || (obj.value + (obj.unit ? ' ' + obj.unit : '')) || JSON.stringify(obj);
} else {
площадь = properties.Площадь.join(', ');
}
}
// Обработка свойства "Цена"
let цена = 'Нет данных';
if (properties.Цена && properties.Цена.length > 0) {
const obj = properties.Цена[0];
if (obj && typeof obj === 'object') {
цена = obj.fulltext || obj.value; // Извлекаем значение без добавления 'руб.'
} else {
цена = properties.Цена.join(', ');
}
}
// Формируем адрес
const адрес = (улица !== 'Нет данных' && номерДома !== 'Нет данных') ?
`${улица} ${номерДома}` : 'Нет данных';
// Заменяем пробелы на подчеркивания
const адресДляСсылки = адрес.replace(/\s/g, '_');
// Добавляем строку в таблицу, делая ID и адрес кликабельными
html += `<tr>
<td><a href="${encodeURIComponent(page)}" target="_blank">${page}</a></td>
<td>${город}</td>
<td>${район}</td>
<td>${типПомещения}</td>
<td><a href="${encodeURIComponent(адресДляСсылки)}" target="_blank">${адрес}</a></td>
<td>${этаж}</td>
<td>${площадь}</td>
<td>${цена} руб.</td>
</tr>`;
}
}
html += '</table>';
document.getElementById('results').innerHTML = html;
})
.catch(error => {
console.error('Ошибка при загрузке данных:', error);
document.getElementById('results').innerHTML = '<p>Ошибка при загрузке данных.</p>';
});
});