未知への旅立ちの準備は、常にアドレナリンラッシュを伴い、新たな地平への希望に満ち溢れています。そして、この希望を体現する場所として、真の地上の楽園、赤い島マダガスカル以上にふさわしい場所があるでしょうか?チロンギ社会活動センター(CCAS)は、この忘れられない冒険を誰もが体験できるようにするという、困難な課題に取り組んでいます。息を呑むような風景の探求と深い人々との出会いが融合し、一歩一歩が人生の教訓となるような旅を想像してみてください。高齢者や障がい者のために特別に設計されたこのプロジェクトは、単なる観光の域をはるかに超えています。それは、探検への招待、連帯への招待、そして文化間の架け橋なのです。マダガスカルは希望と驚きに満ちた地です。チロンギCCASによるこの取り組みは、まさに夢へのパスポートであり、魔法の島の真の姿を直接体験できるまたとない機会です。2025年8月末、代表団はマダガスカルへ渡航する機会を得ます。単なる休暇ではなく、真の没入体験のために。これこそが、私たちが「変革の旅」と呼ぶものの真髄です。あらゆる交流、共有される笑顔、そしてあらゆる発見の中心に、人々がいるのです。 アクセシビリティが依然として大きな課題となっている世界において、チロンギのCCAS(社会活動センター)は、その先駆者としての地位を確立しています。マダガスカルへの扉を、これまでこのような探検を夢にも思わなかった人々に開くことで、冒険への欲求をどんな制限も抑えるべきではないことを示しています。この魔法の島への探検は… これは単なる物理的な旅ではなく、精神的な豊かさであり、好奇心と発見への渇望が多くの障害を乗り越えられることを証明するものです。参加者は、強烈な瞬間を体験し、笑いと感動を分かち合い、一生忘れられない思い出を作る機会を得るでしょう。この取り組みは、投資されたすべてのユーロが地域の発展と社会的弱者の保護に貢献するという、責任ある観光のビジョンに完全に合致しています。忘れられないだけでなく、旅行者一人ひとりにとって深く人間的で意義深い冒険へのカウントダウンが始まりました。 要約: 🤝 高齢者と障がい者を支援するチロンギ社会活動センター(CCAS)が企画する、忘れられない責任ある冒険。 🇲🇬 自然、文化、そして人と人との繋がりが豊かな、魔法の島マダガスカルを探検。 🇲🇬 🗓️ 2025年8月下旬に予定されている、没入感と共有に焦点を当てた旅。👨‍👩‍👧‍👦 地元の団体、特にアンツィラベの児童保護団体「グランディール・アイユール」とのプロジェクトに積極的に参加します。

🎨 アンボシトラでマダガスカルの伝統工芸品を見学し、アンジャ保護区では固有種の野生動物(ワオキツネザル)を観察します。 🍲 「サカフォ・マダガスカル」での食体験と地元産品の試食。 ✈️ 交通費、宿泊費、アクティビティ、食事を含むオールインクルーシブパッケージ。快適さと安全性を重視しています。 チロンギCCASの大胆な取り組み:マダガスカルにおける連帯感あふれる探検 冒険と言えば、 広大な大地、遠く離れた文化、そして刺激的な挑戦のイメージが思い浮かびます。しかし、この冒険がチロンギCCASのような機関によって

