v-borgomotov
@v-borgomotov
Молодой креативный специалист

Как открыть пост в модальном окне?

Хочу чтобы без перезагрузки страницы посты открывались в модальном окне. Сделал следующим образом:
1. Подключил модальное окно. Сделал разметку (loop.php):
<a href="#" data-remodal-target="modal-<?php the_ID(); ?>" title="<?php the_title_attribute(); ?>" class="item-link">
	<article id="post-<?php the_ID(); ?>" <?php post_class('item'); ?> >
		...
	</article>	
</a>

2. поставил в цикл:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
		<?php get_template_part('loop'); ?>		
	<?php endwhile; endif; ?>

3. Также сделал разметку вывода (modal.php):
<div class="remodal" data-remodal-id="modal-<?php the_ID(); ?>">
	<button data-remodal-action="close" class="remodal-close"></button>
	<h2><?php the_title(); ?></h2>
	<div class="modal-content">
		<?php the_content(); ?>
	</div>
</div>

4. поместил ее тоже в цикл и вставил ее в footer:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
		<?php get_template_part('modal'); ?>		
	<?php endwhile;  endif; ?>

Итог: Все получилось!
Но есть минус: как я понял принцип работы этого всего процесса - загружаются и посты и модальные окна одновременно, только модальные окна скрыты. Поэтому: если в посте будут много картинок и видео и прочий контент, то они все будут грузиться и увеличивать скорость страницы.
Как этого избежать? Какие буду идеи и предложения?
  • Вопрос задан
  • 300 просмотров
Пригласить эксперта
Ответы на вопрос 1
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
  1. Берете ссылку (обычную ссылку на пост)
  2. Вешаете на неё обработчик клика
  3. По клику, выполняете fetch(<href ссылки>)
  4. Показываете модалку с каким-то текстом "Загрузка"
  5. В ответ на запрос сервер возвращает html
  6. В этом html находите контент
  7. Вставляете контент в модалку вместо текста "Загрузка"
  8. Изменяете ссылку в браузере на <href ссылки>
  9. При закрытии модалки -- возвращаете исходную ссылку

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы