Атрибуты
Халяль 13 Бренды
Поделиться
Отмечает бренды, чья продукция халяльна, на одном из двух уровней: сертификат — когда орган по сертификации халяль включил бренд в свой открытый реестр, или заявление бренда — когда сам бренд указывает, что его продукция халяльна. Для импортёров и дистрибьюторов на рынках, где статус халяль определяет доступ на полку.
Поиск брендов по местоположению Интерактивная карта с брендами развивающихся рынков. Просматривайте региональные кластеры.
Перемещайте карту клавишами со стрелками, меняйте масштаб клавишами «плюс» и «минус». Нажмите на маркер, чтобы открыть сведения о бренде.
© OpenStreetMap contributors · © CARTO
Интерактивная карта временно недоступна в вашем регионе. Мы работаем над решением, совместимым с Китаем.
Уровень
Очистить
Все бренды Устойчивые С профилем В каталоге Рынок
Очистить
Все рынки Абхазия Аргентина Армения Азербайджан Бахрейн Бангладеш Бразилия Камбоджа Канада Чили Китай Колумбия Кот-д'Ивуар Куба Египет Эфиопия Грузия Гана Индия Индонезия Иран Иордания Казахстан Кения Киргизия Лаос Ливан Малайзия Мексика Монголия Марокко Мозамбик Мьянма Непал Нигерия Северная Корея Пакистан Палестина Перу Филиппины Россия Саудовская Аравия Сенегал Сербия Сингапур Южная Африка Шри-Ланка Тайвань Танзания Таиланд Тунис Турция Объединённые Арабские Эмираты Узбекистан Вьетнам Сектор
Очистить
Все секторы Ремесленная Керамика Ремесленные изделия Товары для детей Бьюти-ретейл Салоны красоты Пиво Бутик-Гостеприимство Декоративная Косметика Кондитерские Изделия Потребительская Электроника Вяленые Мясные Изделия Молочные Продукты Универмаги Сухофрукты и Орехи Электромобили Мода и Аксессуары Ферментированные Молочные Продукты Гибкие Рабочие Пространства Парфюмерия Мебель и Предметы Интерьера Изысканные Продукты Питания Продуктовая и Специализированная Розница Халяльные Продукты Фитотерапия и Традиционная Медицина Мёд и Продукты Пчеловодства Отели и Курорты Ювелирные Изделия и Часы Кухонная Техника Кожаные Изделия Минеральные Воды Натуральная Косметика Натуральные продукты питания Натуральные Добавки Оливковое Масло и Агропродукция Фасованные Напитки Упакованные Снеки Аптеки и Товары для Здоровья Частные Колледжи Частное Образование Готовые продукты питания Профессиональные Услуги Рестораны Уход за кожей Спа-Услуги Специальные Сыры Специи и Приправы Спиртные напитки Спортивные товары Чай и Кофе Традиционные Ткани и Текстиль Туристические Услуги Оздоровительные услуги Вино Сигналы роста задокументированы в отчётах Intelligence Layer от Brandmine.
website: feature.properties.website || '',
tier: feature.properties.arcStatus || 'basic'
}));
this.loading = false;
// Update hero brand count
const heroCount = document.getElementById('hero-brand-count');
if (heroCount) {
const brandWord = this.brands.length === 1 ? 'бренд' : 'Бренды';
heroCount.innerHTML = this.brands.length + ' ' + brandWord;
}
console.log('Loaded ' + this.brands.length + ' brands for ' + taxonomyType + ': ' + termSlug);
} catch (error) {
console.error('Error loading brand data:', error);
this.brands = [];
this.loading = false;
}
// Initialize filters from URL parameters
const params = new URLSearchParams(window.location.search);
if (params.has('search')) this.search = params.get('search');
if (params.has('country')) this.country = params.get('country');
if (params.has('tier')) this.brandTier = params.get('tier');
if (params.has('website')) this.hasWebsite = params.get('website') === 'true';
// Watch for filter changes and update URL (debounced for search)
let searchTimeout;
this.$watch('search', () => {
clearTimeout(searchTimeout);
searchTimeout = setTimeout(() => this.updateURL(), 300);
});
this.$watch('country', () => this.updateURL());
this.$watch('brandTier', () => this.updateURL());
this.$watch('hasWebsite', () => this.updateURL());
},
updateURL() {
const params = new URLSearchParams();
if (this.search) params.set('search', this.search);
if (this.country) params.set('country', this.country);
if (this.brandTier) params.set('tier', this.brandTier);
if (this.hasWebsite) params.set('website', 'true');
const newURL = params.toString()
? window.location.pathname + '?' + params.toString()
: window.location.pathname;
window.history.pushState({}, '', newURL);
},
get activeFilterCount() {
let count = 0;
if (this.search) count++;
if (this.country) count++;
if (this.brandTier) count++;
if (this.hasWebsite) count++;
return count;
},
get filteredBrands() {
return this.brands.filter(brand => {
const matchesSearch = !this.search || brand.name.toLowerCase().includes(this.search.toLowerCase());
const matchesCountry = !this.country || brand.countryCode === this.country;
const matchesTier = !this.brandTier || brand.tier === this.brandTier;
const matchesWebsite = !this.hasWebsite || brand.website;
return matchesSearch && matchesCountry && matchesTier && matchesWebsite;
});
},
get sortedBrands() {
return [...this.filteredBrands].sort((a, b) => {
let aVal, bVal;
if (this.sortBy === 'founded') {
aVal = a.founded || 0;
bVal = b.founded || 0;
} else if (this.sortBy === 'tier') {
const tierOrder = { 'complete': 3, 'partial': 2, 'basic': 1 };
aVal = tierOrder[a.tier] || 0;
bVal = tierOrder[b.tier] || 0;
} else if (this.sortBy === 'country') {
aVal = a.country || '';
bVal = b.country || '';
} else if (this.sortBy === 'city') {
aVal = a.city || '';
bVal = b.city || '';
} else {
aVal = a.name || '';
bVal = b.name || '';
}
if (this.sortDirection === 'asc') {
return aVal > bVal ? 1 : aVal < bVal ? -1 : 0;
} else {
return aVal < bVal ? 1 : aVal > bVal ? -1 : 0;
}
});
},
get visibleCount() {
return this.filteredBrands.length;
},
get uniqueCountries() {
return [...new Set(this.brands.map(b => b.countryCode).filter(c => c))].sort();
},
getCountryName(code) {
const countryNames = {
'ru': 'Россия',
'cn': 'Китай',
'mn': 'Монголия',
'et': 'Эфиопия',
'in': 'Индия'
};
return countryNames[code] || code.toUpperCase();
},
clearAllFilters() {
this.search = '';
this.country = '';
this.brandTier = '';
this.hasWebsite = false;
},
removeFilter(filterName) {
if (filterName === 'search') this.search = '';
else if (filterName === 'country') this.country = '';
else if (filterName === 'tier') this.brandTier = '';
else if (filterName === 'website') this.hasWebsite = false;
},
sortTable(column) {
if (this.sortBy === column) {
this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';
} else {
this.sortBy = column;
this.sortDirection = (column === 'founded') ? 'desc' : 'asc';
}
},
downloadCSV() {
const headers = ['Brand', 'City', 'Country', 'Founded', 'Website', 'Tier'];
let csv = headers.join(',') + '\n';
this.sortedBrands.forEach(brand => {
const rowData = [
this.escapeCSV(brand.name),
this.escapeCSV(brand.city || '—'),
this.escapeCSV(brand.country || '—'),
this.escapeCSV(brand.founded ? String(brand.founded) : '—'),
this.escapeCSV(brand.website || '—'),
this.escapeCSV(brand.tier)
];
csv += rowData.join(',') + '\n';
});
const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
const link = document.createElement('a');
const url = URL.createObjectURL(blob);
const today = new Date().toISOString().split('T')[0];
let filename = 'halal-directory-' + today;
if (this.activeFilterCount > 0) {
filename += '-filtered';
}
filename += '.csv';
link.setAttribute('href', url);
link.setAttribute('download', filename);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
},
escapeCSV(str) {
if (!str) return '';
const comma = String.fromCharCode(44);
const quote = String.fromCharCode(34);
const newline = String.fromCharCode(10);
if (str.includes(comma) || str.includes(quote) || str.includes(newline)) {
return quote + str.replace(new RegExp(quote, 'g'), quote + quote) + quote;
}
return str;
}
}" class="directory-table-container">
Поиск:
Страна:
Уровень:
С веб-сайтом
Очистить все фильтры
Загрузка...
Страна
Все страны
Уровень бренда
Все бренды Устойчивые С профилем В каталоге
С веб-сайтом
Бренд
Город
Страна
Год
Сайт Уровень
Загрузка... Бренды, соответствующие вашим критериям, не найдены. Перейти
— Устойчивые
С профилем
В каталоге
End of Directory Listing (Hub-only feature)
*/}}