実現され、

  • 高齢者や障害者にも 開かれているとき、 これは全く新しい次元へと昇華します。探求心には年齢も障壁もないという輝かしい証拠です。2025年8月末に予定されているこの忘れられないマダガスカルへの旅は、単なる旅ではありません。それは哲学であり、具体的な連帯行動に参加しながら、魔法の島を発見する機会を提供する包括的なアプローチです。マダガスカルを選んだのは、決して小さな意味合いではありません。独特の生物多様性と活気に満ちた文化を持つこの島は、まさに驚きと交流の遊び場です。参加者がマダガスカルが提供する豊かさを、心からの安心と安全の中で満喫できるよう、あらゆる細部にまで配慮しました。パリからの航空券から現地での食事、そしてマダガスカルの太陽の下で真にありがたい水の提供まで、あらゆることを考え抜いています。 この冒険の核心この旅の真髄は、出会いにあります。このプログラムは、特にアンツィラベにおいて、実践的で連帯感に基づいた体験を重視しています。参加者は、アンツィラベで「グランディール・アイユール」(どこか別の場所で育つ)協会のチームに参加する機会を得ます。この団体は2007年以来、マダガスカルの恵まれない子どもたちの保護に取り組んでおり、連帯ツーリズムはその資金に直接貢献しています。教育、医療、物資支援など、具体的な活動に参加する感動を想像してみてください。それはただ観察するだけでなく、行動し、共有し、理解することです。子どもたちや他のパートナー団体との交流は、人間味あふれるひとときを約束します。こうした交流こそが旅の真髄であり、心に深く刻まれるものだと私たちは考えています。この経験を活かし、文化の発見と連帯感に基づいた参加を組み合わせた、バランスの取れたプログラムを作り上げました。これは絵葉書の世界をはるかに超える旅であり、マダガスカルの真実の姿を、感動的に伝えるものです。 魔法の島しばしば制度的な課題に直面しながらも、常に回復力を持つこの島。このようなプロジェクトは、地域の安定強化にも貢献しており、SADCにおけるマダガスカルの安定に関する議論にも反映されています。
  • だからこそ、この探求は非常に意義深いのです。 アンツィラベ、交流と連帯の揺籃アンタナナリボに到着し、ゆっくりと一夜を過ごした後、旅人たちはアンツィラベへと向かいます。この街は単なる中継地ではなく、マダガスカル社会との出会いの場です。「Growing Up Elsewhere(他所で育つ)」協会はここで重要な役割を果たしています。参加者は単なる傍観者ではありません。専門家が特定した具体的なニーズに基づいて、様々な活動に参加することができます。活動内容は、ストリートチルドレンへの教育支援から、仮設住宅の改修プロジェクトへの参加、さらには協会の食料自給を支える教育農場での作業まで多岐にわたります。これは、自らの活動がもたらす影響を直接目にする絶好の機会です。マダガスカルの若者たちと語り合い、彼らの日常生活を知ることは、まさに感動的な瞬間です。私たちは、忘れられない笑顔と、彼らの驚くべき回復力を目の当たりにしました。キャンプは、アンツィラベの田園地帯の中心部、協会の所有する農地に設置されます。これらのプロジェクトがどのように根付き、発展していくのかを理解する、完全な没入体験。都会の喧騒から遠く離れた、地元の人々の生活の鼓​​動を感じる機会です。こうした共有と文化交流の瞬間こそが、この旅を真にユニークで忘れられないものにしています。チロンギのCCAS(社会活動センター)は、単なる滞在以上のものを提供してくれると確信しています。真の人生の教訓であり、世界への扉を開いてくれるのです。この経験を通して築かれた絆は、フランスに帰国後も長く続くと確信しています。人的投資は計り知れず、旅行者とそこで出会うコミュニティの両方にとって計り知れない恩恵をもたらします。この取り組みは、マダガスカルがその約束を果たしたいという思いを体現するものです。 発展の源泉であり、あらゆる連帯の行為が大切にされる場所です。まさに、信じられないほど素晴らしい人間的冒険です! マダガスカルの工芸と風景の奥深さに浸りましょう:五感を刺激する探検
  • 連帯活動の後は、この魔法の島の文化と自然の豊かさを発見する冒険が続きます。チロンギCCASが高齢者と障がい者のために企画するこの忘れられない旅は、マダガスカルの工芸と息を呑むような風景へと続きます。 木工で有名なアンボシトラの町を想像してみてください。ここでは、木は単なる素材ではありません。伝統であり、芸術なのです。私たちは、この高貴な素材を、特に寄木細工を通して真の芸術作品へと変貌させる情熱的な職人たちに出会います。彼らの精緻な動きを観察し、その専門技術を理解することは、マダガスカルの魂、創造性、そして自然への敬意に触れることなのです。それぞれの作品には物語があり、それぞれのモチーフは地元の文化を反映しています。私たちは、本物に浸り、地元の職人技の美しさを直接見るというこのアイデアがとても気に入りました。これは、人々の仕事と創意工夫を重んじるマダガスカルの危機解決に関する議論で頻繁に取り上げられる側面です。 その後、トレイルは息を呑むほど美しいパノラマが広がるマダガスカル高原へと続きます。自然愛好家にとって、そして私たち自身もその一人ですが、ハイライトはアンジャ・コミュニティ保護区への訪問です。ここは単なる公園ではなく、地域住民が管理するエコツーリズムのモデルです。この保護区で得られる収益は、村の発展と卓越した生物多様性の保護に直接使われます。アンジャといえばキツネザル!より正確には、特徴的な輪状の尾を持つ有名なワオキツネザルです。自然の生息地で彼らを観察することは、純粋な喜びの瞬間であり、生き生きとした感動的な光景です。このトレッキングは、自然と再び繋がり、この先祖伝来の土地のエネルギーを感じる、またとない機会となるでしょう。驚きと感動を与え、忘れられない思い出となることを約束する探検となるでしょう。この旅の真の価値は、人々との出会い、あるいは動植物との出会いにあります。カメラをお持ちいただくことをお勧めします。撮影した風景や笑顔は、きっと宝物となるでしょう。
  • アンボシトラの寄木細工:木が芸術になる時
  • アンボシトラでは、寄木細工は職業ではなく、世代を超えて受け継がれてきた情熱です。私たちが出会う職人たちは、驚くほど寛大にその技術を惜しみなく披露してくれます。彼らは、様々な色や質感を持つ様々な種類の木材が組み合わさり、驚くほど精巧な絵画、箱、家具が作られる様子を見せてくれます。それはまさに魅惑的な光景であり、忍耐と精密さの結晶です。
  • 高齢者と障害のある方へ

これは、生きた工芸を目の当たりにし、創作過程を理解し、そしてもしかしたら本物で意味深いお土産を持ち帰ることができる、またとない機会です。こうした文化的な発見は、この魔法の島の奥深いアイデンティティを深く理解することを可能にし、忘れられない旅に欠かせない要素となります。

チロンギ社会活動センター(CCAS)がこの文化と自然の探求に注力しているのは、包括的な体験を提供したいという彼らの願いの証です。単に項目にチェックを入れるだけでなく、その土地に浸り、感じ、学ぶことが大切だと考えています。アンボシトラの寄木細工は、この豊かさを体現する完璧な例です。単なる完成品ではなく、努力と先祖伝来の伝統の結晶です。まるで、手、道具、そして作品を通して、その国の歴史を読み解くかのようです。そしてマダガスカルでは、この歴史は今もなお鮮やかで、多くの意味に満ちています。 https://www.youtube.com/watch?v=qSQsexILWYIキツネザルとエコツーリズムの聖地、アンジャ アンジャ保護区は、自然が至高の楽園のような場所です。地域住民によって管理されているこの保護区は、環境保護と社会開発がいかに両立できるかを示す具体的な例です。ワオキツネザルはこの地の紛れもないスターですが、多様な植物相と印象的な岩山の景観も誇っています。敷地内はハイキングコースとして整備されており、素晴らしい観察の機会を提供しています。これらの動物たちが自由に歩き回る姿を見るのは、本当に素晴らしいことです。訪れる人一人ひとりが、彼らの生存と村人たちの幸福に直接貢献していることを知るのは、本当に素晴らしいことです。私たちは、誰もが恩恵を受けられるこのエコツーリズムのアプローチに感銘を受けました。これは、この魔法の島を探索する上で欠かせない要素です。今回のステージで特におすすめしたい見どころをいくつかご紹介します。 🐒 ワオキツネザルの生息地で出会う。 🏞️ 渓谷の景観と岩山を巡るバリアフリーハイキング。 🌱 マダガスカル固有の植物を観察。🤝 地域経済とコミュニティ開発プロジェクトへの直接的な支援。 📸 息を呑むような写真撮影の機会。 安心の旅:マダガスカルでのガイド付きアドベンチャーの実際 チロンギCCASが企画する、高齢者や障がいのある方のための忘れられないマダガスカル旅行は、一切の妥協を許しません。私たちは、すべての参加者の快適さと安全が最優先される場合、ロジスティクスが探検の成功の鍵となることを理解しています。パリからの出発から、定期航空会社による航空便が提供され、一定レベルのサービスが保証されます。現地では、空港送迎、水を含むフルボードプラン(熱帯気候では非常に重要な詳細)、そしてこの魔法の島でのすべての交通手段など、すべてが手配されます。 プログラムに記載されているツアーやアクティビティも含まれているため、旅行者は金銭面を気にすることなく、体験に集中できます。まさに安心のために設計されており、私たちがこのような冒険を計画する際に求めているのはまさにこれです。

