Dynamic Footer Date
Наличие уведомления об авторских правах с указанием текущего года, например © 2024 - Все права защищены
, является обычной необходимостью (хотя юридически это никак не закреплено).
Дата на стороне сервера: вопрос
---const year = new Date().getFullYear()---
<footer> <p>© {year} - All rights reserved</p></footer>
Однако он будет отображать только год, когда сайт был создан в последний раз! Он обновится только при следующей перестройке сайта.
Решение
Решение заключается в использовании JavaScript на стороне клиента для получения текущего года при загрузке страницы.
-
Во время сборки мы готовим откат даты. Если браузер пользователя не может выполнить JavaScript, нам нужно показать последнюю известную дату.
---const year = new Date().getFullYear()--- -
Мы пишем разметку. У нас есть span с id
footer-year
, чтобы на него можно было ссылаться из нашего скрипта. Его значение по умолчанию - дата возврата из шага 1.<footer><p>© <span id="footer-year">{year}</span> - All rights reserved</p></footer> -
В нашем скрипте мы можем получить элемент
<span>
по его id и обновить его содержимое до текущего года. Код отличается в зависимости от версии Astro и от того, используете ли вы View Transitions.<script is:inline>document.getElementById("footer-year").innerText = new Date().getFullYear();</script><script is:inline>const handleFooterDate = () => {document.getElementById("footer-year").innerText = new Date().getFullYear();};handleFooterDate();document.addEventListener("astro:after-swap", () => handleFooterDate());</script><script is:inline data-astro-rerun>document.getElementById("footer-year").innerText = new Date().getFullYear();</script>
Полный код
---const year = new Date().getFullYear()---
{' '}
<footer><p> © <span id="footer-year">{year}</span> - Все права защищены</p></footer>
{' '}
<script is:inline>document.getElementById("footer-year").innerText = new Date().getFullYear();</script>
---const year = new Date().getFullYear()---
<footer> <p>© <span id="footer-year">{year}</span> - All rights reserved</p></footer>
<script is:inline> const handleFooterDate = () => { document.getElementById("footer-year").innerText = new Date().getFullYear(); };
handleFooterDate(); document.addEventListener("astro:after-swap", () => handleFooterDate());</script>
---const year = new Date().getFullYear()---
{' '}
<footer><p> © <span id="footer-year">{year}</span> - Все права защищены</p></footer>
{' '}
<scriptis:inlinedata-astro-rerun>document.getElementById("footer-year").innerText = new Date().getFullYear();</script>