Add blog post for Public Domain Day 2025

This commit is contained in:
Alex Cabal 2024-11-26 23:11:20 -06:00
parent 8908c0a268
commit b536ebdaee
8 changed files with 280 additions and 28 deletions

View file

@ -0,0 +1,12 @@
<?
/**
* @var Ebook $ebook
*/
?>
<figure class="realistic-ebook <? if($ebook->WordCount < 100000){ ?>small<? }elseif($ebook->WordCount < 200000){ ?>medium<? }elseif($ebook->WordCount <= 300000){ ?>large<? }elseif($ebook->WordCount < 400000){ ?>xlarge<? }else{ ?>xxlarge<? } ?>">
<picture>
<source srcset="<?= $ebook->CoverImage2xAvifUrl ?> 2x, <?= $ebook->CoverImageAvifUrl ?> 1x" type="image/avif"/>
<source srcset="<?= $ebook->CoverImage2xUrl ?> 2x, <?= $ebook->CoverImageUrl ?> 1x" type="image/jpg"/>
<img src="<?= $ebook->CoverImageUrl ?>" alt="" height="363" width="242"/>
</picture>
</figure>

12
www/blog/index.php Normal file
View file

@ -0,0 +1,12 @@
<?= Template::Header(['title' => 'Blog', 'highlight' => '', 'description' => 'The Standard Ebooks blog.']) ?>
<main>
<section class="narrow">
<h1>Blog</h1>
<ul>
<li>
<a href="/blog/public-domain-day-2025">Public Domain Day 2025</a>
</li>
</ul>
</section>
</main>
<?= Template::Footer() ?>

View file

@ -0,0 +1,140 @@
<?
// Condense getting all `Ebook`s into one DB query, and sort them at the PHP level, instead of doing so many separate queries to get each `Ebook`.
$identifiers = [
'url:https://standardebooks.org/ebooks/william-faulkner/the-sound-and-the-fury',
'url:https://standardebooks.org/ebooks/erich-maria-remarque/all-quiet-on-the-western-front/a-w-wheen',
'url:https://standardebooks.org/ebooks/ernest-hemingway/a-farewell-to-arms',
'url:https://standardebooks.org/ebooks/john-steinbeck/cup-of-gold',
'url:https://standardebooks.org/ebooks/dashiell-hammett/red-harvest',
'url:https://standardebooks.org/ebooks/sinclair-lewis/dodsworth',
'url:https://standardebooks.org/ebooks/oliver-la-farge/laughing-boy',
'url:https://standardebooks.org/ebooks/graham-greene/the-man-within',
'url:https://standardebooks.org/ebooks/calvin-coolidge/the-autobiography-of-calvin-coolidge',
'url:https://standardebooks.org/ebooks/lloyd-c-douglas/magnificent-obsession',
'url:https://standardebooks.org/ebooks/josephine-tey/the-man-in-the-queue',
'url:https://standardebooks.org/ebooks/john-buchan/the-courts-of-the-morning',
'url:https://standardebooks.org/ebooks/j-b-priestley/the-good-companions',
'url:https://standardebooks.org/ebooks/dashiell-hammett/the-dain-curse',
'url:https://standardebooks.org/ebooks/c-s-forester/brown-on-resolution',
'url:https://standardebooks.org/ebooks/arthur-conan-doyle/the-maracot-deep'
];
$ebooks = Db::Query('SELECT * from Ebooks where Identifier in ' . Db::CreateSetSql($identifiers), $identifiers, Ebook::class);
$ebooksWithDescriptions = [];
foreach($ebooks as $ebook){
$description = '';
$order = 0;
switch($ebook->Identifier){
case 'url:https://standardebooks.org/ebooks/william-faulkner/the-sound-and-the-fury':
$description = '<p>Faulkners widely-acclaimed masterpiece is well-known in America, as its taught in high schools across the country. In it we follow the Compson family, an aristocratic family in Mississippi, and their slow decline into poverty and ruin. What makes the novel so special—and what lends it its reputation as a challenging read—is its stream-of-consciousness style, in which Faulkner attempts to narrate the characters thoughts directly to the reader.</p><p><i>The Sound and the Fury</i> was an essential step in developing that modernist prose style, and is still considered to be one of the greatest works of American literature.</p>';
$order = 0;
break;
case 'url:https://standardebooks.org/ebooks/erich-maria-remarque/all-quiet-on-the-western-front/a-w-wheen':
$description = '<p>One of the greatest war novels to be born from any conflict, Erich Maria Remarques grisly tale of the brutality and horror of the German trenches during the Great War was so powerful that it earned him nominations for the Nobel Prizes in <em>both</em> Literature and Peace, and was soon widely banned in a Europe that was preparing for a second cataclysmic conflict.</p>';
$order = 1;
break;
case 'url:https://standardebooks.org/ebooks/ernest-hemingway/a-farewell-to-arms':
$description = '<p>Called “the premier American war novel from World War I,” Hemingways semi-autobiographical story of an American ambulance driver serving in the Italian front, and a bright and cynical British nurse, cemented his reputation as one of the generations foremost literary figures. Unlike Remarque, whose <i>All Quite on the Western Front</i> paints the wars destruction in full color, Hemingways story is one of the mundanity of war—of the quotidien smallness that underpins even the most horrific of events.</p>';
$order = 2;
break;
case 'url:https://standardebooks.org/ebooks/john-steinbeck/cup-of-gold':
$description = '<p><i>Cup of Gold</i> is John Steinbecks first novel, the swashbuckling story of the real-life Captain Morgan, legendary pirate. Little of Morgans actual life is known, but Steinbeck fills in the blanks of this rich historical fiction with rich portraits of Caribbean ports and flourishes of magical realism.</p><p>While one might expect a rollicking tale of adventure, the novel is actually a deep meditation on the pursuit of—and inability to find—true happiness, and its skillful craft deftly foreshadows Steinbecks later ascenion to literary titanhood.</p>';
$order = 3;
break;
case 'url:https://standardebooks.org/ebooks/dashiell-hammett/red-harvest':
$description = '<p><i>Red Harvest</i> is Dashiell Hammets first full-length novel to feature the <a href="/collections/continental-op">Continental Op</a>, the nameless, hard-drinking, cynical private eye that single-handedly created the archetype of the hard-boiled detective. The novel is a fast-paced, tightly-written murder thriller that simultaneously touches all the bases of, and <em>defines</em>, the classic noir style that was much-imitated, and later much-spoofed, in the following century.</p>';
$order = 4;
break;
case 'url:https://standardebooks.org/ebooks/sinclair-lewis/dodsworth':
$description = '<p>Samuel Dodsworth is a successful automobile executive who decides to retire early. His younger wife Fran wants to tour Europe, so the two embark on a trip. But soon after they arrive, Fran becomes enchanted by the whirlwind of culture and old-world society, while Samuel, a mild-mannered, down-to-earth Midwesterner, yearns to escape the pretentiousness and return to the quiet stability of home. The novel explores the slow breakdown of their marriage while deftly satirizing American midde-class mores and the wide gulf between them and European culture.</p>';
$order = 5;
break;
case 'url:https://standardebooks.org/ebooks/oliver-la-farge/laughing-boy':
$description = '<p><i>Laughing Boy</i> is the story of the titular main character, a young Navajo man living in the American Southwest around the turn of the 20th century. He meets the fiery young Slim Girl at a tribal meet, but her reputation precedes her, and the tribe disapproves of their union. Ignoring the advice of the tribe, the two start a life together as they try to keep ancient traditions alive in the face of the rapidly-encroaching modernization of the American Southwest.</p><p><i>Laughing Boy</i> was the recipient of the 1930 <a href="/collections/pulitzer-prize-for-fiction-winners">Pulitzer Prize for Fiction</a>.</p>';
$order = 6;
break;
case 'url:https://standardebooks.org/ebooks/graham-greene/the-man-within':
$description = '<p><i>The Man Within</i> is acclaimed novelist Graham Greenes first novel. Set against the backdrop of the English countryside,, the novel explores themes of guilt, redemption, the nature of courage and cowardice, and the complex relationship between ones inner beliefs and outward actions.</p>';
$order = 7;
break;
case 'url:https://standardebooks.org/ebooks/calvin-coolidge/the-autobiography-of-calvin-coolidge':
$description = '<p>Calvin Coolidge was the 30th president of the United States, entering the office as vice president when president Warren G. Harding suddenly passed, and winning a reelection term. Even though he was hugely popular, he declined running for a second full term, opting to retire instead. In this autobiography—which is as brief as “Silent Cals” legend suggests it might be—we follow the former president from his idyllic boyhood in Vermont, to a career in the law, to the governership of Massachussetts, to the presidency and beyond.</p>';
$order = 8;
break;
case 'url:https://standardebooks.org/ebooks/lloyd-c-douglas/magnificent-obsession':
$description = '<p>Robert Merrick, a young man from a wealthy family, accidentally causes the death of an esteemed neurosurgeon. Wracked by guilt, Robert decides to devote his own life to improving the life of others.</p><p><i>Magnificent Obsession</i> was a hugely popular work in its time, inspiring a blockbuster 1935 film of the same name.</p>';
$order = 9;
break;
case 'url:https://standardebooks.org/ebooks/josephine-tey/the-man-in-the-queue':
$description = '<p>Standing in line in a long queue for a show at a theater, a young man is stabbed in the back. <a href="/collections/inspector-grant">Inspector Alan Grant</a> of the Metropolitan Police is soon on the case, though he finds it deeply puzzling—not least because the identity of the victim is itself a mystery.</p><p><i>The Man in the Queue</i> was the first in a series of hugely successful detective novels by Josephine Tey.</p>';
$order = 10;
break;
case 'url:https://standardebooks.org/ebooks/john-buchan/the-courts-of-the-morning':
$description = '<p><i>The Courts of the Morning</i> opens with <a href="/collections/richard-hannay">Major-General Richard Hannay</a> being approached by American diplomats regarding the disappearance of a wealthy industrialist. He in turn seeks the help of his friend Sandy Arbuthnot—but Arbuthnot himself quickly goes missing. We soon head to the South American country of Olifa, where a powerful head of a mining company is gradually enslaving the populace. It seems that only guerrilla warfare will save the country from rule under a ruthless tyrant.</p>';
$order = 11;
break;
case 'url:https://standardebooks.org/ebooks/j-b-priestley/the-good-companions':
$description = '<p>The recipient of the <a href="/collections/james-tait-black-memorial-fiction-prize-winners">James Tait Black Memorial Fiction Prize</a>, <i>The Good Companions</i> was a blockbuster novel that made J. B. Priestleys reputation. In it we follow three protagonists from different walks of life who, looking for a change of pace, strike out from home. They eventually cross paths with each other and with a group of “concert players,” a type of traveling vaudeville troupe common in the day. They decide to join forces and form the “Good Companions,” a musical act that takes them on a series of cozy adventures.</p>';
$order = 12;
break;
case 'url:https://standardebooks.org/ebooks/dashiell-hammett/the-dain-curse':
$description = '<p>In <i>The Dain Curse</i>, the second <a href="/collections/continental-op">Continental Op</a> novel, the legendary but nameless hard-drinking and quick-shooting detective is sent to investigate the theft of diamonds from a San Franciso family. The fast-paced noir thriller quickly veers from car chases to cultists to the supernatural, but the unflappable Continental Op is relentless in his pursuit of truth.</p>';
$order = 13;
break;
case 'url:https://standardebooks.org/ebooks/c-s-forester/brown-on-resolution':
$description = '<p>While on operations in the Pacific during the first World War, the sailor Albert Browns ship is sunk—but he survives, and is taken on board the German cruiser that sank them. It too has suffered damage, and heads to some nearby islands for repairs. In this unlikely and hostile setting, Brown, alone, pits himself against the German ship and its crew, seeking to delay its progress while British naval reinforcements rush to his rescue.</p><p>Foresters careful historical research adds an unimpeachable air of versimilitude to the novel, and indeed, the plot is loosely based on real events.</p>';
$order = 14;
break;
case 'url:https://standardebooks.org/ebooks/arthur-conan-doyle/the-maracot-deep':
$description = '<p>While investigating the deepest part of the Atlantic Ocean, a team led by Dr. Maracot is cut off from their ship and hurled to the bottom of the ocean. There, they find themselves in the remnants of the ancient civilization of Atlantis.</p><p>Though Doyle is most famous for his <a href="/collections/sherlock-holmes">Sherlock Holmes</a> stories, in which a brilliant logician uses reason and deduction to solve crime, in later years he became deeply spiritual. This novel, written just a year before his death, combines his interest in science and reason with his new spiritual outlook.</p>';
$order = 15;
break;
}
$ebooksWithDescriptions[$order] = ['ebook' => $ebook, 'description' => $description];
}
ksort($ebooksWithDescriptions);
?><?= Template::Header(['title' => 'Public Domain Day 2025 - Blog', 'highlight' => '', 'description' => 'Read about the new ebooks Standard Ebooks is releasing for Public Domain Day 2025!', 'css' => ['/css/public-domain-day.css']]) ?>
<main>
<section class="narrow">
<h1>Public Domain Day 2025</h1>
<?= Template::DonationCounter() ?>
<?= Template::DonationProgress() ?>
<p>Happy Public Domain Day!</p>
<p>Around the world, people celebrate Public Domain Day on January 1, the day in which copyright expires on some older works and they enter the public domain in many different countries.</p>
<p>Some countries have a copyright term of the life of the author plus seventy years. These countries have been celebrating public domain day for some time now.</p>
<p>But in the U.S., powerful corporations have continuously extended the length of copyright for decades so they could continue to profit. In the process, they locked <em>all</em> of our cultural output away from us for nearly a century.</p>
<p>2019 was the year in which this extremely long, corporate-dictated copyright term was finally going to end. As that year approached, we had every reason to assume that these powerful corporations would once again lobby to extend copyright even further.</p>
<p>But as 2019 grew closer, it became clear that these corporations <em>wouldnt</em> work to extend copyright yet again—making 2019 the first year in almost a century in which a signifcant amount of literature once again entered the public domain in the U.S., free for anyone in the U.S. to read, use, and share.</p>
<p>Ever since then, each year weve been joining our international friends in celebrating Public Domain Day by preparing some of the biggest literary hits of the year for you to read on January 1.</p>
<hr/>
<p><strong>In 2025, books published in 1929 enter the U.S. public domain.</strong> And 1929 was a literary doozy!</p>
<p>Books by William Faulkner, Ernest Hemingway, Mahatma Gandhi, and John Steinbeck entered the U.S. public domain. We also have the first novel featuring the Continental Op, the archetype for every hard-boiled noir detective to grace page and screen since; the English translation of <i>All Quiet on the Western Front</i>; and much more.</p>
<p>Our friends at Public Domain Review have written about some <a href="">other things besides literature that entered the public domain this year</a>.</p>
<p>At Standard Ebooks, our volunteers have been working hard for the past few months to prepare the following ebooks to be ready for Public Domain Day. Read more about them and download them for free:</p>
<ul class="public-domain-day">
<? foreach($ebooksWithDescriptions as $ebookGroup){ ?>
<li>
<div>
<a href="<?= $ebookGroup['ebook']->Url ?>">
<?= Template::RealisticEbook(['ebook' => $ebookGroup['ebook']]) ?>
</a>
</div>
<div>
<h2><a href="<?= $ebookGroup['ebook']->Url ?>"><?= Formatter::EscapeHtml($ebookGroup['ebook']->Title) ?></a></h2>
<p class="byline">by <a href="<?= $ebookGroup['ebook']->AuthorsUrl ?>"><?= Formatter::EscapeHtml($ebookGroup['ebook']->Authors[0]->Name) ?></a></p>
<p><?= $ebookGroup['description'] ?></p>
</div>
</li>
<? } ?>
</ul>
</section>
</main>
<?= Template::Footer() ?>

View file

@ -2855,31 +2855,41 @@ aside button.close:active{
padding-left: 1rem; padding-left: 1rem;
} }
.ebook figure.small{ a:has(figure.realistic-ebook):focus{
outline: none;
}
a:focus figure.realistic-ebook img,
a:focus figure.realistic-ebook picture::after,
a:focus figure.realistic-ebook::after{
outline: 1px dashed var(--input-outline);
}
figure.realistic-ebook.small{
--size: 1rem; --size: 1rem;
} }
.ebook figure, figure.realistic-ebook,
.ebook figure.medium{ figure.realistic-ebook.medium{
--size: 1.5rem; --size: 1.5rem;
} }
.ebook figure.large{ figure.realistic-ebook.large{
--size: 2rem; --size: 2rem;
margin-top: 2rem; margin-top: 2rem;
} }
.ebook figure.xlarge{ figure.realistic-ebook.xlarge{
--size: 2.5rem; --size: 2.5rem;
margin-top: 2rem; margin-top: 2rem;
} }
.ebook figure.xxlarge{ figure.realistic-ebook.xxlarge{
--size: 3rem; --size: 3rem;
margin-top: 2rem; margin-top: 2rem;
} }
.ebook figure{ figure.realistic-ebook{
transform: skewY(-10deg) scale(.75); transform: skewY(-10deg) scale(.75);
font-size: 0; font-size: 0;
width: 242px; width: 242px;
@ -2888,7 +2898,7 @@ aside button.close:active{
align-self: flex-start; align-self: flex-start;
} }
.ebook figure img{ /* cover */ figure.realistic-ebook img{ /* cover */
/* override previous cascade */ /* override previous cascade */
width: auto; width: auto;
background: #222; background: #222;
@ -2898,7 +2908,7 @@ aside button.close:active{
transition: transform .5s, filter .5s; transition: transform .5s, filter .5s;
} }
.ebook figure::after{ /* spine */ figure.realistic-ebook::after{ /* spine */
content: ""; content: "";
position: absolute; position: absolute;
width: calc(var(--size) + 2px); width: calc(var(--size) + 2px);
@ -2915,7 +2925,7 @@ aside button.close:active{
border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;
} }
.ebook figure picture::before{ /* pages */ figure.realistic-ebook picture::before{ /* pages */
content: ""; content: "";
position: absolute; position: absolute;
width: var(--size); width: var(--size);
@ -2931,7 +2941,7 @@ aside button.close:active{
z-index: -1; z-index: -1;
} }
.ebook figure picture::after{ /* back board */ figure.realistic-ebook picture::after{ /* back board */
content: ""; content: "";
position: absolute; position: absolute;
width: 100%; width: 100%;
@ -2945,7 +2955,7 @@ aside button.close:active{
transition: transform .5s; transition: transform .5s;
} }
.ebook figure::before{ /* shadow */ figure.realistic-ebook::before{ /* shadow */
content: ""; content: "";
background: rgba(0, 0, 0, .5); background: rgba(0, 0, 0, .5);
position: absolute; position: absolute;
@ -3052,6 +3062,15 @@ ul.feed p{
margin-bottom: 1rem; margin-bottom: 1rem;
} }
hr{
margin: 2rem auto;
border: 1px dashed var(--sub-text);
}
hr + p{
margin-top: 0;
}
@media (hover: none) and (pointer: coarse){ /* target ipads and smartphones without a mouse */ @media (hover: none) and (pointer: coarse){ /* target ipads and smartphones without a mouse */
/* For iPad, unset the height so it matches the other elements */ /* For iPad, unset the height so it matches the other elements */
select[multiple]{ select[multiple]{
@ -3234,14 +3253,14 @@ ul.feed p{
padding-top: 0; padding-top: 0;
} }
.ebook figure{ figure.realistic-ebook{
transform: skewY(-10deg) scale(.5); transform: skewY(-10deg) scale(.5);
margin-top: -1rem; margin-top: -1rem;
} }
.ebook figure.large, figure.realistic-ebook.large,
.ebook figure.xlarge, figure.realistic-ebook.xlarge,
.ebook figure.xxlarge{ figure.realistic-ebook.xxlarge{
margin-top: 0; margin-top: 0;
} }
@ -3452,7 +3471,7 @@ ul.feed p{
} }
@media(max-width: 580px){ @media(max-width: 580px){
.ebook figure{ figure.realistic-ebook{
display: none; display: none;
} }
} }

View file

@ -0,0 +1,66 @@
.public-domain-day{
margin-top: 4rem;
}
.public-domain-day li{
display: flex;
margin-top: 6rem;
}
.public-domain-day div + div{
margin-left: 1rem;
}
.public-domain-day h2{
margin-top: 0;
}
.public-domain-day h2 a{
text-decoration: none;
}
.byline{
font-style: italic;
}
.byline a{
font-style: normal;
}
.public-domain-day figure{
margin-top: -1rem;
}
@media(max-width: 1000px){
.public-domain-day div + div{
margin-left: 0;
}
.public-domain-day div > a{
width: 7rem;
}
.public-domain-day figure{
margin-top: -3rem;
}
}
@media(max-width: 580px){
.public-domain-day li{
flex-direction: column;
}
.public-domain-day div:first-child{
text-align: center;
}
.public-domain-day div > a{
margin: auto;
display: block;
height: 15rem;
}
figure.realistic-ebook{
display: block;
}
}

View file

@ -67,7 +67,6 @@ catch(Exceptions\InvalidFileException | Exceptions\EbookNotFoundException){
<img class="ebook" src="<?= $ebook->CoverImage2xUrl ?>" alt="The cover for the Standard Ebooks edition of <?= Formatter::EscapeHtml(strip_tags($ebook->TitleWithCreditsHtml)) ?>" property="schema:image" height="335" width="224"/> <img class="ebook" src="<?= $ebook->CoverImage2xUrl ?>" alt="The cover for the Standard Ebooks edition of <?= Formatter::EscapeHtml(strip_tags($ebook->TitleWithCreditsHtml)) ?>" property="schema:image" height="335" width="224"/>
</picture> </picture>
<div> <div>
<?= Template::DonationCounter() ?> <?= Template::DonationCounter() ?>
<?= Template::DonationProgress() ?> <?= Template::DonationProgress() ?>

View file

@ -84,9 +84,13 @@ catch(Exceptions\EbookNotFoundException){
<hgroup> <hgroup>
<h1 property="schema:name"><?= Formatter::EscapeHtml($ebook->Title) ?></h1> <h1 property="schema:name"><?= Formatter::EscapeHtml($ebook->Title) ?></h1>
<? foreach($ebook->Authors as $author){ ?> <? foreach($ebook->Authors as $author){ ?>
<? /* We include the `resource` attr here because we can have multiple authors, and in that case their href URLs will link to their combined corpus. <?
For example, William Wordsworth & Samuel Coleridge will both link to /ebooks/william-wordsworth_samuel-taylor-coleridge /* We include the `resource` attr here because we can have multiple authors, and in that case their href URLs will link to their combined corpus.
But, each author is an individual, so we have to differentiate them in RDFa with `resource` */ ?>
For example, William Wordsworth & Samuel Coleridge will both link to `/ebooks/william-wordsworth_samuel-taylor-coleridge`.
But, each author is an individual, so we have to differentiate them in RDFa with `resource`.
*/ ?>
<? if($author->Name != 'Anonymous'){ ?> <? if($author->Name != 'Anonymous'){ ?>
<h2> <h2>
<a property="schema:author" typeof="schema:Person" href="<?= Formatter::EscapeHtml($ebook->AuthorsUrl) ?>" resource="<?= '/ebooks/' . $author->UrlName ?>"> <a property="schema:author" typeof="schema:Person" href="<?= Formatter::EscapeHtml($ebook->AuthorsUrl) ?>" resource="<?= '/ebooks/' . $author->UrlName ?>">
@ -188,13 +192,7 @@ catch(Exceptions\EbookNotFoundException){
<p class="us-pd-warning">This ebook is thought to be free of copyright restrictions in the United States. It may still be under copyright in other countries. If youre not located in the United States, you must check your local laws to verify that this ebook is free of copyright restrictions in the country youre located in before accessing, downloading, or using it.</p> <p class="us-pd-warning">This ebook is thought to be free of copyright restrictions in the United States. It may still be under copyright in other countries. If youre not located in the United States, you must check your local laws to verify that this ebook is free of copyright restrictions in the country youre located in before accessing, downloading, or using it.</p>
<div class="downloads-container"> <div class="downloads-container">
<figure class="<? if($ebook->WordCount < 100000){ ?>small<? }elseif($ebook->WordCount < 200000){ ?>medium<? }elseif($ebook->WordCount <= 300000){ ?>large<? }elseif($ebook->WordCount < 400000){ ?>xlarge<? }else{ ?>xxlarge<? } ?>"> <?= Template::RealisticEbook(['ebook' => $ebook]) ?>
<picture>
<source srcset="<?= $ebook->CoverImage2xAvifUrl ?> 2x, <?= $ebook->CoverImageAvifUrl ?> 1x" type="image/avif"/>
<source srcset="<?= $ebook->CoverImage2xUrl ?> 2x, <?= $ebook->CoverImageUrl ?> 1x" type="image/jpg"/>
<img src="<?= $ebook->CoverImageUrl ?>" alt="" height="363" width="242"/>
</picture>
</figure>
<div> <div>
<section id="download"> <section id="download">
<h3>Download for ereaders</h3> <h3>Download for ereaders</h3>

View file

@ -20,6 +20,12 @@ print("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
<url> <url>
<loc><?= SITE_URL ?>/authors</loc> <loc><?= SITE_URL ?>/authors</loc>
</url> </url>
<!-- <url>
<loc><?= SITE_URL ?>/blog</loc>
</url> -->
<!-- <url>
<loc><?= SITE_URL ?>/blog/public-domain-day-2025</loc>
</url> -->
<? foreach($authors as $author){ ?> <? foreach($authors as $author){ ?>
<url> <url>
<loc><?= SITE_URL ?><?= $author->Url ?></loc> <loc><?= SITE_URL ?><?= $author->Url ?></loc>