連帯基金への寄付も含まれており、プロジェクトの人間的・倫理的側面を強化しています。これは、制度的危機と開発目標の間で葛藤を続けるマダガスカルのような島にとって不可欠な要素です。これは包括的なアプローチです。 ロジスティクスの手配に加えて、健康と安全が最優先です。 チロンギCCAS Grandes Latitudesとの提携により、必要な情報はすべてご提供いたします。予防接種は必須ではありませんが、定期予防接種(三種混合ワクチン、A型肝炎、B型肝炎、腸チフス)の接種と抗マラリア薬の服用を常にお勧めします。これは、滞在を最大限に楽しむためのシンプルながらも効果的な予防策です。パスポートは入国日から6ヶ月以上有効である必要があります。また、到着時に10ユーロの観光ビザ料金をお支払いいただきます。観光カードと医療保険はGrandes Latitudesが管理し、包括的な補償を提供します。これらすべてを専門家が担当してくれるので、高齢者や障害のある方も安心して探検をお楽しみいただけます。実用的な情報は明確で、除外事項(空港税の増額、ビザ料金、キャンセル保険、個人的な費用など)も明確に定義されているため、予期せぬ事態を未然に防ぐことができます。この組織の透明性とプロ意識に感謝しています。おかげで、私たちはためらうことなくこの冒険に出発することができました。 安心の旅のための最適化されたロジスティクス。忘れられない旅の鍵は、往々にしてその企画の質にあります。今回のマダガスカル探検において、チロンギ社会活動センター(CCAS)は、まさにその一翼を担ってくれました。プログラム全体は、ストレスを最小限に抑え、楽しさを最大限に高めることを目指して設計されています。現地の交通機関は綿密に管理されており、移動は旅の妨げではなく、旅の不可欠な一部となっています。フルボードの宿泊施設なら、アクティビティでいっぱいの日々を過ごした後、レストランを探すことなくリラックスできます。これは、特にグループ旅行で、この魔法の島での出会いや風景といった、本当に大切なことに集中したいときには、本当にありがたい安心感です。 APSTによる財務保証と帰国支援保険は、このオファーの品質と信頼性をさらに証明するものです。この素晴らしい冒険の最初から最後まで、お客様に安心とサポートをご提供できるよう、あらゆる対策を講じています。

マダガスカルを探検:すべての人のためのアクティビティ

高齢者や障がいのある方向けに設計されたアクティビティのセレクションをご覧ください。オプションを比較して、この魔法の島で忘れられない冒険を計画しましょう! アクセシビリティで絞り込む アクセシビリティ

難易度で絞り込む

難易度非常に簡単 簡単 興味で絞り込む 興味の種類 文化 自然 野生生物 グルメ 工芸 リラクゼーションリセット アクティビティ地域

所要時間 アクセシビリティ 難易度 料金(€) 詳細

検索条件に一致するアクティビティはありません。

この比較ツールは、マダガスカルでのスムーズで適切な冒険を計画するために、チロンギCCASによって提供されています。 興味:${activity.interet} 特定の機器 / 推奨事項:${activity.equipement_specifique}`;tbody.appendChild(detailRow);

}); } updateSortIcons(currentSort.column, currentSort.direction); // ソートアイコンを更新します

};

/ — イベントハンドラー —// テキスト検索のイベント searchInput.addEventListener(‘input’, (event) => { currentFilters.search = event.target.value;renderTable(); // 新しいフィルターでテーブルを再レンダリングします

  • });
  • // アクセシビリティフィルターのイベント
  • filterAccessibilite.addEventListener(‘change’, (event) => {
  • currentFilters.accessibilite = event.target.value;

renderTable();

}); // 難易度フィルターのイベント filterDifficulte.addEventListener(‘change’, (event) => { currentFilters.difficulte = event.target.value; renderTable(); }); // 興味関心タイプフィルターのイベント filterInteret.addEventListener(‘change’, (event) => { currentFilters.interet = event.target.value;renderTable();}); // すべてのフィルターをリセットするイベントresetFiltersBtn.addEventListener(‘click’, () => { // 入力/選択フィールドの値をリセットします searchInput.value = ”;

filterAccessibilite.value = ”; filterDifficulte.value = ”;filterInteret.value = ”; // フィルターの内部状態をリセットします currentFilters = { search: ”, accessibilite: ”, difficulte: ”, interet: ” }; // 並べ替えを初期状態にリセットします currentSort = { column: ‘activite’, direction: ‘asc’ };

renderTable(); // すべてをリセットしてテーブルを再レンダリングします

}); // 列によるソートのイベント(イベントはヘッダーに委譲) tableHeaders.forEach(header => { header.addEventListener(‘click’, () => { const column = header.getAttribute(‘data-sort-by’); // 同じ列がクリックされた場合、ソート方向を反転します if (currentSort.column === column) {currentSort.direction = currentSort.direction === ‘asc’ ? ‘desc’ : ‘asc’;

/* Styles personnalisés pour améliorer le design et l’accessibilité, complétant Tailwind */ /* Rend le texte invisible pour les utilisateurs visuels, mais accessible aux lecteurs d’écran */ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } /* Conteneur du tableau avec une hauteur maximale pour éviter un débordement et permettre le défilement */ .table-container { max-height: 1200px; /* Limite la hauteur du tableau scrollable pour rester dans les 2000px globaux */ overflow-y: auto; border-radius: 0.5rem; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); } /* En-tête du tableau collant en haut lors du défilement */ .table-header { position: sticky; top: 0; background-color: #f7fafc; /* Utilise une couleur Tailwind (gray-50) pour l’arrière-plan */ z-index: 10; /* Assure que l’en-tête reste au-dessus du contenu en défilement */ } /* Style pour les lignes de détails qui s’ouvrent/se ferment */ .table-row-detail { background-color: #f0f8ff; /* Bleu très clair pour une meilleure lisibilité */ border-bottom: 1px solid #e2e8f0; /* Bordure discrète */ } .table-row-detail td { padding: 1rem 1.5rem; } /* Icônes de tri */ .sort-icon { display: inline-block; width: 0; height: 0; vertical-align: middle; margin-left: 0.25rem; border-left: 4px solid transparent; border-right: 4px solid transparent; transition: transform 0.2s ease-in-out; /* Animation pour la rotation */ } /* Icône de tri croissant */ .sort-asc .sort-icon { border-bottom: 4px solid currentColor; /* Flèche vers le haut */ } /* Icône de tri décroissant */ .sort-desc .sort-icon { border-top: 4px solid currentColor; /* Flèche vers le bas */ } /* Style pour l’icône de détails pour l’animation de rotation */ .toggle-details svg { transition: transform 0.2s ease-in-out; } .toggle-details[aria-expanded=”true”] svg { transform: rotate(180deg); }

} else {

// それ以外の場合は、新しい列を設定し、デフォルトで昇順ソートを設定します

currentSort.direction = ‘asc’; } renderTable(); }); // アクティビティの詳細の表示/非表示を管理します(tbody にイベントを委譲します) tbody.addEventListener(‘click’, (event) => { // クリックされた要素に最も近い .toggle-details ボタンを検索します if (toggleButton) { const row = toggleButton.closest(‘tr’); // 親行を取得します const activityId = row.getAttribute(‘data-activity-id’); // アクティビティ ID を取得します const detailRow = document.getElementById(`details-${activityId}`); // 対応する詳細行を取得します // 詳細行の表示/非表示を切り替えます if (detailRow.classList.contains(‘hidden’)) { detailRow.classList.remove(‘hidden’);
} else { detailRow.classList.add(‘hidden’); toggleButton.setAttribute(‘aria-expanded’, ‘false’); // ARIA 属性を更新します } } });

// 制約に従い、テーブルデータが動的である場合に、無料のパブリック API 呼び出しを統合する方法の例を示します。

document.addEventListener(‘DOMContentLoaded’, () => { // — DONNÉES DU TABLEAU (Exemple statique) — // Cette section contient les données des activités. Pour cet exemple interactif, // elles sont incluses directement dans le JavaScript pour une gestion locale facile. // En situation réelle, ces données pourraient être chargées depuis une base de données // ou un fichier JSON pour une meilleure modularité. const allActivities = [ { “id”: 1, “activite”: “Balade en Pirogue Traditionnelle”, “region”: “Nosy Be”, “duree”: “3 heures”, “duree_num”: 3, // Ajout pour le tri numérique “accessibilite”: “Faible”, “difficulte”: “Facile”, “interet”: “Culturel, Nature”, “prix”: 45, “description”: “Découvrez les mangroves et les eaux cristallines de Nosy Be à bord d’une pirogue locale. Assistance pour l’embarquement/débarquement disponible et recommandée pour une expérience en toute sécurité.”, “equipement_specifique”: “Gilet de sauvetage fourni, coussins confortables, assistance PMR à l’embarquement.” }, { “id”: 2, “activite”: “Visite du Parc National d’Isalo (Partie Accessible)”, “region”: “Sud”, “duree”: “Journée complète”, “duree_num”: 8, // Journée estimée à 8h pour le tri “accessibilite”: “Modérée”, “difficulte”: “Modérée”, “interet”: “Nature, Paysages”, “prix”: 70, “description”: “Exploration des formations rocheuses uniques et piscines naturelles accessibles du Parc d’Isalo. Itinéraires adaptés pour fauteuils roulants sur certaines sections. Un guide spécialisé est disponible pour accompagner le groupe.”, “equipement_specifique”: “Chaises tout-terrain disponibles sur demande, accès WC PMR sur certains points, chemins aménagés.” }, { “id”: 3, “activite”: “Atelier de fabrication de papier Antemoro”, “region”: “Manakara”, “duree”: “2 heures”, “duree_num”: 2, “accessibilite”: “Élevée”, “difficulte”: “Très Facile”, “interet”: “Culturel, Artisanal”, “prix”: 25, “description”: “Participez à la fabrication artisanale du fameux papier Antemoro, une tradition millénaire. L’atelier est entièrement accessible et les activités peuvent être réalisées assis. Une expérience immersive et créative.”, “equipement_specifique”: “Tables ajustables, sièges confortables, environnement de plain-pied, personnel aidant.” }, { “id”: 4, “activite”: “Rencontre avec les lémuriens (Parc de l’Anja)”, “region”: “Sud-Est (Ambalavao)”, “duree”: “2-3 heures”, “duree_num”: 2.5, // Moyenne pour le tri “accessibilite”: “Modérée”, “difficulte”: “Facile”, “interet”: “Faune, Nature”, “prix”: 30, “description”: “Observation des lémuriens catta en liberté dans leur habitat naturel. Sentiers praticables avec assistance et quelques bancs de repos. Un guide accompagnateur spécialisé dans l’accessibilité est fortement recommandé.”, “equipement_specifique”: “Chemins élargis, bancs de repos fréquents, personnel d’assistance disponible.” }, { “id”: 5, “activite”: “Dégustation de produits locaux (Vanille, Chocolat)”, “region”: “Tamatave”, “duree”: “1.5 heures”, “duree_num”: 1.5, “accessibilite”: “Élevée”, “difficulte”: “Très Facile”, “interet”: “Gastronomie, Culturel”, “prix”: 20, “description”: “Immersion gourmande dans les saveurs de Madagascar avec dégustation de vanille, chocolat, épices locales et fruits exotiques. L’expérience est entièrement accessible et propice à la détente et à l’échange.”, “equipement_specifique”: “Espaces spacieux, sièges ergonomiques, personnel attentif aux besoins spécifiques.” }, { “id”: 6, “activite”: “Cours de madagasikara.fr/la-renaissance-de-la-cuisine-malgache-fusion-entre-tradition-et-modernite/">cuisine Malgache Adapté”, “region”: “Antananarivo”, “duree”: “3 heures”, “duree_num”: 3, “accessibilite”: “Élevée”, “difficulte”: “Facile”, “interet”: “Gastronomie, Culturel”, “prix”: 50, “description”: “Apprenez à préparer des plats traditionnels malgaches dans un environnement accessible et convivial. Les postes de travail sont adaptés aux fauteuils roulants et aux personnes assises. Tous les ingrédients sont fournis.”, “equipement_specifique”: “Plans de travail ajustables, ustensiles ergonomiques, sièges adaptés.” }, { “id”: 7, “activite”: “Visite du Jardin Botanique de Tsimbazaza”, “region”: “Antananarivo”, “duree”: “2-3 heures”, “duree_num”: 2.5, “accessibilite”: “Modérée”, “difficulte”: “Facile”, “interet”: “Nature, Faune”, “prix”: 15, “description”: “Explorez la flore et la faune endémiques de Madagascar dans un jardin botanique bien entretenu. Les chemins sont majoritairement accessibles, mais certaines zones peuvent nécessiter une assistance. Idéal pour une promenade relaxante.”, “equipement_specifique”: “Bancs de repos, allées larges, assistance disponible pour les sections moins praticables.” }, { “id”: 8, “activite”: “Croisière Relaxante sur le Canal des Pangalanes”, “region”: “Est (Mananjary)”, “duree”: “Demi-journée”, “duree_num”: 4, // Demi-journée estimée à 4h pour le tri “accessibilite”: “Modérée”, “difficulte”: “Facile”, “interet”: “Nature, Détente”, “prix”: 60, “description”: “Profitez d’une croisière paisible le long du Canal des Pangalanes, observant la vie locale, la nature luxuriante et les villages. Les ponts de bateau sont stables et offrent des sièges confortables. Aide à l’embarquement disponible.”, “equipement_specifique”: “Accès facilité au bateau, espace réservé pour fauteuil roulant sur demande, personnel d’équipage attentif.” }, { “id”: 9, “activite”: “Observation des baleines à Sainte-Marie (saison)”, “region”: “Sainte-Marie”, “duree”: “Demi-journée”, “duree_num”: 4, “accessibilite”: “Faible”, // Mouvement du bateau, embarquement délicat “difficulte”: “Modérée”, “interet”: “Faune, Nature”, “prix”: 90, “description”: “Une expérience majestueuse pour observer les baleines à bosse pendant la saison (juin à septembre). L’embarquement et les mouvements du bateau peuvent nécessiter une bonne autonomie ou une aide significative. La vigilance est de mise.”, “equipement_specifique”: “Gilets de sauvetage. Non recommandé pour les PMR à mobilité très réduite sans accompagnement robuste et avis médical.” }, { “id”: 10, “activite”: “Visite d’une plantation de café ou de cacao”, “region”: “Nord-Est”, “duree”: “2 heures”, “duree_num”: 2, “accessibilite”: “Modérée”, “difficulte”: “Facile”, “interet”: “Culturel, Gastronomie”, “prix”: 35, “description”: “Découvrez le processus de culture et de transformation du café ou du cacao, de la plante à la tasse/tablette. Les chemins des plantations peuvent être irréguliers, mais des parcours adaptés sont souvent possibles avec assistance d’un guide.”, “equipement_specifique”: “Parcours majoritairement plats, bancs de repos, dégustation accessible, possibilité de guide-accompagnateur.” } ]; let filteredActivities = […allActivities]; // Copie mutable pour les opérations de filtrage/tri let currentSort = { column: ‘activite’, direction: ‘asc’ }; // Tri initial par défaut let currentFilters = { search: ”, accessibilite: ”, difficulte: ”, interet: ” }; // — Références aux éléments du DOM pour une manipulation plus aisée — const tbody = document.getElementById(‘comparateur-tbody’); const searchInput = document.getElementById(‘search-input’); const filterAccessibilite = document.getElementById(‘filter-accessibilite’); const filterDifficulte = document.getElementById(‘filter-difficulte’); const filterInteret = document.getElementById(‘filter-interet’); const resetFiltersBtn = document.getElementById(‘reset-filters’); const tableHeaders = document.querySelectorAll(‘#madagascar-activities-comparateur th[data-sort-by]’); const noResultsMessage = document.getElementById(‘no-results-message’); // — FONCTIONS UTILITAIRES — /** * Normalise une chaîne de caractères en minuscules et sans accents pour faciliter la recherche et le filtrage. * @param {string} str – La chaîne à normaliser. * @returns {string} La chaîne normalisée. */ const normalizeString = (str) => { return str.toLowerCase().normalize(“NFD”).replace(/[u0300-u036f]/g, “”); }; /** * Met à jour l’icône de tri (flèche) sur l’en-tête de colonne actuellement triée. * @param {string} column – La colonne actuellement triée par sa clé de données. * @param {string} direction – La direction du tri (‘asc’ pour croissant, ‘desc’ pour décroissant). */ const updateSortIcons = (column, direction) => { tableHeaders.forEach(header => { const sortBy = header.getAttribute(‘data-sort-by’); const icon = header.querySelector(‘.sort-icon’); if (icon) { icon.className = ‘sort-icon’; // Réinitialise la classe de l’icône if (sortBy === column) { icon.classList.add(`sort-${direction}`); // Ajoute la classe pour la direction actuelle } } }); }; /** * Trie un tableau d’activités selon une colonne et une direction spécifiées. * Gère les types de données (chaînes, nombres) et les ordres spécifiques pour “Accessibilité” et “Difficulté”. * @param {Array} data – Le tableau d’activités à trier. * @param {string} column – La clé de la propriété par laquelle trier. * @param {string} direction – ‘asc’ pour croissant, ‘desc’ pour décroissant. * @returns {Array} Un nouveau tableau contenant les activités triées. */ const sortActivities = (data, column, direction) => { return […data].sort((a, b) => { let valA = a[column]; let valB = b[column]; // Ordre personnalisé pour l’accessibilité if (column === ‘accessibilite’) { const order = { ‘Élevée’: 3, ‘Modérée’: 2, ‘Faible’: 1 }; valA = order[valA] || 0; // Gérer les valeurs non définies valB = order[valB] || 0; } // Ordre personnalisé pour la difficulté else if (column === ‘difficulte’) { const order = { ‘Très Facile’: 1, ‘Facile’: 2, ‘Modérée’: 3, ‘Difficile’: 4 }; valA = order[valA] || 0; valB = order[valB] || 0; } // Pour les chaînes de caractères, utilise la normalisation pour un tri alphabétique correct else if (typeof valA === ‘string’ && typeof valB === ‘string’) { valA = normalizeString(valA); valB = normalizeString(valB); } // Logique de comparaison générale if (valA valB) return direction === ‘asc’ ? 1 : -1; return 0; // Éléments égaux }); }; /** * Applique tous les filtres actifs (recherche textuelle, accessibilité, difficulté, intérêt) * au jeu de données complet des activités. * @returns {Array} Le tableau d’activités qui correspondent à tous les critères de filtrage. */ const applyFiltersAndSearch = () => { let tempActivities = […allActivities]; // Commence avec toutes les activités // 1. Filtrage par recherche textuelle (sur toutes les propriétés de type string) if (currentFilters.search) { const searchTerm = normalizeString(currentFilters.search); tempActivities = tempActivities.filter(activity => Object.values(activity).some(value => value && typeof value === ‘string’ && normalizeString(value).includes(searchTerm) ) ); } // 2. Filtrage par niveau d’accessibilité if (currentFilters.accessibilite) { tempActivities = tempActivities.filter(activity => activity.accessibilite === currentFilters.accessibilite ); } // 3. Filtrage par niveau de difficulté if (currentFilters.difficulte) { tempActivities = tempActivities.filter(activity => activity.difficulte === currentFilters.difficulte ); } // 4. Filtrage par type d’intérêt (une activité peut avoir plusieurs intérêts, ex: “Culturel, Nature”) if (currentFilters.interet) { tempActivities = tempActivities.filter(activity => activity.interet.split(‘, ‘).includes(currentFilters.interet) ); } return tempActivities; }; /** * Met à jour l’affichage du tableau en fonction des filtres et du tri actuels. * Cache ou affiche le message “Aucun résultat” si nécessaire. */ const renderTable = () => { filteredActivities = applyFiltersAndSearch(); // Applique les filtres filteredActivities = sortActivities(filteredActivities, currentSort.column, currentSort.direction); // Applique le tri tbody.innerHTML = ”; // Vide le contenu actuel du corps du tableau if (filteredActivities.length === 0) { noResultsMessage.classList.remove(‘hidden’); // Affiche le message } else { noResultsMessage.classList.add(‘hidden’); // Cache le message filteredActivities.forEach(activity => { // Création de la ligne principale du tableau pour chaque activité const row = document.createElement(‘tr’); row.className = ‘hover:bg-blue-50 cursor-pointer’; // Effet de survol et curseur cliquable row.setAttribute(‘data-activity-id’, activity.id); // Stocke l’ID pour les détails row.innerHTML = ` ${activity.activite} ${activity.region} ${activity.duree} ${activity.accessibilite} ${activity.difficulte} ${activity.prix} €

/5 0 vote

💚 Cet article vous a été utile ?
🌍
Envie d'en savoir plus sur Madagascar ?

Découvrez notre guide complet — destinations, budget, visa, faune et conseils pratiques pour préparer votre voyage.

Explorer Madagascar → À propos de l'île

📖 Vous aimerez aussi

政治とニュース

Transition à Madagascar : la société civile et la Génération Z face aux doutes sur le « Programme de la Refondation »

3 3月 2026
政治とニュース

Fermeture de l’aéroport de Dubaï : chaos et désarroi chez les voyageurs bloqués

2 3月 2026
政治とニュース

Vidéo – Madagascar : la diplomatie proactive du président de transition suite au coup d’État

2 3月 2026